我有一个崩溃转储。此故障转储包含一个双向链表,其中包含15000个节点,其头指针为空,但仍具有有效尾部。为了弄清楚磁头指针是否被逻辑错误或堆损坏消除了,我需要从尾部向后走,直到第一个有效节点。
如果我可以到达第一个有效节点,即应该跟随头部的节点,并且它没有指向null,我可以合理地假设堆损坏。如果此节点指向null,则问题很可能是逻辑错误。
有什么方法可以使用Visual Studio的调试器来打印此链表的内容?
我认为我可以使用立即/命令窗口来执行此操作,但据我所知,它只允许评估单个语句。我需要某种循环或递归来遍历列表。
旁注,这不是std::list
。
答案 0 :(得分:4)
本文介绍如何为Visual Studio编写自定义可视化工具:http://www.virtualdub.org/blog/pivot/entry.php?id=120,包括列表。有一条评论询问双链表的可视化器,显然这应该有效:
typedef struct _Stream (
struct _Stream *p_next,
struct _Stream *p_prev,
/* the rest of the structure */
) _Stream;
这应该是可视化工具:
_Stream{
children(
raw: [$e,!],
#list(
head: $e.p_next,
next: p_next,
skip: $e
))
}