Tah*_*lil 6 c++ profiler centos5 redhat ltrace
我试过使用ltrace.我试图使用下面的命令来分析其用于通过程序的library.so文件sampleapp,ltrace -c -T --library=library.so --output=out.txt ./SampleApp.但它显示了上述错误.但是library.so是一个调试版本.所以符号表应该在那里.我试过验证它objdump --source library.so | grep CreateSocket().它返回使用该CreateSocket()函数的代码.这意味着它包含一个符号表.那个错误发生的原因呢?
相关文章:测量动态链接库的每秒CPU使用率
这取决于可执行文件的SampleApp创建方式。如果它是静态链接的,您将看到该错误。ltrace 仅适用于动态链接的应用程序。
您可以运行ldd SampleApp以显示共享对象依赖关系。它是动态链接的并且依赖于 libc,其输出ldd将包含如下行:
libc.so.6 => /usr/lib/libc.so.6 (0x00007fb24ac53000)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您可以使用 ltrace 选项--library=libc.so.6,它应该可以工作。但是,--library=libc.so不会匹配(您不会收到错误,但不会匹配任何库调用)。
当静态链接时,ldd SampleApp将显示以下输出:
not a dynamic executable
Run Code Online (Sandbox Code Playgroud)
我的猜测是因为静态链接可能是错误的。然而,重要的一点是,如果 ltrace 显示此错误,则必须从可执行文件本身(二进制文件)及其创建方式(链接器选项)开始诊断,而不是从共享库开始诊断。
问题ltrace(库跟踪工具)如何工作?有一些很好的参考资料可以帮助您更多地了解 ltrace 的内部结构。