C gdb能否在SIGSEGV上自动附加进程

C gdb能否在SIGSEGV上自动附加进程,c,linux,gcc,gdb,C,Linux,Gcc,Gdb,我有一个错误的程序,执行时会收到SIGSEGV 我可以这样使用gdb: $ gdb ./prog 但我更希望gdb从prog捕获SIGSEGV并自动附加它 $ ./prog Segmentation Fault (gdb) ... 有办法吗 谢谢您总是可以创建一个核心文件,然后在该核心上使用gdb分析调用堆栈。您可以查看ulimit的手册页来执行此操作 .嗯。您可以设置一个信号处理程序,用当前进程启动调试器。这样你就可以“现场”检查整个州 #包括 #包括 #包括 #包括 常量字符*prog

我有一个错误的程序,执行时会收到SIGSEGV

我可以这样使用gdb:

$ gdb ./prog 
但我更希望gdb从
prog
捕获SIGSEGV并自动附加它

$ ./prog
Segmentation Fault
(gdb) ...
有办法吗


谢谢

您总是可以创建一个核心文件,然后在该核心上使用gdb分析调用堆栈。您可以查看ulimit的手册页来执行此操作


.

嗯。您可以设置一个信号处理程序,用当前进程启动调试器。这样你就可以“现场”检查整个州

#包括
#包括
#包括
#包括
常量字符*prog=0;
无效fn(内部符号)
{
char-buf[256];
snprintf(buf,255,“ddd%s%d”,prog,getpid());
系统(buf);
}
int main(int argc,字符**argv)
{
prog=argv[0];
信号(SIGSEGV和fn);
int*p=0;
int k=*p;
}

更新:根据米德瓦和狂热分子的建议进行更改23。当前的Ubuntu发行版配置为不允许调试非子进程。有关修复方法,请参阅。

要添加到大型机的答案中,您可以将应用程序链接到(或简单地
LD_PRELOAD
it)以实现类似的功能。例如:

DEBUGME_OPTIONS=handle_signals=1 LD_PRELOAD=libdebugme.so ./app

+很高兴知道你能捕捉到这个信号,顺便说一句,system()之后需要一个exit(),这样它就不会被多次调用。fn的原型需要一个整数参数来编译代码。
DEBUGME_OPTIONS=handle_signals=1 LD_PRELOAD=libdebugme.so ./app