Запуск 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, подключенным во время сбоя.