c++ - GDB:运行没有符号的cpp进程调试

标签 c++ debugging gdb

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

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

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

最佳答案

This application is a cpp binary without any debug symbols

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

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

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

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

关于c++ - GDB:运行没有符号的cpp进程调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52014300/

相关文章:

c++ - FSM 中的切换状态

postgresql - 调试 PostgreSQL 用户定义函数

debugging - 如何检查GDB中函数的返回值?

.net - 如何查找 Web 应用程序加载的 DLL?

java - 为什么在使用方法入口调试时,被调试的程序速度变慢了这么多?

java - 当我读取图像时,源栅格波段的数量和源颜色空间组件不匹配

c - 通过GDB加载模块

C++ 如何将 2 个数组(字符串)传递给一个函数,并与一个字符串进行比较

c++ - 匿名命名空间

c++ - 在父窗口中捕获 WM_MOUSEMOVE 事件