使用Visual Studio的调试器打印链接列表的内容

时间:2011-03-16 09:56:13

标签: c++ c visual-studio debugging

我有一个崩溃转储。此故障转储包含一个双向链表,其中包含15000个节点,其头指针为空,但仍具有有效尾部。为了弄清楚磁头指针是否被逻辑错误或堆损坏消除了,我需要从尾部向后走,直到第一个有效节点。

如果我可以到达第一个有效节点,即应该跟随头部的节点,并且它没有指向null,我可以合理地假设堆损坏。如果此节点指向null,则问题很可能是逻辑错误。

有什么方法可以使用Visual Studio的调试器来打印此链表的内容?

我认为我可以使用立即/命令窗口来执行此操作,但据我所知,它只允许评估单个语句。我需要某种循环或递归来遍历列表。

旁注,这不是std::list

1 个答案:

答案 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
))
}