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

GDB: running cpp process debugging without symbols

本文关键字:cpp 进程 调试 带符号 运行 GDB      更新时间:2023-10-16

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

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

我可以比较它们(有和没有调试符号二进制文件(并使用 GDB 推断出问题所在吗?

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

不需要任何调试符号来了解它花费的时间,你只需要应用程序没有被完全剥离(大多数二进制文件不是(。

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

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

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