4

プログラムでクラッシュが発生しました。これは VS のビジュアライザーであるため、デバッグが非常に困難です。ダンプを作成し、WinDbg を使用して調査しようとしましたが、失敗しました。

そのため、プログラムでそのリストに手を入れようとしていますが、方法がわかりません。ありがとう。

4

2 に答える 2

3

オブジェクトがファイナライズ キューまたは f-reachable キューにあるかどうかを確認するには、WinDBG を起動するときに、dumpheap -statまたはその他のコマンドを使用して、まずオブジェクトを見つけます。オブジェクトのアドレスを見つけたら、!FinalizeQueuewhich を使用して、各世代でファイナライズ可能なオブジェクトの数と、ファイナライズの準備ができているオブジェクトの数出力できます。前者はファイナライズ キュー、後者は f-reachable キューです。

例えば:

0:003> !ファイナライズキュー

クリーンアップする SyncBlocks: 0 解放する MTA インターフェイス: 0 解放する STA インターフェイス:0

ジェネレーション 0 には 370 個のファイナライズ可能なオブジェクトがあります
(0000000000d29030->0000000000d29bc0)

第 1 世代には 4 つのファイナライズ可能なオブジェクトがあります
(0000000000d29010->0000000000d29030)

第 2 世代には 8 つのファイナライズ可能なオブジェクトがあります
(0000000000d28fd0->0000000000d29010)

ファイナライズ準備完了 571 個のオブジェクト
(0000000000d29bc0->0000000000d2ad98)

これで、オブジェクトのアドレス空間がどこにあるかがわかります。

優れたチュートリアルはこちらから入手できます

于 2015-05-20T10:56:59.153 に答える