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

标签 c linux gcc gdb

我有一个错误的程序,当执行时收到一个 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/

相关文章:

linux - 使用 X11,如何在忽略某些事件的同时获取用户时间 "away from keyboard"?

c++ - 扩展 GCC 以进行内存管理

c++ - 合理支持的最低 GCC 版本是多少?

c++ - 如何从文件中读取编译器标志

c - 悬空指针示例仍输出有效数据

linux - 从搜索整个系统中排除目录

c - 如何在 Makefile 中创建对 .o 文件的引用

c - 如何创建一个函数将输出保存到文本文件?

c - uthash 和 utarray 向后兼容吗?

linux - 在 Linux 中查找共享库的加载地址