如何在Linux中调试正在运行的C++程序?

sky*_*oor 7 c++ debugging gdb

我有一个关于在Linux中调试正在运行的C++程序的问题.如果编程已经在运行并且无法中断,那么该怎么做.

我可以找到三种方法,但我对细节知之甚少,如果有人能够更深入地阐述它,我将不胜感激.

1)我们可以通过指定进程ID来使用GDB

gdb -p PID
Run Code Online (Sandbox Code Playgroud)

在这种情况下,这和之间有什么区别attach PID

2)我们可以使用pstat,但是,我使用的是Ubuntu,没有pstat,只有mpstat

似乎mpstat没有提供太多的信息,也没有太多的选择.

3)检查目录./proc下的详细信息

在这种情况下,只需转到带有PID的目录.但是,这应该是手动完成吗?

Dmi*_*kov 2

-p我在 gdb man 或其文档中找不到选项,但它确实有效!我已经在 RedHat 上的旧版本和 Debian 上的 7.0.1 上尝试过多次。

我不确定它是如何通过 PID(也许/proc/<PID>/exe)找到 exe 的,但确实如此。由于它没有在他们的文档中描述,也许它不是最推荐的方式,但我没有遇到任何问题。

gdb -p <PID>运行 gdb 和在 shell 中输入之间没有明显的区别attach <PID>

我个人更喜欢ps xa| grep myprogram获取PID