有没有办法获取gdb中进程的信号信息(哪些信号被启用,哪些被阻止,哪些是处理程序/选项)?有info signals,但这给了我gdb的信号处理信息,我需要这个信息用于正在调试的进程 - 例如,看看它是否阻止某些信号或查看它为该信号安装的处理程序.
如果它是相关的,我的gdb是GNU gdb 6.3.50-20050815 (Apple version gdb-1515) (Sat Jan 15 08:33:48 UTC 2011).
80x*_*x25 10
假设您连接到正在运行的进程并且没有检查核心转储,并假设gdb可以访问符号,您应该能够调用(通过gdb)POSIX信号处理函数来确定信息,例如阻塞了哪些信号,以及什么是寄存器信号处理程序.
例如,可以使用以下内容来确定是否使用sigaction函数为SIGSEGV == 11信号注册了处理程序:
(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>
Run Code Online (Sandbox Code Playgroud)
此信息应该允许您确定处理程序的地址,然后您可以将其传递给'info symbol'命令以确定正在使用哪个函数作为处理程序.
可以执行类似的操作以确定哪些信号被阻止.
此外,特殊的GDB变量$ _siginfo可能对您有用.有关详细信息,请参阅此处:http: //sourceware.org/gdb/onlinedocs/gdb/Signals.html
虽然我的猜测是$ _siginfo不适用于Apple/darwin目标.
| 归档时间: |
|
| 查看次数: |
4012 次 |
| 最近记录: |