понедельник, 4 марта 2019 г.

Создание дампа упавшей программы.


Действия проверялись на операционной системе 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, и будет открыт отладчик, как будто вы поймали слёт во время отладки (если бинарник был собран без отладочной информации - вы получите дизассемблер).

Комментариев нет:

Отправить комментарий