2010-12-30 7 views
3

Тот факт, что трассировка стека/функции поставляется в исключениях Java/C#, действительно полезна. Есть ли удобный способ сделать это на C++ или мне нужно выпекать дополнительные данные в каждый метод/функцию?Получение трассировки стека в исключениях C++

+0

Duplicate?: Http://stackoverflow.com/questions/3222890/call-stack-for-exceptions-in-c – bcsanches

ответ

1

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

Также, если ваш код генерирует исключения из классов, которыми вы управляете you can put code for dumping the call stack in those classes constructors.

+0

Это для регистрации исключений в дикой природе, а не во время отладки. –

+0

@John, Second Sentence – Muggen

+0

@John: Второй абзац об этом - на самом деле весь вопрос, на который я ссылаюсь, это об этом. – sharptooth

0

Если вы планируете добавить metdata к своим исключениям, вы можете использовать boost exception handling. boost :: exception позволяет добавлять информацию в исключение после того, как она была выбрана.

0

Некоторые API-интерфейсы ОС обеспечивают трассировку стека, я знаю, что Windows API имеет StackWalk64 или что-то подобное, что может выполнять трассировку стека.

Однако, если вы не можете зависеть от такой вещи, то почти все, что вы можете сделать, это либо отладить сборку, либо сделать это вручную.

Смежные вопросы