0

我正在寻找使用调用堆栈日志记录的正确方法。
我有函数,可以记录他们对列表的调用。

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

拥有如此粒度的数据,我将能够重建调用层次结构。

谢谢

4

1 回答 1

0

我能够管理这个过程。
在每次调用时,我都会测量调用链的递归深度。使用调用深度和调用顺序我计算了单个调用链。
解决问题的代码部分

dt[, seq := depth( call_chain )
   ][, id := cumsum( seq==1L ) ]

对于完整的情况this

于 2015-03-25T21:18:18.817 回答