通过bcc工具的配置文件,我得到了大部分"[未知]";在我的C程序的配置文件输出中。当然,这是意料之中的事,因为程序符号没有加载。然而,我不确定如何正确地加载符号;配置文件";程序可以接收它。我已经构建了启用调试的程序"-g";,但是我如何将调试符号加载到"0";个人资料";?
请参阅bcc配置文件的手册页中的调试部分:
请参阅";[未知]";伪造地址的帧?这可能发生在不同的原因。最好的方法是先让Linux perf工作,然后试试这个工具。例如,";perf记录-F 49-a-g--睡眠1;perf脚本";,和以检查那里的未知帧。
最常见的原因是";[未知]";框架是目标软件具有尚未编译使用帧指针,因此我们不能使用这种简单的方法来遍历堆栈在这种情况下的解决方案是使用具有帧指针的软件,例如,gcc-fno省略帧指针,或者Java的-XX:+PreserveFramePointer。
另一个原因是";[未知]";frames是JIT编译器,它不使用传统符号表。在这种情况下,修复方法是填充/tmp/perf-PID.map文件,其中包含该工具应读取的符号。你怎么样这取决于运行时(Java,Node.js(
如果输出中似乎有不相关的样本,请检查其他样本可能正在运行的采样或跟踪工具。此的当前版本若评测同时发生,该工具可以包含它们的事件。那些可以在将来的版本中对样本进行过滤。
在您的情况下,由于它是一个C程序,我建议使用-fno-omit-frame-pointer
进行编译。