2012-04-02 34 views
5

我有正在运行的进程,但它的可执行文件已被删除。 如果我尝试附加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。 and fire gdb attach pgrep a.out file 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. 

回答

7

尝试使用/proc/<pid>/exe作为可执行文件。现在它似乎是一个符号链接,但是,过去有可能从中提取被删除的可执行文件。

请参阅Detecting deleted executables

我们可以使用下面的命令来连接GDB

gdb <path-to-binary> <pid> 
+0

?我怀疑它...... – littleadv 2012-04-02 10:01:43

+0

@littleadv:嗯?该问题被标记为'linux'。 – 2012-04-02 10:03:31

+0

在linux下工作(我刚刚测试过,打算发布相同的),我没有在这里看到任何人提到cygwin。 – Hasturkun 2012-04-02 10:03:34

2

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

+0

我不能指定相同的可执行文件,但在不同的位置? – 2012-04-02 10:13:35

+0

@VivekGoel是的,你可以,假设它的可执行文件... – littleadv 2012-04-02 17:11:22

+0

,但如果我给gdb进程它说可执行删除。程序已被调试。 – 2012-04-02 18:44:11

相关问题