R调用栈详细检查
R call stack detailed inspection
我正在寻找处理调用堆栈日志记录的正确方法。
我有功能,可以记录他们对列表的调用。
s <- list()
f <- function(){
s <<- c(s,list(sys.call()))
g()
}
g <- function(){
s <<- c(s,list(sys.call()))
1
}
他们将以未知的顺序被调用。
f()
f()
g()
f()
除了 sys.call()
之外,我还应该记录哪些数据才能构建调用层次结构?
我想更改我当前的日志粒度。
sapply(s,deparse)
# [1] "f()" "g()" "f()" "g()" "g()" "f()" "g()"
类似于下面的内容。
# sys.call call_id call_seq
# : f() 1 0
# : g() 1 1
# : f() 2 0
# : g() 2 1
# : g() 3 0
# : f() 4 0
# : g() 4 1
拥有如此精细的数据,我将能够重建调用层次结构。
谢谢
我能够管理那个过程。
在每次调用中,我都会测量调用链的递归深度。使用调用深度和调用顺序我计算了单个调用链。
解决问题的代码部分是种:
dt[, seq := depth( call_chain )
][, id := cumsum( seq==1L ) ]
完整案例this.
我正在寻找处理调用堆栈日志记录的正确方法。
我有功能,可以记录他们对列表的调用。
s <- list()
f <- function(){
s <<- c(s,list(sys.call()))
g()
}
g <- function(){
s <<- c(s,list(sys.call()))
1
}
他们将以未知的顺序被调用。
f()
f()
g()
f()
除了 sys.call()
之外,我还应该记录哪些数据才能构建调用层次结构?
我想更改我当前的日志粒度。
sapply(s,deparse)
# [1] "f()" "g()" "f()" "g()" "g()" "f()" "g()"
类似于下面的内容。
# sys.call call_id call_seq
# : f() 1 0
# : g() 1 1
# : f() 2 0
# : g() 2 1
# : g() 3 0
# : f() 4 0
# : g() 4 1
拥有如此精细的数据,我将能够重建调用层次结构。
谢谢
我能够管理那个过程。
在每次调用中,我都会测量调用链的递归深度。使用调用深度和调用顺序我计算了单个调用链。
解决问题的代码部分是种:
dt[, seq := depth( call_chain )
][, id := cumsum( seq==1L ) ]
完整案例this.