如何在GDB中打印最后收到的信号?

Uhl*_*hlo 13 linux debugging gdb coredump

将核心转储加载到GDB时,会显示自动崩溃的原因.例如

程序以信号11,分段故障结束.

有没有办法再次获取信息?问题是,我正在编写一个需要此信息的脚本.但是如果信号仅在加载核心转储后才可用,那么我以后就无法访问这些信息.

这样一个重要的功能真的没有命令吗?

ste*_*eve 14

打印有关最后一个信号执行的信息

p $_siginfo
Run Code Online (Sandbox Code Playgroud)


wal*_*lyk 3

如果您知道核心文件名是什么,则可以发出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) 
Run Code Online (Sandbox Code Playgroud)

至于隐含的问题,命令是什么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
...
Run Code Online (Sandbox Code Playgroud)

  • @Uhlo:命令“info target”显示可执行文件和核心文件名,以及更多信息。也许这样就可以了? (2认同)