Visual studio 2015 Natvis浮点格式

Visual studio 2015 Natvis浮点格式,visual-studio-2015,natvis,Visual Studio 2015,Natvis,昨天我发现,它允许您调整调试器,以智能方式显示您的类型。我很快开始美化我的数学图书馆 下面是我的3*3矩阵类的外观(未初始化数据): 好极了,对吧?我的下午没有遗憾 然而,现在我们来讨论一个稍微复杂一点的情况: 如您所见,这些数字并不一致。我已经找到了一种让负数与正数对齐的方法,但我的方法无法实现这一点(这是我的基本轮廓): ... ... ... 现在的情况是,打印的位数因数字而异 因此,我的问题是:我是否可以配置Natvis打印定义良好的位数以进行调试?或者,您可能有一个聪明的解决方

昨天我发现,它允许您调整调试器,以智能方式显示您的类型。我很快开始美化我的数学图书馆

下面是我的3*3矩阵类的外观(未初始化数据):

好极了,对吧?我的下午没有遗憾

然而,现在我们来讨论一个稍微复杂一点的情况:

如您所见,这些数字并不一致。我已经找到了一种让负数与正数对齐的方法,但我的方法无法实现这一点(这是我的基本轮廓):


...
...
...
现在的情况是,打印的位数因数字而异

因此,我的问题是:我是否可以配置Natvis打印定义良好的位数以进行调试?或者,您可能有一个聪明的解决方法?



注:如果我能成功的话,我很乐意上传Python脚本,该脚本会生成“.natvis”文件,供你们自己的类型使用。

如果你们仍然感兴趣的话:一个棘手的解决办法是在natvis中计算点后的每一位数字,并提供一个助手类型,你们可以将POD数据类型转换为:

首先,在源代码中引入一个简单的结构,它只包含代码中的float或double成员。这使您能够将浮点值强制转换为NATVIS_float并访问该数字

struct NATVIS_FLOAT { float f;}
现在,您可以为NATVIS_浮点类型创建一个可视化工具,在其中定义要显示的精度点后的每个数字,例如4:

<Type Name="NATVIS_FLOAT">
   <DisplayString>{(int)f}.{((int)(f*10))%10}{((int)(f*100))%10}{((int)(f*1000))%10}{((int)(f*10000))%10}</DisplayString>
</Type>

我今天遇到了同样的问题。经过一些挖掘后,您可以通过添加“g”格式说明符来实现更简单的本地解决方案:

<Type Name="Rect">
    <DisplayString>Min({myMin.x,g},{myMin.y,g}) Max({myMax.x,g},{myMax.y,g}) Size({myMax.x-myMin.x,g},{myMax.y-myMin.y,g})</DisplayString>
    <Expand>
        <Item Name="[Width]">myMax.x-myMin.x,g</Item>
        <Item Name="[Height]">myMax.y-myMin.y,g</Item>
    </Expand>
</Type>

最小({myMin.x,g},{myMin.y,g})最大({myMax.x,g},{myMax.y,g})大小({myMax.x-myMin.x,g},{myMax.y-myMin.y,g})
myMax.x-myMin.x,g
myMax.y-myMin.y,g
这导致:


平均回答的分数为+1。我曾尝试过类似的方法,但我不知道如何获得恒定数量的数字来显示。问题是,虽然可以指定小数点后的数字,但不能指定小数点前的数字。例如,这个序列与序列{0.123,1.123,10.123,100.123等)断开。当然你可以使用同样的技术来显示前导零,无可否认看起来有点难看。我想也许你误解了我的问题。问题是,这些表示具有不可预测的长度(即使它们都是十进制的),导致彼此上方的行无法对齐。我没有回答这个问题,但对我很有帮助。拿我的+
{(NATVIS_FLOAT*)&m[2],na}
<Type Name="Rect">
    <DisplayString>Min({myMin.x,g},{myMin.y,g}) Max({myMax.x,g},{myMax.y,g}) Size({myMax.x-myMin.x,g},{myMax.y-myMin.y,g})</DisplayString>
    <Expand>
        <Item Name="[Width]">myMax.x-myMin.x,g</Item>
        <Item Name="[Height]">myMax.y-myMin.y,g</Item>
    </Expand>
</Type>