Как узнать, по какому адресу вылетает программа в Linux?

У меня есть программа, работающая в Linux, и она таинственным образом вылетает. Я уже знаю один способ узнать, где он падает, это использовать GDB. Но я не хочу присоединяться к нему каждый раз, когда перезагружаю его (делайте это много, так как я его тестирую). Есть ли альтернативный способ сделать это?

4 ответа

Решение

Первое использование ulimit -c unlimited разрешить сбойным программам записывать дампы ядра.

После сбоя программы вы найдете файл дампа ядра, который называется coreили возможно core.<pid> если ваша программа многопоточная.

Вы можете загрузить это в GDB, чтобы проверить состояние в точке сбоя с помощью gdb program core,

Сначала сделай ulimit -c unlimited, так что программа покинет дамп ядра. Затем, когда он падает, вызвать gdb с дампом ядра, чтобы прочитать состояние программы в момент сбоя.

Вы можете настроить свою ОС на сброс файла ядра в любой момент, когда происходит сбой программы. Затем вы можете проверить ядро, чтобы определить место аварии.

-> скомпилировать код с включенными флагами GDB.

gcc -o <двоичное имя> -g (при условии, что это программа ac / C++)

-> запустить исполняемый файл с помощью GDB. GDB <двоичное имя>

после этого есть способы найти место сбоя: 1. пошаговое выполнение. 2. запустить код, он вылетает (как и ожидалось), введите "где" в GDB (без кавычек), он дает обратную трассировку. из этого вы можете узнать адрес.

Вот хорошее краткое руководство по GDB: http://www.cs.cmu.edu/~gilpin/tutorial/

Другие вопросы по тегам