UMDH(x64) を使用してメモリ リークをテストしています。私のコードは FPO に最適化されておらず、カスタマイズされたアロケーターも使用していません。「new」演算子のみを使用します。
テスト中のイメージの Gflags(x64) で「ユーザー モード スタック トレース データベースの作成」が有効になっています。
非リーク ケースとリーク ケースの両方で UMDH を使用してアプリケーションを追跡し、両方のケースでログを取得しました。
ログを UMDH と比較しました。上部のコメント行から明らかなように、正しい pdb が選択されています。
問題:
コール スタックにコードのスタックが表示されません。一般的な Windows 関数名をトレースするだけです。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
.....
.....
...