【问题标题】:customize multi-dimension array debugging in visual studio 2015 with .natvis file使用 .natvis 文件在 Visual Studio 2015 中自定义多维数组调试
【发布时间】:2017-03-03 11:43:09
【问题描述】:

我正在使用 arma Matrix,我想在调试期间查看该值。 所以我添加了一个 natvis 文件如下:

<?xml version="1.0" encoding="utf-8"?> 
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
  <Type Name="arma::Mat&lt;*&gt;">
    <DisplayString>{{ Size = {n_rows} x {n_cols} }}</DisplayString>
    <Expand>
      <Item Name="[size]">n_elem</Item>
      <ArrayItems>
        <Direction>Backward</Direction>
        <Rank>2</Rank>
        <Size> $i==0?n_rows:n_cols </Size>
        <ValuePointer>mem</ValuePointer>
      </ArrayItems>
    </Expand>
  </Type>
</AutoVisualizer>

但是,它根本不起作用。

我很快意识到问题可能是

<Size> $i==0?n_rows:n_rows </Size>

所以我尝试用以下任何语句替换它并且它有效

<size> $i==0?5:8 </Size>    
<size> $i==0?n_rows:8 </Size>
<Size> $i==0?5:n_cols</Size>

但是,如果我尝试以下任何一种说法,我将一无所获

<size> $i==0?n_rows:n_cols </Size>
<size> $i==0?n_rows:n_rows </Size>

顺便说一句,我已在选项中将 Natvis 诊断消息设置为“错误”,但错误列表中没有任何内容。

感谢您的帮助

【问题讨论】:

  • 我的理解是不会出错,只是说明调试器窗口无法识别ArrayItems下的具体tags/property参数,你可以查看this sample about how to use " ArrayItems 扩展”在这里:code.msdn.microsoft.com/windowsdesktop/…
  • 谢谢杰克,但它只给出了一个一维数组的例子。此外,我已经阅读了 MSDN 的解释,他们在 文件中使用了 size[$i] ,即他们将大小存储在 1*2 数组中,这样就可以在没有 if 语句的情况下调用它。但是,我使用的是犰狳,矩阵大小由两个整数而不是数组定义。
  • 你能分享我一个使用一个驱动器的简单示例吗?我将使用与您相同的环境对其进行调试。

标签: c++ debugging multidimensional-array visual-studio-2015 natvis


【解决方案1】:

转换为 int 为我解决了这个问题:

&lt;Size&gt; $i==0?(int)n_rows:(int)n_cols &lt;/Size&gt;

【讨论】:

    猜你喜欢
    • 2016-06-30
    • 2013-07-22
    • 2022-12-07
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    • 2021-10-03
    • 1970-01-01
    • 2015-11-21
    相关资源
    最近更新 更多