выводить вызов стека потока (c ++), StackWalker или нет? - PullRequest
2 голосов
/ 22 июля 2011

Необходимость печатать стеки вызовов потока приложения C ++ по дескриптору потока, я переключился на StackWalker , который упоминался в предыдущих ответах stackoverflow.

Однако код StakWalker датирован 2005 годом. Я подозреваю, что с тех пор что-то изменилось.

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

Есть ли у кого-нибудь обновленный или другой опубликованный код для печати стека вызовов?

e:\boris\stackwalker\stackwalker\main.cpp (31): Func5
e:\boris\stackwalker\stackwalker\main.cpp (32): Func4
e:\boris\stackwalker\stackwalker\main.cpp (33): Func3
e:\boris\stackwalker\stackwalker\main.cpp (34): Func2
e:\boris\stackwalker\stackwalker\main.cpp (35): TestCurrentThread
e:\boris\stackwalker\stackwalker\main.cpp (139): main
f:\dd\vctools\crt_bld\self_x86\crt\src\crtexe.c (582): __tmainCRTStartup
f:\dd\vctools\crt_bld\self_x86\crt\src\crtexe.c (399): mainCRTStartup  
VVVVV  
ERROR: SymGetLineFromAddr64, GetLastError: 487 (Address: 7C817077)  
^^^^^  
7C817077 (kernel32): (filename not available): RegisterWaitForInputIdle

1 Ответ

4 голосов
/ 22 июля 2011

Это не ошибка примера StackWalker, представленного в CodeProject. Это из-за отсутствующих файлов символов. Загрузите и установите файлы символов (символы отладки) для вашей ОС, а затем повторите попытку.

http://msdn.microsoft.com/en-us/windows/hardware/gg463028

...