Linux gdb core dump

Материал из poiuty wiki
Перейти к: навигация, поиск

Приложение упало и хочется понять, почему это случилось.
Устанавливаем дебаггер.

apt-get install gdb

Запуска приложение с "параметром" ulimit -c unlimited
Когда приложение упадет вы найдете core файл в домашней директории пользователя.

su - dash -c "ulimit -c unlimited; dashd -datadir=/home/dash/.dash -daemon > /dev/null 2>/dev/null &"

Как только ваше приложение упало, смотрим появился ли core файл.
Далее с помощью дебаггера получим данные из него, пример.

gdb ваше_приложение core_file

В моем случае это выглядит так.

gdb /usr/bin/dashd core

Далее, вы попадаете в консоль дебаггера.
Чтобы вывести лог падения напишите.

bt

Эту информация вместе с core файлом отправьте разработчикам приложения.
Так же вы можете получить полный лог.

bt full

Дополнительно

11279 => это PID процесса, у вас он будет другой.
PID можно посмотреть например через htop.

Если приложение многопоточное, используем флаг -f

strace -f -p 11279

В противном случае будет так.

# strace -p 11279
Process 11279 attached – interrupt to quit
futex(0xa280a0c, FUTEX_WAIT, 1, NULL

Записываем вывод strace в файл.

strace -f -p 11279 -o /root/strace-dashd.log

Если процесс завис, можно попробовать получить core через gdb.
gcore => получить dump памяти (забрать файл core можно в той директории, в которой вы запустили gdb)

gdb /usr/bin/dashd core
(gdb) attach 11279
(gdb) gcore
(gdb) bt
(gdb) bt full
(gdb) q

Так же было бы неплохо сделать netstat и lsof.

netstat -tupan | grep 11279
lsof -p 11279