![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| semibug |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 27.3.2009 Репутация: нет Всего: нет |
При возникновении исключения хотелось бы записать в лог не только данные о месте (получаю макросами __FILE__, __LINE__ ), но и стек вызовов. Сейчас добавляю в начало каждой функции макрос, который записывает в самодельный стек вызовов имя функции (получаю через __FUNCTION__). В нем же (в этом макросе) создается объект, в деструкторе которого находится выборка последнего значения из стека вызовов (чтобы не делать это вручную). При возникновении исключения (свой тип) теперь могу сохранить в лог полностью стек вызовов. Все вроде ничего, да только писать в начало каждой функции макрос как-то не кошерно. Есть ли другие способы получить информацию о стеке вызовов? |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
кстати сам часто нуждаюсь в подобном. интересно, есть ли какие способы?
semibug, покажи свой препроцессорный велосипед. |
|||
|
||||
| semibug |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 27.3.2009 Репутация: нет Всего: нет |
Сильно не бить:
Добавлено через 12 минут и 53 секунды Ещё круче было бы если и параметры вызовов тоже как-то залогировать. И вообще полный замороженный образ перед возникновением исключения (с пошаговой отмоткой назад/вперед). Пахнет научно-популярной фантастикой. |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Windows - MiniDumpWriteDump, Linux - abort() (и не забыть установить отличный от 0 лимит для core файла)
Потом полученные core dump'ы загружаешь в дебагер и вуаля! Нет, реальность |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 15 Всего: 118 |
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| semibug |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 27.3.2009 Репутация: нет Всего: нет |
jonie, спасибо за ссылку, очень юзабельная вещь.
|
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
Есть специальный ГНУ экстеншн: man backtrace.
Это наверное скорее бусткодеру на заметку:). -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
ух ты! никогда про такое не слышал. Добавлено через 4 минуты и 43 секунды симпотно выглядит:
взято из мана. |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Это вроде чисто С-ишная фича, нет? Как будет работать с кодом на С++? У меня, например, все имена функций просто "опустил" и получился такой, неинформативный, вывод:
-------------------- вопросов больше чем ответов |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
Леопольд, внимательно читаем ман, там написано, как компилировать. Потом читаем man gcc на предмет -rdynamic и -export-dynamic и пытаемся понять, как это работает.
Добавлено через 1 минуту и 47 секунд
Вызывается конструктор shit, из него метод shit::call, а дальше также, как в приме из мана. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |