Если у вас есть соответствующие разрешения, вы можете подключить GDB к любому процессу. Вы можете сделать это в командной строке с помощью:
gdb /path/to/binary _pid_
или изнутри GDB с помощью команды присоединения:
attach _pid_
Итак, после запуска вашего демона вы можете использовать любой из этих методов, чтобы присоединиться к окончательному PID, под которым работает ваш демон. Присоединение gdb останавливает отслеживаемый вами процесс, поэтому вам нужно будет выполнить команду «continue», чтобы перезапустить его.
Я не знаю прямого способа заставить gdb запускать произвольные команды в случае сбоя программы. Вот один из обходных путей, о котором я могу подумать:
- Создание и регистрация обработчиков сигналов для SIGSEGV.
- Скажите GDB не останавливаться на этом сигнале (
handle SIGSEGV nostop
)
- Установите точку останова в первой строке вашего обработчика сигнала.
- Назначение команд для точки останова с шага 3