Как получить информацию о трассировке стека? - PullRequest
3 голосов
/ 25 июня 2011

Я работаю над программированием сервера на машине Linux с использованием epoll, и у меня проблема с отладкой.Прямо сейчас я поместил отчеты регистрации повсюду.Это помогает увидеть, когда он взрывается, но трудно понять, почему ..

Так что мне было интересно, есть ли способ напечатать трассировку стека или что-то еще информацию в C ++.

Заранее спасибо ...

edit:

Я устанавливаю -g в файле mu make, и если я запускаю свой сервер на GDB, он не получит никаких пакетов,Я не знаю почему, но если я запускаю это в командной строке, он получает пакеты, но если я запускаю это на GDB, он ничего не получает от клиента (я не вижу никаких операторов журнала)

Ответы [ 4 ]

3 голосов
/ 25 июня 2011

Попробуйте функцию backtrace в Glibc.

1 голос
/ 25 июня 2011

Если ваша программа может определить, когда происходит сбой, вы можете написать сценарий и запустить на нем GDB. Этот сценарий может затем заставить GDB распечатать обратную трассировку.

Исходя из того, какую информацию вы хотите, может помочь поиск /proc/<pid>/stack.

1 голос
/ 25 июня 2011

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

Если вы используете gcc, вы должны перекомпилировать его с -g или другим флагом отладки.

Итак, ваш exe содержит больше информации о вашей программе.

0 голосов
/ 19 сентября 2012

Я использую backtrace () из GLIBC , и он отлично работает (обратные трассировки могут быть дополнительно собраны по сети по протоколу UDP):

http://blog.aplikacja.info/2010/12/backtraces-for-c/

...