2011-03-16 2 views
1

나는 크래시 덤프가 있습니다. 이 크래시 덤프에는 헤드 포인터가 null이지만 15,000 개의 노드가있는 이중 연결 목록이 포함되어 있지만 여전히 유효한 꼬리가 있습니다. 논리적 오류 또는 힙 손상으로 헤드 포인터가 지워지는지 알아 내기 위해 꼬리에서 첫 번째 유효한 노드까지 뒤로 걸어 가야합니다.Visual Studio의 디버거를 사용하여 연결된 목록의 내용 인쇄

첫 번째 유효한 노드, 즉 머리를 따라야하는 노드에 도달 할 수 있고 null을 가리키지 않으면 합리적으로 힙 손상을 가정 할 수 있습니다. 이 노드가 널 (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에서 제한 사항이 있는지 확실하지 않습니다. –