GDB附加到删除可执行文件的进程

时间:2012-04-02 09:53:31

标签: linux gdb

我有正在运行的进程,但它的可执行文件已被删除。 如果我尝试附加gdb,我会收到以下错误

/home/vivek/binary/releases/20120328101511/bin/app.exe (deleted): No such file or directory.

如何将gdb附加到此过程?

示例测试用例: 源代码:

#include<stdio.h>
#include<stdlib.h>
int main(){
  for (;;){
    printf("Sleeping");
    sleep(1);
  }
}

编译它

 gcc main.cc -o a.out
 gcc main.cc -o b.out

运行 ./a.out

现在从不同的终端删除a.out。 并且fire gdb附加pgrep a.out文件b.out 它不起作用。

GDB显示以下错误:

/tmp/temp/a.out (deleted): No such file or directory.
A program is being debugged already.  Kill it? (y or n) n
Program not killed.

2 个答案:

答案 0 :(得分:7)

尝试使用/proc/<pid>/exe作为可执行文件。它现在似乎是一个象征性的链接,但是,过去可以从中提取已删除的可执行文件。

请参阅Detecting deleted executables

我们可以使用以下命令附加gdb

gdb <path-to-binary> <pid>

答案 1 :(得分:2)

你做不到。 GDB需要可执行文件中的符号数据,并且在运行程序时不会被操作系统加载。