Может gdb автоматически присоединять процесс на SIGSEGV

У меня есть дефектная программа, которые, когда выполняются, получают SIGSEGV.

Я могу использовать gdb как это:

$ gdb ./prog 

Но я предпочел бы, чтобы gdb поймали SIGSEGV от prog и присоедините его автоматически.

$ ./prog
Segmentation Fault
(gdb) ...

Существует ли способ сделать это?

Спасибо

8
задан mathk 13 July 2010 в 11:04
поделиться

2 ответа

Хм. Вы можете настроить обработчик сигналов для запуска отладчика с текущим процессом. Таким образом, вы можете «вживую» осмотреть все состояние.

#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 .

12
ответ дан 5 December 2019 в 10:39
поделиться

Ну, вы всегда можете создать файл ядра, а затем проанализировать стек вызовов с помощью gdb на этом ядре. Вы можете проверить страницу руководства для ulimit, чтобы сделать это.

Для получения дополнительной информации перейдите по этой ссылке .

3
ответ дан 5 December 2019 в 10:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: