Как получить полный стек вызовов в Visual Studio 2005?

Как получить полный стек вызовов для приложения C++, разработанного с помощью Visual Studio 2005? Я хотел бы иметь полный стек вызовов, включая код в системных библиотеках.

Должен ли я изменить некоторые настройки в Visual Studio или установить дополнительное программное обеспечение?


person Thomas Koschel    schedule 21.09.2008    source источник


Ответы (3)


  1. Получите отладочную информацию для всех зависимостей проекта. Это указано в разделе «Свойства конфигурации -> C/C++ -> Общие» свойств проекта.

  2. В меню перейдите в «Инструменты -> Параметры», затем выберите «Отладка -> Символы».

  3. Добавьте новое местоположение символа (значок папки), указывающее на бесплатный сервер символов Microsoft «symsrvsymsrv.dllc:\symbols*http://msdl.microsoft.com/downloads»./symbols

  4. Заполните поле «Символы кеша» каким-нибудь локальным местом, чтобы не ходить в интернет постоянно.

person Clay    schedule 21.09.2008
comment
Возможно, вы захотите исправить ошибку в smysrv в #3. - person bk1e; 21.09.2008

Согласен с Клэем, но для Symbols Server вы должны получить последнюю версию symsrv.DLL из «Инструментов отладки для Windows», которую Microsoft загружает бесплатно.

(Поскольку вы явно спросили, что вам нужно скачать, я предполагаю, что у вас его еще нет)

person MSalters    schedule 21.09.2008

Или, при желании (при условии, что Visual Studio не установлена), возьмите копию Windows Средства отладки, установите и либо запустите приложение из отладчика (windbg.exe), либо подключите его к уже работающему приложению:

windbg[.exe] -pn program.exe
or
windbg[.exe] -p process_id

Прервите отладчик в точке, которую вы хотите наблюдать за трассировкой стека (Ctrl+Break). Переключитесь на интересующий поток (скорее всего, основной поток выполнения):

~0s

Исправьте символы для системных модулей (и, возможно, для приложения, если таковые имеются):

* fix up symbols for app
.sympath path_to_app_symbols
* configure where debugger will download and store system symbols
.symfix+ path_where_system_symbols_will_be_stored
* force debugger to reload symbols
.reload

Выполните команду стека вызовов:

kb
person deemok    schedule 01.10.2008