Печать стека вызовов в C под окнами

Я пытаюсь распечатать стек вызовов моей программы в случае утверждения в коде. Я использую следующий код: Win32 - Backtrace from C code (за исключением того, что размер моего стека равен 60, а 1-й параметр CaptureStackBackTrace равен 2).

Только в меньшинстве случаев вывод выглядит следующим образом:

0: MyFunction - 0x009DF4D0
1: main - 0x00A533E0
2: __tmainCRTStartup - 0x00A56AF0
3: mainCRTStart - 0x00A56AD0
4: BaseThreadInitThunk - 0x76603378
5: RtlInitializeExceptionChain - 0x77DC989F

Но в большинстве случаев вывод printStack выглядит примерно так:

0: BaseThreadInitThunk - 0x74CB3358
1: BaseThreadInitThunk - 0x74CB3358
2: BaseThreadInitThunk - 0x74CB3358
3: BaseThreadInitThunk - 0x74CB3358
4: BaseThreadInitThunk - 0x74CB3358
5: BaseThreadInitThunk - 0x74CB3358
6: BaseThreadInitThunk - 0x74CB3358
7: BaseThreadInitThunk - 0x74CB3358
8: BaseThreadInitThunk - 0x74CB3358
9: BaseThreadInitThunk - 0x74CB3358
10: BaseThreadInitThunk - 0x74CB3358
11: BaseThreadInitThunk - 0x74CB3358
12: BaseThreadInitThunk - 0x74CB3358
13: BaseThreadInitThunk - 0x74CB3358
14: RtlInitializeExceptionChain - 0x773D989F

Когда я запускаю программу с чужого компьютера, я всегда получаю последний случай. Когда я запускаю программу со своего компьютера, в некоторых случаях я получаю первый случай, а в некоторых - второй.

Любая помощь?


person Nir S.    schedule 13.07.2017    source источник
comment
При запуске на другом компьютере, возможно, файлы символов недоступны. Затем SymInitialize вернет false (что не проверяется в примере кода). При запуске с вашего компьютера происходит сбой, возможно, поврежден стек. Найдите функции, используемые в msdn.   -  person Paul Ogilvie    schedule 13.07.2017
comment
Файл символов (то есть файл PDB) находится на удаленном сервере. И мой компьютер, и другие компьютеры запускают один и тот же удаленный EXE-файл. Оба файла находятся в одном каталоге. Может быть, другие ПК не знают местонахождение файла PDB?   -  person Nir S.    schedule 13.07.2017