我有一个错误的程序,当执行时收到一个 SIGSEGV。
我可以像这样使用 gdb:
$ gdb ./prog
但我更希望 gdb 从 prog
捕获 SIGSEGV 并自动附加它。
$ ./prog
Segmentation Fault
(gdb) ...
有办法吗?
谢谢
最佳答案
嗯。您可以设置信号处理程序以使用当前进程启动调试器。这样您就可以“实时”检查整个状态。
#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;
}
更新:根据 miedwar 和 Fanatic23 的建议修改。当前的 Ubuntu 发行版配置为禁止调试非子进程。参见 https://askubuntu.com/questions/41629/after-upgrade-gdb-wont-attach-to-process进行修复。
关于gdb可以自动在SIGSEGV上附加一个进程吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3236483/