2011-03-16 10 views
1

私はクラッシュダンプを持っています。このクラッシュダンプには、ヘッドポインタがヌルで15000ノードの二重リンクリストが含まれていますが、依然として有効なテールがあります。ロジックエラーまたはヒープの破損によってヘッドポインタが消去されたかどうかを調べるには、最初の有効なノードまでテールから後方に歩かなければなりません。Visual Studioのデバッガでリンクリストの内容を出力

最初の有効なノード、つまり先頭に続くノードで、nullを指していない場合は、ヒープの破損を想定できます。このノードがヌルを指している場合、問題は論理エラーである可能性が最も高いです。

Visual Studioのデバッガを使用してこのリンクされたリストの内容を印刷する方法はありますか?

私はこれを行うために即時/コマンドウィンドウを使用できるかもしれないと思っていましたが、私が知る限り、単一のステートメントの評価のみが可能です。リストを辿るには何らかのループや再帰が必要です。

サイドノート、これはstd::listではありません。

答えて

4

Visual Studioのカスタムビジュアライザを作成する方法を示すこの記事があります:リストを含むhttp://www.virtualdub.org/blog/pivot/entry.php?id=120。そこ二重リンクリストのビジュアライザについて尋ねたコメントがあり、どうやらこれは動作するはずです:これは素晴らしい作品

_Stream{ 
children(
raw: [$e,!], 
#list(
    head: $e.p_next, 
    next: p_next, 
    skip: $e 
)) 
} 
+0

、ありがとう:

typedef struct _Stream ( struct _Stream *p_next, struct _Stream *p_prev, /* the rest of the structure */ ) _Stream; 

これは、ビジュアライザでなければなりません。 Visual Studio 2010では、このように100要素を見ることしかできませんでしたが、これは問題でしたが、SP1ではこの制限がなくなりました。以前のバージョンのVisual Studioに何らかの制限があるかどうかはわかりません。 –

関連する問題