有没有办法在Visual Studio Debug中打印Armadillo矩阵或向量?

时间:2014-12-12 18:53:50

标签: visual-studio debugging visual-studio-2012 visual-studio-debugging armadillo

我想知道是否有任何方法可以在Visual Studio的调试部分显示向量/矩阵条目值(特别是VS2012)。

这个问题与发布于:

的问题非常相似

Is there a way to print an Armadillo matrix in gdb?

然而,我没有设法弄清楚这种方法是否也适用于VS.

感谢。

2 个答案:

答案 0 :(得分:4)

这个.natvis XML代码在visual studio 2013中运行良好。我在visual studio 2013中添加了@Claes Rolen XML,这对我来说效果不佳。

诀窍是使用<IndexListItems>来显示犰狳矩阵

声明并初始化代码

mat tMat(3, 3);

for (int i = 0; i < 3; i++)
{
    for (int j = 0; j < 3; j++)
        tMat(i, j) = i + j;
}

.Natvis文件

    <?xml version="1.0" encoding="utf-8"?> 
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010"> 


  <Type Name="arma::Col&lt;*&gt;">
    <DisplayString>{{ Size = {n_elem} }}</DisplayString>
    <Expand>
      <Item Name="[size]">n_elem</Item>
      <ArrayItems>
        <Size>n_elem </Size>
        <ValuePointer>mem</ValuePointer>
      </ArrayItems>
    </Expand>
  </Type>

  <Type Name="arma::Mat&lt;*&gt;">
    <DisplayString>{{ {n_rows} x {n_cols} = {n_elem} }}</DisplayString>
    <Expand>
      <IndexListItems>
        <Size>n_cols</Size>
        <ValueNode >
          mem+($i*n_rows),[n_rows]
        </ValueNode>
      </IndexListItems>
    </Expand>
  </Type>



  <Type Name="arma::subview_col&lt;*&gt;">
    <DisplayString>{{ {n_rows} }}</DisplayString>
    <Expand>
      <ArrayItems>
        <Size>n_rows</Size>
        <ValuePointer>colmem</ValuePointer>
      </ArrayItems>
    </Expand>
  </Type>






</AutoVisualizer> 

调试器中的结果图像:

enter image description here

答案 1 :(得分:1)

您可以在Visual Studio中使用可视化工具,不知道从哪个版本,但在Visual Studio 2015中,您可以向项目添加mousemove.zoomRect ?文件。

arma.natvis:

.natvis

这将显示基本<?xml version="1.0" encoding="utf-8"?> <AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010"> <Type Name="arma::Col&lt;*&gt;"> <DisplayString>{{ Size = {n_elem} }}</DisplayString> <Expand> <Item Name="[size]">n_elem</Item> <ArrayItems> <Size>n_elem </Size> <ValuePointer>mem</ValuePointer> </ArrayItems> </Expand> </Type> <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> 类型的可读数据。

显示某些类型的示例: enter image description here