我想在Visual Studio中調試多維C++數組。如何在調試時在VS中觀察C++數組的切片?
在英特爾Fortran中(集成在VS中),假定arr是2維數組,我可以使用「arr(2:5,3:8)」來查看數組的切片。
英特爾Fortran可以在VS2010做到這一點。如果我在C++中編寫自己定義的類(如CMultiDimensionArray),如何實現相同的目標?
我想在Visual Studio中調試多維C++數組。如何在調試時在VS中觀察C++數組的切片?
在英特爾Fortran中(集成在VS中),假定arr是2維數組,我可以使用「arr(2:5,3:8)」來查看數組的切片。
英特爾Fortran可以在VS2010做到這一點。如果我在C++中編寫自己定義的類(如CMultiDimensionArray),如何實現相同的目標?
您可以爲您的類創建自定義本機可視化工具(.natvis),以便根據需要呈現對象。請參閱Creating Custom Views of Native Objects。甚至有一個關於該鏈接頁面上多維數組的自定義視圖的例子。
但是natvis似乎不能接受參數。這是我可以使用natvis自定義顯示「ii」,但我無法顯示「ii(2:3,4:5)」。 我不熟悉納塔維斯,是不是? – EruditePig
不,沒有辦法將參數傳遞給natvis表示。我一直在提倡這一點,但是沒有人聽,或者這對他們來說太複雜了。但是,您可以創建靜態的並在調試時進行修改,或者可以基於使用ExcludeView/IncludeView的原始類型創建psudo類型副本,並使用view()修飾符來創建具有相同類型的多個視圖。
實施例類型:
struct myarray
{
int x[10][10];
};
例默認視圖:
<Type Name="myarray" IncludeView="x">
<Expand>
<CustomListItems>
<!-- Parameters -->
<Variable Name="x_begin" InitialValue="2"/>
<Variable Name="x_end" InitialValue="5"/>
<Variable Name="y_begin" InitialValue="3"/>
<Variable Name="y_end" InitialValue="8"/>
<!-- Local variables -->
<Variable Name="x_index" InitialValue="x_begin"/>
<Variable Name="y_index" InitialValue="y_begin"/>
<Loop Condition="y_index <= y_end">
<Exec>x_index=x_begin</Exec>
<Loop Condition="x_index <= x_end">
<Item Name="[{x_index}, {y_index}]">x[x_index][y_index]</Item>
<Exec>++x_index</Exec>
</Loop>
<Exec>++y_index</Exec>
</Loop>
</CustomListItems>
</Expand>
</Type>
<Type Name="myarray">
<Expand>
<CustomListItems>
<!-- Parameters -->
<Variable Name="x_begin" InitialValue="0"/>
<Variable Name="x_end" InitialValue="10"/>
<Variable Name="y_begin" InitialValue="0"/>
<Variable Name="y_end" InitialValue="10"/>
<!-- Local variables -->
<Variable Name="x_index" InitialValue="x_begin"/>
<Variable Name="y_index" InitialValue="y_begin"/>
<Loop Condition="y_index <= y_end">
<Exec>x_index=x_begin</Exec>
<Loop Condition="x_index <= x_end">
<Item Name="[{x_index}, {y_index}]">x[x_index][y_index]</Item>
<Exec>++x_index</Exec>
</Loop>
<Exec>++y_index</Exec>
</Loop>
</CustomListItems>
</Expand>
</Type>
例使用率在監視窗口(假定命名類型x的array
變量存在):
顯示默認:
陣列
顯示自定義的:
陣列中的視圖(X)
注意視圖名稱是區分大小寫的,但不喜歡任何非字母數字字符。只要它看到一個,它就認爲natvis文件中名稱的結尾,如果使用視圖名稱,則不匹配。
I.e.名字是「hello there」,view(hello)會匹配,但view(hello there)不會。因此,不要在你的名字中使用下劃線或標點符號。
如果你切換到std :: vector,VS會整齊地顯示它 –