我有正在运行的进程,但它的可执行文件已被删除。 如果我尝试附加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.
答案 0 :(得分:7)
尝试使用/proc/<pid>/exe
作为可执行文件。它现在似乎是一个象征性的链接,但是,过去可以从中提取已删除的可执行文件。
请参阅Detecting deleted executables。
我们可以使用以下命令附加gdb
gdb <path-to-binary> <pid>
答案 1 :(得分:2)
你做不到。 GDB需要可执行文件中的符号数据,并且在运行程序时不会被操作系统加载。