如何在 gdb 中附加进程

Posted

技术标签:

【中文标题】如何在 gdb 中附加进程【英文标题】:How to attach a process in gdb 【发布时间】:2012-12-31 12:19:25 【问题描述】:

我有一个简单的 C 程序,它派生出一个进程,然后运行一个可执行文件。

我想将子进程附加到 gdb。

我在一个控制台中运行主程序并打开另一个控制台来查找子进程的pid,然后使用以下命令启动gdb:

gdb attach 12271

其中12271 是子进程ID,但附加失败:

No such file or directory.

知道为什么吗?

【问题讨论】:

我不认为 attach 是命令行参数。一旦 gdb 已经运行,您就可以使用它。这家伙有一个很好的教程:dirac.org/linux/gdb/06-Debugging_A_Running_Process.php Can I use GDB to debug a running process?的可能重复 【参考方案1】:

尝试以下方法之一:

gdb -p 12271
gdb /path/to/exe 12271

gdb /path/to/exe
(gdb) attach 12271

【讨论】:

【参考方案2】:

第一个参数应该是可执行程序的路径。所以

gdb progname 12271

【讨论】:

【参考方案3】:

使用myExecutableName 的运行实例,其PID 为15073

在命令行中在$ gdb myExecu 之后点击Tab 两次,将自动自动完成:

$ gdb myExecutableName 15073

并将 gdb 附加到此进程。太好了!

【讨论】:

以上是关于如何在 gdb 中附加进程的主要内容,如果未能解决你的问题,请参考以下文章

如何在 GDB 中打开源文件

GDB 如何知道它必须在指定的断点处中断?

如何使用WinDbg调试进程信息

我的程序如何附加一个正在运行的程序?就像 gdb 一样。在Linux中

是否可以将 gdb 附加到崩溃的进程(又名“即时”调试)

如何不通过输出Log,判断某个程序运行到哪个函数?