Я часто работаю с PostgreSQL для отладки, и он использует SIGINT
внутренне для некоторых своих межпроцессорных сигналов.Отладка программы, использующей SIGINT с gdb
В результате при запуске определенных бэкендов под gdb
исполнение обычно прервано. Можно использовать команду signal
, чтобы убедиться, что SIGINT
передано программе и что она не захвачена gdb
... но затем gdb
не отвечает на control-C в командной строке, так как отправляет SIGINT
.
При запуске:
handle SIGINT noprint nostop pass
gdb
пожалуется
SIGINT is used by the debugger.
Are you sure you want to change it? (y or n) y
Есть ли способ, чтобы получить GDB, чтобы использовать другой сигнал прерывания? Или любой альтернативный метод, который позволил бы мне иметь gdb
игнорировать SIGINT
?
(Это не проблема для большинства бэкэнд-отладок PostgreSQL, но это боль с работниками фона и autovacuum).
_Is Есть ли способ, чтобы получить GDB, чтобы использовать другой сигнал прерывания _ - SIGINT поставляется из системы, когда входной драйвер видит управление C в буфере. Теоретически можно было бы сказать программе относиться к другому сигналу так, как он будет относиться к SIGINT, но на практике я сомневаюсь, что gdb или что-то еще сделает это, потому что значение не является гибким из операционной системы. – mah
Не могли бы вы его решить, настроив gdb на обработку другого сигнала с помощью 'stop nopass' (или' stop pass', если программа нуждается в сигнале) и отправить этот сигнал программе вместо использования ctrl-c? – kaylum
Использование, например. 'kill -USR1' с другого терминала? – immibis