Как узнать, по какому адресу вылетает программа в Linux? - PullRequest
1 голос
/ 04 января 2012

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

Ответы [ 4 ]

5 голосов
/ 04 января 2012

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

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

Вы можете загрузить его в GDB для проверкисостояние в точке крушения с gdb program core.

4 голосов
/ 04 января 2012

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

3 голосов
/ 04 января 2012

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

2 голосов
/ 04 января 2012

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

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

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

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

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

...