繁体   English   中英

在VS2008中可视化树

[英]Visualizing trees in VS2008

我一直在为autoexp.dat添加一些类型的可视化工具。 即使是每个人都回顾的博客 (甚至是微软的家伙!),有时也是一场斗争。

但我完全被#tree可视化工具所困扰。 首先,博客文章似乎在其描述中充满了漏洞(没有其他材料我能够找到地址 - 但其他人已经清楚地了解它)。 特别是似乎有一些神奇的案例,它知道取消引用一个指针 - 但我无法确定我是否反过来设计了意图。 当你使用$ c和$ e时,似乎也存在一些歧义。 AFAICS它们似乎是可以互换的 - 也许两者都可以作为可读性的辅助手段? 或者它们真的意味着不同的东西(例如,博客使用$ e,其中VS2008附带的stl可视化器使用$ c)。

但真正缺少的是对它们如何融合在一起的解释。 我原以为它会遵循这个过程:

  1. 应用“head”规则到达起始节点(通过指针)
  2. 将deref规则(末尾的位)应用于解除引用的当前节点以获取可视化的值。
  3. 将左右规则应用于解除引用的当前节点以分别到达左节点和右节点(通过指针 - 以null作为终止符,除非指定了跳过规则)。
  4. 转到(2)直到访问了所有节点。

显然有一个我左右导航的算法,我已经掩盖了。 那不是太重要。 更重要的是在每个阶段和解除引用时都会考虑哪些值。

这似乎是我能想到的唯一适合我见过的例子的过程。 但我一直无法使用我们的树实现。 我只是得到(错误)应该显示#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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM