vs2010 調試中監視變量


在msdn中寫了如何查看調試的數據,網址:

http://msdn.microsoft.com/zh-cn/library/vstudio/esta7c62(v=vs.100).aspx

Visual Studio 調試器提供了各種用於檢查和修改程序狀態的工具。 這些工具中的大多數僅在中斷模式下有效。

數據提示是用於在調試過程中查看程序中的變量和對象的有關信息的最方便工具之一。 在調試器處於中斷模式時,可以在當前范圍內查看變量的值,方法是將鼠標指針置於源窗口中的變量上 有關更多信息,請參見如何:使用數據提示功能

可視化工具是 Visual Studio 調試器的新組件,通過它可以以有意義的方式查看對象或變量的內容。 例如,可以使用 HTML 可視化工具來查看 HTML 字符串,因為這樣可以解釋該字符串並在瀏覽器中顯示出來。 您可以通過數據提示、“監視”窗口、“自動”窗口、“局部變量”窗口或“快速監視”對話框來訪問可視化工具。 有關更多信息,請參見 可視化工具

可以通過變量窗口來了解變量、寄存器內容和表達式。

可以將調試器窗口中使用的數字格式設置為十進制或十六進制。 有關更多信息,請參見更改調試器窗口的數值格式

下面的調試器窗口提供有關程序的重要信息。省略。

如何監視數組:

下面的程序:

int main()
{
    int a[5]={1,2,3,4,5};
   for(int i=0;i<5;i++)
   cout<<a[i];
}

我們點擊右鍵,選擇添加監視,

立刻,下面的監視窗口會有值:

我們把程序換成

int *a=new int[5];
for(int i=0;i<5;i++)
{
 a[i]=i+1;
}
cout<<endl;

再監視a會發現:結果只顯示1,

注意看a是可折疊的,第一行顯示地址,第二行顯示內容,注意看類型,第一個是int *,第二個是Int)

為什么?

因為a只是一個指向int【5】首元素0的一個指針而已。我們如何才能查看該指針后面的幾個變量的值呢

這是,我們要點擊右鍵,選擇【快速監視】,

填寫a,5    (形式是aa,xx. aa表示變量地址,xx是元素個數).

結果:

成功查看了后面幾個的值。

 

條件斷點:

選擇條件后會彈出設置條件的窗口,如下圖所示。比如我們輸入i==500的時候觸發斷點。那么當i==500的時候斷點才會觸發,其它情況下斷點不會被觸發。

這里寫圖片描述

is true  是表達式為真時命中斷點

has changed 是值改變時命中斷點

 

內存斷點
根據內存地址設置的斷點叫做內存斷點,Visual Studio中也叫作數據斷點。內存斷點只有在指定的地址處的變量被修改時,才會觸發,訪問指定的地址內容是不會觸發內存斷點的。

應用場景:在很多情況要,一個變量使用的地方過多,我們不知道這個變量在何時何處被修改。使用內存斷點就可以輕松搞定

具體用法:
在程序中斷的情況下,一次選擇【調試】->【新建斷點】->【新建數據斷點(D)…】,會彈出如下對話框:

 

 

其中字節計數表示變量的類型大小,比如,int占用4個字節。

示例代碼:

int test=0;

int main(){
test=1;
}
1
2
3
4
5
設置了上面的內存斷點之后,當test被改變的時候就會觸發斷點,將程序中斷在修改內存斷點指定的內存地址的語句的下一條語句處,在VS2012中是這樣的。
---------------------
 

 

最近在開發一個比較復雜的項目,使用了許多assert宏來進行斷言防御式編程,但是有的時候發現許多數據被修改了並非自己期望的值。有的時候也不可能為所有數據都提高讀寫接口封裝來控制,這里就需要使用到數據斷點來判斷數據什么時候被改寫了。

 

MSDN參考文檔

https://msdn.microsoft.com/en-us/library/350dyxd0(v=vs.100).aspx

 

一.使用數據斷點的條件

首先數據斷點只支持Native code 也就是C/C++開發的代碼,而且只能在調試模式下才能設置(程序運行了才能知道你想關注的變量地址)

如果有C#和C/C++混編的項目,也只有C/C++部分的代碼支持數據斷點。


 https://blog.csdn.net/sesiria/article/details/51995370

 

gdb有同樣的命令,內存斷點 watch 地址

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM