[英]Can gdb automatically attach a process on a SIGSEGV
我有一个错误的程序,当执行接收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分析callstack。 您可以查看ulimit的手册页。
要添加到Mainframe的答案,您可以将您的应用程序与libdebugme (或简称LD_PRELOAD
)链接,以实现类似的功能。 例如:
DEBUGME_OPTIONS=handle_signals=1 LD_PRELOAD=libdebugme.so ./app
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.