Как напечатать последний полученный сигнал в GDB? - PullRequest
11 голосов
/ 17 января 2012

при загрузке дампа основной памяти в GDB отображается причина, по которой он произошел автоматически. Например

Программа завершена с сигналом 11, ошибка сегментации.

Есть ли способ получить информацию снова? Дело в том, что я пишу сценарий, который нуждается в этой информации. Но если сигнал доступен только после загрузки дамп памяти и я не могу получить доступ к информации позже.

Неужели нет команды для такой важной функции?

Ответы [ 2 ]

12 голосов
/ 23 января 2012

Чтобы распечатать информацию о последнем сигнале, выполните

p $_siginfo
3 голосов
/ 17 января 2012

Если вы знаете, что такое имя файла ядра, вы можете выполнить команду target core, которая задает целевой файл ядра:

(gdb) target core core.8577
[New LWP 8577]
Core was generated by `./fault'.
Program terminated with signal 11, Segmentation fault.
#0  0x080483d5 in main () at fault.c:10
10      *ptr = '\123';
(gdb) 

Что касается подразумеваемого вопроса, , что такое команда info last signal? , я не знаю. Там, кажется, не один.


Имя основного файла можно получить с помощью команды info target:

(gdb) info target
Symbols from "/home/wally/.bin/fault".
Local core dump file:
    `/home/wally/.bin/core.8577', file type elf32-i386.
    0x00da1000 - 0x00da2000 is load1
    0x08048000 - 0x08049000 is load2
...
    0xbfe8d000 - 0xbfeaf000 is load14
Local exec file:
    `/home/wally/.bin/fault', file type elf32-i386.
    Entry point: 0x8048300
    0x08048134 - 0x08048147 is .interp
    0x08048148 - 0x08048168 is .note.ABI-tag
    0x08048168 - 0x0804818c is .note.gnu.build-id
    0x0804818c - 0x080481ac is .gnu.hash
    0x080481ac - 0x080481fc is .dynsym
    0x080481fc - 0x08048246 is .dynstr
...
...