我正在寻找使用调用堆栈记录的正确方法 我有函数,它们将调用记录到列表中。
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
以这样的粒度获得数据我将能够重建调用的层次结构。
由于
答案 0 :(得分:0)
我能够管理这个过程 在每次调用时,我测量调用链的递归深度。使用呼叫深度和呼叫顺序我已经计算了单个呼叫链 解决问题的代码部分是种:
dt[, seq := depth( call_chain )
][, id := cumsum( seq==1L ) ]
完整案例this。