在gperftools中获取针对某个包的调用层次结构

在gperftools中获取针对某个包的调用层次结构,r,rcpp,call-hierarchy,gperftools,R,Rcpp,Call Hierarchy,Gperftools,我可以使用gperftools生成调用图,例如 现在我想在dplyrR包中获取bind_rows()的调用图,以便跟踪 我使用CPP/cxflags=-g-fvar跟踪分配和LDFLAGS=-lprofiler-lunwind编译了R和dplyr 当我运行以下命令时: CPUPROFILE="samples.log" R --vanilla <<< "library(dplyr) ll = lapply(1:1e5, function(x) as.list(setNames(r

我可以使用gperftools生成调用图,例如

现在我想在
dplyr
R包中获取
bind_rows()
的调用图,以便跟踪

我使用
CPP/cxflags=-g-fvar跟踪分配和
LDFLAGS=-lprofiler-lunwind
编译了
R
dplyr

当我运行以下命令时:

CPUPROFILE="samples.log" R --vanilla <<< "library(dplyr)
ll = lapply(1:1e5, function(x) as.list(setNames(runif(5), letters[1:5])))
print(system.time(bind_rows(ll)))"

pprof --gif /usr/lib/R/bin/exec/R samples.log > out.gif


编辑:在使用
-g
重新编译Rcpp并使用
-lprofiler
链接后,我可以得到以下结果:,其中8%获得了良好的堆栈跟踪,但大部分仍然没有。这可能是因为加载某些库时没有
-lprofiler
支持吗?

叹气。。。你能试试吗?有一段视频。调用图是一个非常有用的工具。谢谢你的评论。我以前看过你的链接答案,但不太明白这与我的问题有什么关系(在仔细阅读之后,我知道)。但肯定有一种方法可以使用gprof/a探查器自动进行调用堆栈采样,并对结果进行图形化表示?(即使它没有命名为“调用图”,我也不太熟悉这个术语)首先-你这样做是为了找到加速,对吗?如果没有,就别理我。如果是这样,请理解图形表示仅适用于问题的特定子集,这还不够好。亲自检查文本堆栈示例可以发现所有问题。这不是powerpoint材料,而是加速材料。另一点:自动采样1)需要检查的样本太多(),2)阻止您在需要的时候采集样本,从而稀释结果。我正在观看一段视频,内容是关于-您能否给出一个示例,说明这会导致堆栈样本丢失的问题?当然:。
pprof --focus=rbind__impl --gif /usr/lib/R/bin/exec/R samples.log > out.gif