Я пытаюсь распечатать стек вызовов моей программы в случае утверждения в коде. Я использую следующий код: 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
Когда я запускаю программу с чужого компьютера, я всегда получаю последний случай. Когда я запускаю программу со своего компьютера, в некоторых случаях я получаю первый случай, а в некоторых - второй.
Любая помощь?
SymInitialize
вернет false (что не проверяется в примере кода). При запуске с вашего компьютера происходит сбой, возможно, поврежден стек. Найдите функции, используемые в msdn. - person Paul Ogilvie   schedule 13.07.2017