LINUX.ORG.RU

gcore, core dump и gdb


0

1

Пытаюсь сделать core dump многотредовой программы в определенной точке и дальше использовать его как снэпшот состояния для отладки. Делается это для ускорения отладки, т.к. программа идет до места падения очень долго, а reverse debug использовать не могу — gdb не поддерживает обратную отладку для многотредовых приложений.
Для создания дампа использую gcore. Насколько я понял, версии gcore для Linux и BSD отличаются — BSDшная версия умеет останавливать программу до снятия дампа. Поэтому усыпляю программу вручную — из кода вызываю kill(SIGSTOP,getpid()), дальше снаружи вызываю gcore на выданный pid.

Полученный дамп отдаю gdb (7.2) через --core. Он определяет исходную программу, восстанавливает треды, но в бэктрэйсе показывает муть и не подхватывает отладочную информацию. Подключение исходного бинаря через symbol-file ничего не меняет. При попытке запустить исполнение с места сохранения выдает No executable file specified.
Раньше с core dump'ами не работал. Need help.

А где Вы возьмёте структуры ядра связанные с убитым процессом? core нельзя «продолжить».

Eshkin_kot ★★
()
Ответ на: комментарий от i-rinat

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

sn1ln
()
Ответ на: комментарий от i-rinat

>Может быть это поможет? Вроде должно работать и для многопоточных программ.

http://arcib.dowling.edu/cgi-bin/info?(gdb)Checkpoint%2FRestart


Да, это-то мне и было нужно! Не знал, что checkpoint в gdb существует. Спасибо!
PS: Решение гениальное — насколько я понял, gdb просто форкает процесс с сохранением памяти, дескрипторов, обработчиков сигналов etc. А в случае отката просто переключается на форкнутый процесс.

j-a-t-a
() автор топика
Ответ на: комментарий от j-a-t-a

Кстати, очень не рекомендую использовать для работы с чекпоинтом последние версии gdb — в них появились мощные проблемы с многотредовыми приложениями (отладчик запросто выпадает в сегфолт). Сама функция чекпоинта была введена в версии 6.5, я использую 6.6 и вроде успешно.

j-a-t-a
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.