2016-10-25 4 views
0

私は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 
..... 
..... 
... 
+1

を使用し、それだけで[_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) –

+0

ありがとうございました。 – object

答えて

1

Using UMDH to Find a User-Mode Memory Leak (MSDN)で説明したように、あなたはUMDH使用する前に、環境変数_NT_SYMBOL_PATHを定義する必要があります。

あなたは、コマンドラインから実行する場合は、シンボルの品質は非常に良いではありません

set _NT_SYMBOL_PATH=c:\mysymbols;srv*c:\mycache*https://msdl.microsoft.com/download/symbols 
関連する問題