运行应用程序的Linux系统。此应用程序是一个cpp二进制文件,没有任何调试符号。有些应用程序如何使用100%cpu。想调试为什么它无限运行。如果我停止并将二进制文件替换为调试符号,则该问题可能无法重现。
因此,在另一个环境中运行带有调试符号的相同应用程序。在这里运行良好。
我可以比较它们(带有和不带有调试符号二进制文件),并使用GDB推断出什么问题。
答案 0 :(得分:2)
此应用程序是cpp二进制文件,没有任何调试符号
您不需要任何调试符号来了解它在哪里花费时间,您只需要不完全剥离应用程序即可 (大多数二进制文件不是)。
使用perf record -p $pid
收集CPU配置文件,然后使用perf report
进行分析。
如果应用程序 已完全剥离,则仍然可以使用perf record
来收集程序计数器值,然后使用perf record --symfs ...
将其指向应用程序的未剥离副本。文档here。
当心:剥离和未剥离的副本都必须使用完全相同的构建标记进行构建,否则您将得到垃圾。最佳做法是始终将未剥离的副本保存为构建过程的一部分。