私はUMDH(x64)を使用してメモリリークをテストしています。私のコードはFPOに最適化されておらず、カスタマイズさそれはちょうど "新しい"演算子を使用します。UMDHが呼び出しスタックを提供しない
テスト中のイメージのGflags(x64)に「Create User Mode stack trace Database」が有効になっています。
私はUMDHを使用してアプリケーションを非漏洩ケースと漏洩ケースの両方で追跡し、両方のケースでログを取得しました。
そして、ログをUMDHと比較しました。それは上のコメント行から明らかなように、正しいpdbを選んだ。
問題:
コールスタックにコードのスタックが表示されません。これは、汎用ウィンドウ関数名をトレースするだけです。私はx64でデバッグ版とリリース版の両方を試しました。 何か不足していますか?
得られたコードとの差分トレースは以下の通りです:
// code:
#include <iostream>
using namespace std;
void myFunc()
{
int k;
cin >> k;
int* ii = new int[1998];
if (k == 0) delete[] ii;
}
int main()
{
myFunc();
return 0;
}
// stack trace obtained:
+ 390 ( 390 - 0) 1 allocs BackTraceAC905E8D
+ 1 ( 1 - 0) BackTraceAC905E8D allocations
ntdll!RtlpCallInterceptRoutine+0000003F
ntdll!RtlpAllocateHeapInternal+0000069F
ntdll!TppWorkerThread+00000ADB
KERNEL32!BaseThreadInitThunk+00000022
ntdll!RtlUserThreadStart+00000034
.....
.....
...
を使用し、それだけで[_NT_SYMBOL_PATH環境変数]でシンボルサーバーをセットアップすることを確認し、エクスポート機能を見ることができます(HTTPS ://msdn.microsoft.com/en-us/library/windows/hardware/ff553431(v = vs.85).aspx)。 TppWorkerThreadはコードではなく、スレッドプールスレッドのエントリポイントです。[Windows 10の監視](http://stackoverflow.com/a/34826385/17034) –
ありがとうございました。 – object