gdb可以自动在SIGSEGV上附加进程

mat*_*thk 8 c linux gcc gdb

我有一个错误的程序,当执行接收SIGSEGV时.

我可以像这样使用gdb:

$ gdb ./prog 
Run Code Online (Sandbox Code Playgroud)

但是我希望gdb能够捕获SIGSEGV prog并自动附加它.

$ ./prog
Segmentation Fault
(gdb) ...
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?

谢谢

Nor*_*ame 12

嗯.您可以设置信号处理程序以使用当前进程启动调试器.这样你可以检查整个状态"现场".

#include <signal.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

const char *prog=0;
void fn(int signum)
{

    char buf[256]; 
    snprintf(buf,255,"ddd %s %d",prog,getpid());
    system(buf);
}
int main(int argc, char **argv)
{
    prog=argv[0];
    signal(SIGSEGV,&fn);
    int *p=0; 
    int k=*p;
}
Run Code Online (Sandbox Code Playgroud)

更新:根据miedwar和Fanatic23的建议进行调查.当前的Ubuntu发行版配置为禁止调试非子进程.有关修复,请参阅https://askubuntu.com/questions/41629/after-upgrade-gdb-wont-attach-to-process.