Как получить информацию о сигнале процесса в GDB?

есть ли способ получить информацию о сигнале (какие сигналы включены, какие заблокированы, каковы обработчики/параметры) для процесса в gdb? Есть info signals, но это дает мне информацию об обработке сигнала gdb, и мне нужна эта информация для отлаживаемого процесса - например, чтобы увидеть, блокирует ли он определенный сигнал или какой обработчик он устанавливает для этого сигнала.

Если это уместно, мой gdb GNU gdb 6.3.50-20050815 (Apple version gdb-1515) (Sat Jan 15 08:33:48 UTC 2011).

1 ответов


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

например, что-то вроде следующего может использоваться для определения, зарегистрирован ли обработчик для сигнала SIGSEGV==11 с помощью sigaction функция:

(gdb) call malloc(sizeof(struct sigaction))
 = (void *) 0x...
(gdb) call malloc(sizeof(struct sigaction))
 = (void *) 0x...
(gdb) call memset(, 0, sizeof(struct sigaction))
...
(gdb) call sigaction(11, , )
$... = 0
(gdb) print *((struct sigaction *))
<prints struct sigaction info>

эта информация должна позволить вам определить адрес обработчика, а затем вы можете просто передать его команде "info symbol", чтобы определить, какая функция используется в качестве обработчика.

подобные операции могут быть выполнены, чтобы определить, какие сигналы блокируются.

кроме того, специальная переменная GDB $_siginfo может быть вам полезна. Подробнее см. здесь информация: http://sourceware.org/gdb/onlinedocs/gdb/Signals.html

хотя я предполагаю, что $_siginfo недоступен для целей Apple / darwin.