Visual Studio 調試小技巧(2)-從查看窗口得到更多信息

在使用Visual Studio開發調試程序時,我們經常需要打開查看窗口(Watch)來分析變量。有時在查看窗口顯示的內容不是很直觀。爲了能從查看窗口的變量中得到更多的信息,我們需要一些小的技巧。下面是幾個例子。

1. Windows消息

在開發調試界面程序時,我們經常需要查看消息的內容。當在查看窗口中,僅僅只顯示出消息對應的整數值,我們並不能直觀地知道究竟是什麼消息。比如:

 

查看窗口以整數值顯示消息

爲了能讓查看窗口顯示出消息內容,我們只需要在變量名添加“, wm”的格式化後綴,就能顯示消息的名字:

 

查看窗口以整數值顯示消息名字

2. 句柄返回值

Windows有很多API返回一個HANDLE類型的值來表示操作是否成功。當操作失敗時,返回一個特定的值來表示操作失敗的原因。通常我們不可能記住所有的錯誤代碼對應的失敗類型。比如在下面的例子中,我們就不一定能看出0x80070005表示的錯誤原因:

 

查看窗口以整數值顯示錯誤代碼

爲了能方便我們從句柄的錯誤代碼中直觀地發現出錯原因,Visual Studio在查看窗口中提供了一個“, hr”後綴。在變量名後添加該後綴,查看窗口就能顯示出具有可讀性的信息。比如,我們在上述返回值後添加“, hr”之後,就能得到:

 

查看窗口以可讀性文字顯示錯誤代碼

從這個句柄值的名字看來,很有可能是訪問權限出問題了。

3. 錯誤代碼

Windows 中有很多API在操作失敗時,會設置一個錯誤代碼,程序員可以調用函數GetLastError得到該錯誤代碼。在調試時,如果代碼中沒有調用GetLastError,那麼我們就不能很方便地得到給錯誤代碼。

由於這個錯誤代碼是設置在一個叫$ERR的寄存器裏。我們可以在查看窗口中顯示出該寄存器的值從而得到錯誤代碼。例如,我們運行如下代碼:

       HANDLE hFile = CreateFile(_T("temp2.txt"), GENERIC_READ, 0, NULL,

            OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

 

如果我們之前沒有新建temp2.txt這個文件,那麼我們就能得到如下的錯誤代碼:

 

查看窗口以整數值形式顯示$ERR中的錯誤代碼

我們可能不能從錯誤代碼0x0002看出出錯的原因。有了前面句柄的經驗,我們可以在後面添加“, hr”後綴,此時查看窗口顯示爲:

 

查看窗口以可讀性文字顯示$ERR中的錯誤代碼

現在我們就知道出錯的原因是系統不能找到文件。

4. 數組

數組是我們使用最爲頻繁的一種數據結構。但當數組是以一個指針和其長度來表示時,查看窗口並不能直觀地顯示出數組中每個元素的值,而只能顯示出該數組的起始地址以及它的第一個元素。下面就是一個例子:

查看窗口只顯示出數組的一個元素

爲了顯示出數組中所有元素的內容,我們可以在數組名的後面添加一個“, #”(#表示數組的長度)。如果我們在上面的數組名添加該後綴名就得到:

查看窗口顯示出數組的所有元素

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章