我是一名有用的助手,可以为您进行文本翻译。以下是需要翻译的内容:
我看到过一些类似Pin和DynInst的工具,它们通过动态代码操作来对代码进行仪器化而无需重新编译。这些似乎是针对一个应该是简单问题的沉重解决方案:从程序中检索准确的函数调用数据。
我想编写一些代码,以便在我的代码中,我可以写
void SomeFunction() {
StartProfiler();
...
StopProfiler();
}
在执行前和执行后,检索有关哪些函数在 StartProfiler()
和 StopProfiler()
之间被调用(整个调用树)以及每个函数所花费的时间的数据。
最好能够读取调试符号,以获取函数名称而不是地址。
--instr-atstart=no
和callgrind_control实用程序),并且它将绘制摘要树而不是转储完整的调用跟踪(但在内部它有一个)。如果您想获取所有调用的跟踪,请查看此线程https://dev59.com/_nVC5IYBdhLWcg3wYQAp(大多数答案只需要脚本和gdb)。我通常使用这个解决方案:http://blog.superadditive.com/2007/12/01/call-graphs-using-the-gnu-project-debugger/。 - osgx