C gdb能否在SIGSEGV上自动附加进程
我有一个错误的程序,执行时会收到SIGSEGV 我可以这样使用gdb: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
$ 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