Запуск gdbserver в фоновом режиме отладки программы и время от времени подключаться к ней с помощью gdb

Я написал программу на C для встроенного устройства в Linux на основе Debian.

После 8 дней работы одного из устройств произошла ошибка сегментации, поэтому я не очень часто могу отследить ошибку с помощью gdb.

Несколько лет назад я знал, что использовал gdb (я думаю, с gdbserver), чтобы запустить программу, отсоединенную от оболочки, чтобы я мог оставить устройство включенным и каждый день проверять, произошло ли что-то плохое, но я не помню, как я это сделал тот!

Я попытался с gdbserver, подключившись к нему с помощью gdb, но он останавливает отладку, когда я закрываю соединение.

Вы знаете, как этого добиться?

1 ответ

Вам придется detach, не бросайте GDB, как это.

Так как в любом случае вы заняты только после смерти, я бы порекомендовал что-то совершенно другое:

Включить дамп ядра; от имени пользователя root

 > sudo -s ##become root
 $ echo "*  soft  core  unlimited" >> /etc/security/limits.conf
 $ su -l <user that is running the crashing program>
 $ ulimit -c unlimited
 $ program 
 ##wait for crash

(это снимает любое ограничение, включая ограничение по умолчанию 0B, для максимального размера файла дампа памяти).

Затем, после аварии, найти core.* файл coredump и откройте его с помощью gdb. Вуаля, состояние программы при сбое восстанавливается в GDB, и вы можете делать практически все, что вы можете делать с GDB, подключенным во время сбоя.

Другие вопросы по тегам