GDB:运行不带符号的cpp进程调试

时间:2018-08-25 05:25:07

标签: c++ debugging gdb

运行应用程序的Linux系统。此应用程序是一个cpp二进制文件,没有任何调试符号。有些应用程序如何使用100%cpu。想调试为什么它无限运行。如果我停止并将二进制文件替换为调试符号,则该问题可能无法重现。

因此,在另一个环境中运行带有调试符号的相同应用程序。在这里运行良好。

我可以比较它们(带有和不带有调试符号二进制文件),并使用GDB推断出什么问题。

1 个答案:

答案 0 :(得分:2)

  

此应用程序是cpp二进制文件,没有任何调试符号

不需要任何调试符号来了解它在哪里花费时间,您只需要不完全剥离应用程序即可 (大多数二进制文件不是)。

使用perf record -p $pid收集CPU配置文件,然后使用perf report进行分析。

如果应用程序 已完全剥离,则仍然可以使用perf record来收集程序计数器值,然后使用perf record --symfs ...将其指向应用程序的未剥离副本。文档here

当心:剥离和未剥离的副本都必须使用完全相同的构建标记进行构建,否则您将得到垃圾。最佳做法是始终将未剥离的副本保存为构建过程的一部分。