0

プリンタ ドライバのメモリ リークをデバッグしようとしています。windbg で !heap -s を使用してヒープを分析しても増加が見られないため、単純なメモリ リークではなく、リソース リークであると確信しています。windbg を使用して他の種類のオブジェクトを監視するにはどうすればよいですか? GDI オブジェクトと開いているハンドルの数も増加していません。

メモリ リークの症状は、プライベート バイトが最大 180Mb まで増加し、印刷が開始されてランダムな問題が発生することです。

4

1 に答える 1

1

への直接呼び出しである可能性がありますVirtualAlloc。を使用してメモリ タイプを分離してみてください!address -summary。いっそのこと、古いリソース キットから vadump.exe のコピーを見つけてください。より読みやすい内訳を提供します。

WinDbg の!vadumpコマンドを 2 回実行した結果の出力を比較し、新しく割り当てられた RAM の一部をダンプすることで、いくつかの手がかりが得られる場合があります。シンボル ファイルがあり、dpsコマンドを使用して RAM をダンプする場合、WinDbg は各 DWORD のシンボルの一致を表示します。つまり、シンボル ファイルで値に名前がある場合は、それが表示されます。その良い例は、VTables を使用して C++ オブジェクトをダンプする場合です。VTable にはシンボルがあるので、それがどのような型であるかがわかります。

最後になりましたが、ブレークポイントを設定して、VirtualAlloc呼び出しごとにスタックをダンプできます。割り当てと解放を厳密に比較しなくても、興味深い呼び出しスタックまたは割り当てサイズに気付くかもしれません。スタックをダンプして続行するブレークポイントの構文は次のとおりです。

bp kernel32!virtualalloc "kb;g"

さらに、VirtualAllocEx にブレークポイントを指定します。私の知る限り、ファイル マッピング (CreateFileMapping/MapViewOfFile) やLoadLibrary.

于 2010-04-22T00:33:26.520 に答える