c++ - 使用具有两个动态数组的 Visual Studio 调试器可视化工具提供帮助

标签 c++ visual-studio debugging

我正在尝试修改 autoexp.dat 来编写可视化工具,但我只部分实现了我想要的目标。我有一个类(如下),其中 Bar1 和 Bar2 是动态分配的数组

class Foo
{
   double* Bar1;
   double* Bar2;
   int size;
}

我想出的 autoexp.dat 的 [Visualizer] 部分中的可视化工具看起来像

Foo{
    children
    (
        #(
            [size]: [$c.size],

            #(
                    [Bar1]: #array(expr: $c.Bar1[$i], size: $c.size)
             ),
            #(
                    [Bar2]: #array(expr: $c.Bar2[$i], size: $c.size)
            )
        )
    )
}

不幸的是,其输出是

Foo
    [size] 24
    [Bar1] 1
    [Bar1] 1
    .
    .
    [Bar1] 1
    [Bar2] 0
    [Bar2] 0
    .
    .
    [Bar2] 0

我希望它显示

Foo
    [size] 24
    [Bar1]
         [0] 1
         [1] 1
          .
          .
         [23] 1
    [Bar2]
         [0] 0
         [1] 0
          .
          .
         [23] 0

其中 Bar1 和 Bar2 是可折叠的,但更重要的是我有索引。

最佳答案

扩展@IronMensan的建议,您可以使用 switch 语句来绕过动态大小限制,也许使用合适的长度作为默认值以避免 switch 变得太长...

Foo{
    children(
        #(
            #([size]: [$c.size]),
            #(
                #switch ($c.size)
                #case  0 (  #(Bar1: [$c.Bar1,  0])  )
                #case  1 (  #(Bar1: [$c.Bar1,  1])  )
                #case  2 (  #(Bar1: [$c.Bar1,  2])  )
                #case  3 (  #(Bar1: [$c.Bar1,  3])  )
                #case  4 (  #(Bar1: [$c.Bar1,  4])  )
                #case  5 (  #(Bar1: [$c.Bar1,  5])  )

                #default (  #(Bar1: [$c.Bar1, 50])  )
            ),
            #(
                #switch ($c.size)
                #case  0 (  #(Bar2: [$c.Bar2,  0])  )
                #case  1 (  #(Bar2: [$c.Bar2,  1])  )
                #case  2 (  #(Bar2: [$c.Bar2,  2])  )
                #case  3 (  #(Bar2: [$c.Bar2,  3])  )
                #case  4 (  #(Bar2: [$c.Bar2,  4])  )
                #case  5 (  #(Bar2: [$c.Bar2,  5])  )

                #default (  #(Bar2: [$c.Bar2, 50])  )
            )
        )
    )
}

关于c++ - 使用具有两个动态数组的 Visual Studio 调试器可视化工具提供帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6588110/

相关文章:

c++ - 如何将 int 转换为 char 数组?

sql-server - 执行 SSIS 包给出 System.IO.IOException

javascript - 当报告的错误在 jquery 中时(传递给 jquery 的数据),如何使用 firebug 调试使用 jQuery 的应用程序

c++ - 防止在基类和派生类上使用 delete,同时允许使用 new

c++ - Constexpr 类采用 const 引用未编译

c++ - QtWebkit 解析事件调度程序

c++ - 如何正确处理模块

c# - Visual Studio 编辑器能否从全大写转换为驼峰大小写?

c - gdb 无法访问 $ebp 地址处的内存

c++ - 在 Mac OS X 上调试和终止应用程序?