[英]Visualizing trees in VS2008
我一直在为autoexp.dat添加一些类型的可视化工具。 即使是每个人都回顾的博客 (甚至是微软的家伙!),有时也是一场斗争。
但我完全被#tree可视化工具所困扰。 首先,博客文章似乎在其描述中充满了漏洞(没有其他材料我能够找到地址 - 但其他人已经清楚地了解它)。 特别是似乎有一些神奇的案例,它知道取消引用一个指针 - 但我无法确定我是否反过来设计了意图。 当你使用$ c和$ e时,似乎也存在一些歧义。 AFAICS它们似乎是可以互换的 - 也许两者都可以作为可读性的辅助手段? 或者它们真的意味着不同的东西(例如,博客使用$ e,其中VS2008附带的stl可视化器使用$ c)。
但真正缺少的是对它们如何融合在一起的解释。 我原以为它会遵循这个过程:
显然有一个我左右导航的算法,我已经掩盖了。 那不是太重要。 更重要的是在每个阶段和解除引用时都会考虑哪些值。
这似乎是我能想到的唯一适合我见过的例子的过程。 但我一直无法使用我们的树实现。 我只是得到(错误)应该显示#tree子项(我为每个节点得到一个(错误),所以我假设正确捕获了大小)。 我已经尝试过我能想到的各种变化 - 最多次!
令我困惑的另一件事是,我见过的许多例子,包括捆绑的stl,从头部导航到父级(或类似的),并跳过头节点。 他们为什么这样做?
这是我正在使用的可视化工具(我尝试过的其中一种形式 - 名称已更改为保护...公司):
MyTree<*,*,*>{
children(
#(
[raw members]: [$c,!],
#tree
(
head : $c.m_root.m_p,
size : $c.m_size,
left : left.m_p,
right : right.m_p
) : $e.value
)
)
}
这里是我的树类的一些伪代码:
MyTree:
Ptr<Note> m_root
int m_size
Node:
ValueT value
Ptr<Node> left
Ptr<Node> right
...其中Ptr <>是一个智能指针,将原始指针保存在m_p中。
任何帮助将不胜感激。
我们开始真的需要这个! 所以我开了一个赏金,但继续自己看着它。
看起来我已经解决了! (对我来说)。 我其实非常接近:
MyTree<*,*,*>{
children(
#(
[raw members]: [$c,!],
#tree
(
head : $c.m_root.m_p,
size : $c.m_size,
left : left,
right : right
) : $e.value
)
)
}
诀窍是头规则需要完全指定如何到达智能指针内的原始指针,但左/右规则不需要(并且de-ref规则也没有)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.