Windows/C++ アプリ (JUCE を使用) があり、アプリがクラッシュしたときにスタック トレースをファイルにダンプしたいと考えています。私の初期化コードには、次のものがあります。
signal(SIGABRT, abortHandler);
signal(SIGSEGV, abortHandler);
signal(SIGILL, abortHandler);
signal(SIGFPE, abortHandler);
そして、私のハンドラーは次のようになります。
void abortHandler(int signum)
{
juce::File log("stacktrace.txt");
log.appendText(juce::SystemStats::getStackBacktrace());
exit(signum);
}
ただし、結果のスタック トレースは、クラッシュが発生したスレッドではありません。
0: AudulusDebug32: juce::SystemStats::getStackBacktrace + 0x7f
1: AudulusDebug32: abortHandler + 0x61
2: AudulusDebug32: _XcptFilter + 0x1e3
3: AudulusDebug32: __tmainCRTStartup + 0x15f
4: AudulusDebug32: WinMainCRTStartup + 0xd
5: BaseThreadInitThunk + 0xe
6: RtlInitializeExceptionChain + 0x84
7: RtlInitializeExceptionChain + 0x5a
内部的にgetStackBacktraceは、次のことを行います。
HANDLE process = GetCurrentProcess();
SymInitialize (process, nullptr, TRUE);
void* stack[128];
int frames = (int) CaptureStackBackTrace (0, numElementsInArray (stack), stack, nullptr);
クラッシュが発生したスレッド (またはすべてのスレッド) のスタック トレースを取得する方法はありますか?