在C++中使用Eigen库写向量VectorXd或矩阵MatrixXd时,调试时只能看到第一个值,每次都要把内容打印出来,调试起来非常不方便。
Visual Studio 可以自己编写Natvis文件自定义可视化。只需要在源文件中创建.natvis文件即可。
在源文件中创建Eigen.natvis
文件,复制以下内容,即可实现对Eigen库中VectorXd和MatrixXd的可视化。文件内容来自Github上的Visual-Studio-Eigen.natvis文件,其中还有一些OpenCV库的可视化文件等。
创建完成后重新编译调试,就可以看到VectorXd和MatrixXd的值:
<?xml version="1.0" encoding="utf-8"?>
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
<!-- Fixed x Fixed Matrix -->
<Type Name="Eigen::Matrix<*,*,*,*,*,*>">
<AlternativeType Name="Eigen::Array<*,-1,-1,*,*,*>"/>
<DisplayString>[{$T2}, {$T3}]</DisplayString>
<Expand>
<ArrayItems Condition="Flags%2"> <!-- row major layout -->
<Rank>2</Rank>
<Size>$i==0 ? $T2 : $T3</Size>
<ValuePointer>m_storage.m_data.array</ValuePointer>
</ArrayItems>
<ArrayItems Condition="!(Flags%2)"> <!-- column major layout -->
<Direction>Backward</Direction>
<Rank>2</Rank>
<Size>$i==0 ? $T2 : $T3</Size>
<ValuePointer>m_storage.m_data.array</ValuePointer>
</ArrayItems>
</Expand>
</Type>
<!-- 2 x 2 Matrix -->
<Type Name="Eigen::Matrix<*,2,2,*,*,*>">
<AlternativeType Name="Eigen::Array<*,2,2,*,*,*>"/>
<DisplayString>[2, 2]</DisplayString>
<Expand>
<Synthetic Name="[row 0]" Condition="Flags%2">
<DisplayString>{m_storage.m_data.array[0]} {m_storage.m_data.array[1]}</DisplayString>
</Synthetic>
<Synthetic Name="[row 0]" Condition="!(Flags%2)">
<DisplayString>{m_storage.m_data.array[0]} {m_storage.m_data.array[2]}</DisplayString>
</Synthetic>
<Synthetic Name="[row 1]" Condition="Flags%2">
<DisplayString>{m_storage.m_data.array[2]} {m_storage.m_data.array[3]}</DisplayString>
</Synthetic>
<Synthetic Name="[row 1]" Condition="!(Flags%2)">
<DisplayString>{m_storage.m_data.array[1]} {m_storage.m_data.array[3]}</DisplayString>
</Synthetic>
</Expand>
</Type>
<!-- 3 x 3 Matrix -->
<Type Name="Eigen::Matrix<*,3,3,*,*,*>">
<AlternativeType Name="Eigen::Array<*,3,3,*,*,*>"/>
<DisplayString>[3, 3]</DisplayString>
<Expand>