如何在GDB中获取进程信号信息



是否有一种方法来获取信号信息(哪些信号是启用的,哪些是阻塞的,什么是处理程序/选项)的进程在gdb?有info signals,但这给了我gdb的信号处理信息,我需要这个信息的进程被调试-例如,看看它是否阻塞某些信号或看看它安装该信号的处理程序。

如果是相关的,我的gdb是GNU gdb 6.3.50-20050815 (Apple version gdb-1515) (Sat Jan 15 08:33:48 UTC 2011)

假设您连接到一个正在运行的进程并且没有检查核心转储,并且假设gdb可以访问符号,您应该能够调用(通过gdb) POSIX信号处理函数来确定诸如哪些信号被阻塞,以及哪些是寄存器信号处理程序等信息。

例如,可以使用下面的代码来确定处理程序是否为SIGSEGV==11信号注册,使用sigaction函数:
(gdb) call malloc(sizeof(struct sigaction))
$1 = (void *) 0x...
(gdb) call malloc(sizeof(struct sigaction))
$2 = (void *) 0x...
(gdb) call memset($2, 0, sizeof(struct sigaction))
...
(gdb) call sigaction(11, $2, $1)
$... = 0
(gdb) print *((struct sigaction *)$1)
<prints struct sigaction info>

这个信息应该允许你确定处理程序的地址,然后你可以把它传递给'info symbol'命令,以确定什么函数被用作处理程序。

可以执行类似的操作来确定哪些信号被阻塞。

另外,特殊的GDB变量$_siginfo可能对您有用。更多信息请看这里:http://sourceware.org/gdb/onlinedocs/gdb/Signals.html

虽然我猜$_siginfo是不可用于Apple/darwin目标的

最新更新