簡體   English   中英

如何在 Visual Studio 調試器中顯示動態分配的數組?

[英]How to display a dynamically allocated array in the Visual Studio debugger?

如果您有一個靜態分配的數組,Visual Studio 調試器可以輕松顯示所有數組元素。 但是,如果您有一個動態分配並由指針指向的數組,則當您單擊 + 將其展開時,它只會顯示該數組的第一個元素。 有沒有一種簡單的方法可以告訴調試器,將此數據顯示為類型為 Foo 且大小為 X 的數組?

是的,簡單。 說你有

char *a = new char[10];

在調試器中寫入:

a,10

將向您顯示內容,就好像它是一個數組一樣。

有兩種方法可以查看數組 m4x4 中的數據:

float m4x4[16]={
    1.f,0.f,0.f,0.f,
    0.f,2.f,0.f,0.f,
    0.f,0.f,3.f,0.f,
    0.f,0.f,0.f,4.f
};

一種方法是使用 Watch 窗口 (Debug/Windows/Watch)。 添加手表 =

m4x4,16

這將在列表中顯示數據:

在此處輸入圖片說明

另一種方法是使用內存窗口(調試/Windows/內存)。 指定內存起始地址 =

m4x4

這在表格中顯示數據,這對於二維和三維矩陣更好:

在此處輸入圖片說明

右鍵單擊“內存”窗口以確定二進制數據的可視化方式。 選擇僅限於整數、浮點數和一些文本編碼。

在監視窗口中,在數組名稱和要顯示的項目數量后添加逗號。

重溫:

讓我們假設您有一個以下指針:

double ** a; // assume 5*10

那么您可以在 Visual Studio 調試監視中編寫以下內容:

(double(*)[10]) a[0],5

這會將其轉換為如下所示的數組,您可以一次性查看所有內容。

double[5][10] a;

為了,

int **a; //row x col

添加此觀看

(int(**)[col])a,row

MSDN 中指定了另一種方法來做到這一點。

簡而言之,您可以將字符數組顯示為多種類型的字符串。 如果你有一個數組聲明為:

char *a = new char[10];

您可以使用以下命令在監視窗口中將其打印為 unicode 字符串:

a,su

有關所有可能的不同轉換,請參閱 MSDN 頁面上的表格,因為有很多。 許多不同的字符串變體、用於打印數組中單個項目的變體等。

您可以在文檔中的此 gem 的監視窗口中找到可以對變量執行的許多操作的列表: https : //msdn.microsoft.com/en-us/library/75w45ekt.aspx

對於變量a,其他答案中已經提到了一些事情,例如

a,10 
a,su 

但是格式和大小還有很多其他說明符,例如:

a,en (shows an enum value by name instead of the number)
a,mb (to show 1 line of 'memory' view right there in the watch window)

對於 MFC 數組(CArray、CStringArray、...),請點擊其提示 #4 中的下一個鏈接

http://www.codeproject.com/Articles/469416/10-More-Visual-Studio-Debugging-Tips-for-Native-De

例如對於“CArray pArray”,在觀察窗口中添加

     pArray.m_pData,5 

看前5個元素。

如果 pArray 是二維 CArray,您可以使用以下語法查看第二維的任何元素:

     pArray.m_pData[x].m_pData,y

我還沒有找到將它與多維數組一起使用的方法。 但是您至少可以(如果您知道所需條目的索引)將監視添加到特定值。 只需使用索引運算符。

對於一個名為 current 的數組,它里面有一個名為 Attribs 的數組,里面有一個名為 Attrib 的數組,如果你想定位 26,它應該看起來像這樣:

((*((*current).Attribs)).Attrib)[26]

您還可以使用偏移量

((*((*current).Attribs)).Attrib)+25

將顯示 ne "next" 25 個元素。 (我使用的是 VS2008,這最多只顯示 25 個元素)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM