Visual C++: стек вызовов при ошибке утверждения

Можно ли вывести стек вызовов при сбое assert в режиме Release?

Я вижу стек вызовов в Visual Studio, когда assert терпит неудачу в режиме Debug. Я скомпилировал режим Release с удаленным NDEBUG, чтобы компилировались утверждения. Когда это assert терпит неудачу, параметры утверждения выводятся на консоль. Было бы очень полезно, если бы я мог каким-то образом также получить вывод стека вызовов.


person Ashwin Nanjappa    schedule 24.12.2010    source источник
comment
Информация об отладке (имена функций и т. д.) должна быть скомпилирована в двоичные файлы, чтобы это было возможно. Это то, что вы спрашиваете, как сделать?   -  person Gabe    schedule 24.12.2010


Ответы (1)


Есть две функции, которые должны помочь: CaptureStackBackTrace и StackWalk64 (требуется Dbghelp.dll , вот пример).

В любом случае, оба они возвращают вам только список обратных адресов, так что вам придется вручную преобразовывать их в имена функций. Вы можете настроить VS для создания файла MAP с адресами всех функций в вашем исполняемом файле. Вот как это сделать.

Кроме того, не забывайте, что некоторые функции могут (и будут) встроены. Так что не удивляйтесь, когда вместо A -> B -> C вы увидите A -> C.

person yurymik    schedule 24.12.2010