Создание дампа упавшей программы.
Действия проверялись на операционной системе linux debian (8 и 9 версии).
Сначала настроим создание дампов. В консоли дадим команду:
ulimit -cСкорее всего мы увидим 0, это значит, что дампы не создаются. Дадим команду:
ulimit -c unlimitedТеперь команда ulimit -c выдаст ответ unlimited , и дампы будут создаваться.
Для эксперимента напишем простенькую программу, которая упадёт по сегфолту:
#include <iostream>Компилируем, запускаем, видим ответ:
int a(int *p)
{
int y = *p;
return y;
}
int main()
{
int *p = 0; /* null pointer */
std::cout << a(p) << std::endl;
return 0;
}
Ошибка сегментирования (core dumped)Фраза core dumped означает, что создан дамп, мы его увидим рядом с бинарником (в нашем случае он назывался core), его теперь можно использовать для поиска причины слёта.
Для анализа дампа можно воспользоваться средой Qt Creator, для этого откройте меню Отладка -> Начать отладку -> Загрузить файл дампа, через меню Обзор выберите файл дампа (core), и бинарник, нажимаете OK, и будет открыт отладчик, как будто вы поймали слёт во время отладки (если бинарник был собран без отладочной информации - вы получите дизассемблер).
Комментариев нет:
Отправить комментарий