vs中調試程序
查看變量在內存中的內容的方法
https://blog.csdn.net/guojg1988/article/details/42922149
原文鏈接:http://www.sowsoy.com/topics-516.html點擊打開鏈接
在vs中調試程序的,有時候需要設置斷點看某個變量的內容,如果變量是一個指針、數組或結構體,則可以通過查看該變量所指向的內存來看變量的內容。
1、在vs2008中打開內存窗口
在vs2008調試界面中,點擊菜單【調試】->【窗口】->【內存】->【內存1】/【內存2】/【內存3】/【內存4】即可打開內存窗口。
2、找到要查看的變量的內存地址
在VS調試界面中,右鍵點擊要查看內存的變量,在彈出菜單中點擊【添加監視】,該變量將被添加到監視窗口中,在監視窗口中該變量對應的【值】列就是該變量對應的內存的地址。
3、將變量地址輸入到內存窗口中
在內存窗口中,輸入要監視的變量的地址(如0x001926E6),回車即可看到該內存塊的內容了。
也可以嘗試輸入&+變量名。
4、設置內存存儲的內容的顯示方式
在內存界面中,默認顯示的是16進制的單字節整數,可以通過在顯示區點擊右鍵,在彈出菜單中選擇內存內容的顯示方式。如作為雙字節整數顯示、4字節整數顯示、是否顯示符號位等。
今天講一下如何從VS2010中查看內存和寄存器狀態,一般來講,只要從事C/C++編程的人,基本上對於這篇文章完全可以略過了,但寫這篇文章的初衷在於,自己也是從這一步中過來的,記得當年自己其實也不知道如何快速使用VS中各種工具,導致花了很多時間在查找資料上面。所以,本文基本上可以說是面向菜鳥級選手了。廢話不多說,直接上菜。。。
一、查看寄存器
通常來說,在進行C或C++編程的時候,對於寄存器的查看還是不常用。但如果你在進行匯編代碼編程,那么學會查看相關寄存器便顯得非常重要,你可以從相關寄存器的值來確定各參數值是否有誤,從而幫你快速檢查代碼。
如何查看寄存器?本文采用一個非常簡單的程序進行演示,如下圖1所示
圖1
按下F5,全速運行到第12行處,此行代碼顯示的是調用一個進行簡單加法的運算。
這里需要提及的是C/C++的函數調用約定,這是一個非常重要的概念,不懂的人一定要上網查看下win32下函數調用約定是什么意思,C/C++默認的調用約定是__cdecl,這種調用約定的其中一條是關於函數如何傳參以及堆棧如何處理的問題,回到我們的例程,我們按下ALT+8進入反匯編,如下圖2所示
圖2
從上圖我們可以看到,進入匯編代碼后,我們按下ALT+5(也可到調試->窗口中看到),就可以看到寄存器窗口了,單步調試我們可以看到,程序首先將b送到寄存器EAX中,因此我們看到EAX的值變為2,然后把eax即b值壓入堆棧中,同理,再把b送到ECX並壓入堆棧(__cdecl調用約定規定傳參從右至左依次壓入堆棧),最后調用add函數,至於如何進入add調用下次再講。這里我們就學會了查看寄存器了,至於其他寄存器變量分別代表什么意思,希望讀者自己查閱相關資料,此處略去。
二、查看內存
查看內存是使用VS2010進行編碼的一個非常基本的技能了,快速而准確地查看內存,可以幫助你准確分析代碼中各變量的取值,以及存儲狀態,幫助你發現程序中的BUG,改進代碼的健壯性。
如何查看內存?繼續采用以上的例程進行說明,將程序F5到第13行,再單步到下一句
圖3
按下ALT+6,此時我們可以看到內存1的窗口,我們從自動窗口中先找到指針p的地址,然后將地址復制到內存地址欄中,回車,即可看到此時地址中的值。內存窗口中左邊的灰色值代表地址,右邊則表示地址中存儲的值。我們可以看到p地址對應的值為03,但后面還有000000跟着,其實因為我們存儲的是一個整數值,需要4個字節存儲,因此就算P中結果是3,也同樣占用了4個字節。
這里還需要注意的一個概念是,大端法存儲和小端法存儲的概念。回到上面圖中我們可以看出,內存地址從左至右,從上至下是依次增大的。我們這個值3其實正確的讀法應該是從右至左讀取的,即0x00000003,03是在最低位,而03也是存儲在內存地址中的低地址中的,因此這是小端法存儲,大端法則剛好相反。需要了解這方面更多信息的人,一定要上網查找更多資料多學習,本文就不再詳述。
————————————————
