私は、Windows MFC 8.0アプリケーション(リリースビルド)でメモリリークを見つけようとしています。MFC 8.0アプリケーションでmallocsのスタックトレース全体にアクセスするにはどうすればよいですか?
によるVC8 CRT's malloc problem with FPOにWinDbgの(またはUMDH)を使用して、割り当ての完全なスタックトレースを表示するために失敗した後、私は(すなわちDbgHlp StackWalkでLeakDiagを使用して有効)のみLeakDiagがないことを実現するためのソリューションがhereを提案適用しようとしましたCランタイムアロケータを監視するときにはログファイルを生成しませんが、Windowsヒープアロケータを監視しても動作しますが、スタックトレースはmalloc呼び出しで終了します。
生成されたファイルに関数名、ファイル名、行などが表示されているため、記号が正しく構成されています。
なぜ私はランタイムアロケータをログに記録できないのですか?私がDbgHlp StackWalk APIを使用していてもなぜ完全なスタックトレースを取得できないのでしょうか?
ご提供いただけるご意見をお待ちしております。
追加情報:私のスタックトレースがどのように見えるか
:私はWinDbgのを使用して、これを持って
。アドレスは!heap -lによってリークされたブロックとして報告されるアドレスです。
0:000> !heap -p -a 25b18400
address 25b18400 found in
_HEAP @ 2a70000
HEAP_ENTRY Size Prev Flags UserPtr UserSize - state
25b183f8 0008 0000 [07] 25b18400 00021 - (busy)
Trace: 00a4
7c97d6dc ntdll!RtlDebugAllocateHeap+0x000000e1
7c959d18 ntdll!RtlAllocateHeapSlowly+0x00000044
7c92b298 ntdll!RtlAllocateHeap+0x00000e64
78134d83 MSVCR80!malloc+0x0000007a
私はすでにIntel Parallel Studioを試していますが、ただハングアップしています...かなり重いので、私のアプリケーションです... それ以外では、私が探しているメモリリークは、開発者用ツールが不足しているコンピュータ私はコンパイラをインストールすることができましたが、私の開発マシンでIPSが起動しない場合はどうしても気になりませんでした... あなたが言及している他のツールを見ていきます。 ありがとうございました! –
パラレルスタジオの最後のバージョンははるかに頑丈に見えます - ベータ版ではありませんでした。しかし、少なくともコンパイラなしでGlowCodeを使用することはできます。私の知る限り、pdbファイルだけが必要です。私は最近それを評価しました。それはリアルタイムで動作するいくつかの内部エラーを与えたが、私はいくつかの結果を得た。 –
GlowCodeは素晴らしいアプリケータとメモリチェッカのようですが、週末にアプリケーションをプロファイリングするのに深刻な問題がありました。とにかく、私はまだメモリリークを見つけることができませんでしたが、それは有用で非常に高速であることが証明されています...しかし、それは私のMFC 8.0アプリケーションの完全なスタックトレースを与えることができたので、 。 ありがとうございます! –