VS调试查看寄存器学习总结
生活随笔
收集整理的這篇文章主要介紹了
VS调试查看寄存器学习总结
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
vs2008 調(diào)試時(shí)如何查看寄存器內(nèi)容
調(diào)試菜單里沒(méi)找到。
怎么調(diào)出來(lái)?
謝謝。
debug→windows→registers
在調(diào)試狀態(tài),然后主菜單的調(diào)試->窗口->寄存器?
或者按快鍵ALT+5?
先下斷點(diǎn),然后按F5或者點(diǎn)擊Debug->Start Debuging程序停在斷點(diǎn)處。
然后點(diǎn)擊按鈕 Debug->Windows->DisAssambly
中文版是:菜單“調(diào)試 > 窗口 > 反匯編?
接著按Ctrl+Alt+D組合鍵打開反匯編窗口
========
在VS中調(diào)試C#程序,如何查看內(nèi)存、寄存器、反匯編
http://blog.csdn.net/judyge/article/details/41315947想查看反匯編代碼,可在代碼窗口中點(diǎn)右鍵->選擇“轉(zhuǎn)到反匯編”即可。在匯編代碼窗口中,可以按F11來(lái)單步執(zhí)行,以便更精確地跟蹤代碼的執(zhí)行。
若想同時(shí)查看寄存器的變化情況,可以點(diǎn)擊VS中的“調(diào)試”->“窗口”->“寄存器”菜單項(xiàng)。(需在調(diào)試過(guò)程中才會(huì)顯示有此菜單項(xiàng),如,程序執(zhí)行到了斷點(diǎn)而暫停時(shí)。如果在調(diào)試狀態(tài)還是沒(méi)有此菜單項(xiàng),可試著以下操作:在VS中點(diǎn)擊“工具”->“導(dǎo)入和導(dǎo)出設(shè)置”,選擇“重置所有設(shè)置”,下一步,這時(shí)你可以保存當(dāng)前設(shè)置或不保存,我覺(jué)得無(wú)所謂,下一步,選擇“Visual C#開發(fā)設(shè)置”,“完成”。這樣,“調(diào)試”->“窗口”->“寄存器”菜單項(xiàng)應(yīng)該用顯示出來(lái)了,記得要確保你的程序是在調(diào)試的過(guò)程中。)
關(guān)于查看內(nèi)存,點(diǎn)擊“調(diào)試”->“窗口”->“內(nèi)存”->“內(nèi)存1”...“內(nèi)存4”(選一個(gè)就可以了。)。在內(nèi)存窗口中的“地址”欄輸入地址,按回車即可看到該地地址處的內(nèi)存信息。
========
vs2010中查看內(nèi)存和寄存器
http://blog.csdn.net/shuiniu1224/article/details/21997221今天講一下如何從VS2010中查看內(nèi)存和寄存器狀態(tài),一般來(lái)講,只要從事C/C++編程的人,基本上對(duì)于這篇文章完全可以略過(guò)了,但寫這篇文章的初衷在于,自己也是從這一步中過(guò)來(lái)的,記得當(dāng)年自己其實(shí)也不知道如何快速使用VS中各種工具,導(dǎo)致花了很多時(shí)間在查找資料上面。所以,本文基本上可以說(shuō)是面向菜鳥級(jí)選手了。廢話不多說(shuō),直接上菜。。。
一、查看寄存器
通常來(lái)說(shuō),在進(jìn)行C或C++編程的時(shí)候,對(duì)于寄存器的查看還是不常用。但如果你在進(jìn)行匯編代碼編程,那么學(xué)會(huì)查看相關(guān)寄存器便顯得非常重要,你可以從相關(guān)寄存器的值來(lái)確定各參數(shù)值是否有誤,從而幫你快速檢查代碼。
如何查看寄存器?本文采用一個(gè)非常簡(jiǎn)單的程序進(jìn)行演示,如下圖1所示
圖1
按下F5,全速運(yùn)行到第12行處,此行代碼顯示的是調(diào)用一個(gè)進(jìn)行簡(jiǎn)單加法的運(yùn)算。
這里需要提及的是C/C++的函數(shù)調(diào)用約定,這是一個(gè)非常重要的概念,不懂的人一定要上網(wǎng)查看下win32下函數(shù)調(diào)用約定是什么意思,C/C++默認(rèn)的調(diào)用約定是__cdecl,這種調(diào)用約定的其中一條是關(guān)于函數(shù)如何傳參以及堆棧如何處理的問(wèn)題,回到我們的例程,我們按下ALT+8進(jìn)入反匯編,如下圖2所示
圖2
從上圖我們可以看到,進(jìn)入?yún)R編代碼后,我們按下ALT+5(也可到調(diào)試->窗口中看到),就可以看到寄存器窗口了,單步調(diào)試我們可以看到,程序首先將b送到寄存器EAX中,因此我們看到EAX的值變?yōu)?,然后把eax即b值壓入堆棧中,同理,再把b送到ECX并壓入堆棧(__cdecl調(diào)用約定規(guī)定傳參從右至左依次壓入堆棧),最后調(diào)用add函數(shù),至于如何進(jìn)入add調(diào)用下次再講。這里我們就學(xué)會(huì)了查看寄存器了,至于其他寄存器變量分別代表什么意思,希望讀者自己查閱相關(guān)資料,此處略去。
二、查看內(nèi)存
查看內(nèi)存是使用VS2010進(jìn)行編碼的一個(gè)非常基本的技能了,快速而準(zhǔn)確地查看內(nèi)存,可以幫助你準(zhǔn)確分析代碼中各變量的取值,以及存儲(chǔ)狀態(tài),幫助你發(fā)現(xiàn)程序中的BUG,改進(jìn)代碼的健壯性。
如何查看內(nèi)存?繼續(xù)采用以上的例程進(jìn)行說(shuō)明,將程序F5到第13行,再單步到下一句
圖3
按下ALT+6,此時(shí)我們可以看到內(nèi)存1的窗口,我們從自動(dòng)窗口中先找到指針p的地址,然后將地址復(fù)制到內(nèi)存地址欄中,回車,即可看到此時(shí)地址中的值。內(nèi)存窗口中左邊的灰色值代表地址,右邊則表示地址中存儲(chǔ)的值。我們可以看到p地址對(duì)應(yīng)的值為03,但后面還有000000跟著,其實(shí)因?yàn)槲覀兇鎯?chǔ)的是一個(gè)整數(shù)值,需要4個(gè)字節(jié)存儲(chǔ),因此就算P中結(jié)果是3,也同樣占用了4個(gè)字節(jié)。
這里還需要注意的一個(gè)概念是,大端法存儲(chǔ)和小端法存儲(chǔ)的概念。回到上面圖中我們可以看出,內(nèi)存地址從左至右,從上至下是依次增大的。我們這個(gè)值3其實(shí)正確的讀法應(yīng)該是從右至左讀取的,即0x00000003,03是在最低位,而03也是存儲(chǔ)在內(nèi)存地址中的低地址中的,因此這是小端法存儲(chǔ),大端法則剛好相反。需要了解這方面更多信息的人,一定要上網(wǎng)查找更多資料多學(xué)習(xí),本文就不再詳述。
好了,以上就是本文的內(nèi)容了,非常簡(jiǎn)單,有問(wèn)題請(qǐng)留言。。。
========
VS看反匯編、寄存器、內(nèi)存、堆棧調(diào)用來(lái)學(xué)習(xí)程序設(shè)計(jì)
http://blog.csdn.net/dinghqalex/article/details/43151143? ? ? ?其實(shí)計(jì)算機(jī)這套東西是真的太大了,太多的東西要學(xué)要理解更要掌握。學(xué)習(xí)的時(shí)候要不斷拆分理解才能掌握得更牢固,學(xué)程序的時(shí)候可以通過(guò)查看程序的運(yùn)行過(guò)程進(jìn)而加深自己對(duì)程序設(shè)計(jì)的理解,調(diào)試出最優(yōu)化的代碼。
? ? ? ?VisualStudio,微軟的高端IDE,可以寫C/C++可以搞C#,寫網(wǎng)站等等,牛逼得爆。VS調(diào)試方便功能強(qiáng)大,一般公司也用它來(lái)開發(fā)。我在學(xué)C++的時(shí)候也是用的VS,在學(xué)習(xí)的時(shí)候感覺(jué)用到的東西越來(lái)越多,還沒(méi)理解得東西也很多,比如說(shuō)堆棧調(diào)用,寄存器等等,然后就了解到VS的反匯編、寄存器、內(nèi)存、堆棧調(diào)用等等功能窗口。
? ? ? ?好了 ?還是來(lái)扯怎么看這些東西,怎么玩
1. 首先還是新建一個(gè)C/C++項(xiàng)目,然后找個(gè)地方打上斷點(diǎn)
我項(xiàng)目代碼是這樣的,我在第5行的時(shí)候加了個(gè)斷點(diǎn),然后讓程序停下來(lái)了。
2. 用快捷鍵看反匯編、寄存器、內(nèi)存、堆棧調(diào)用
下面是快捷鍵
ALT+5是寄存器窗口:
ALT+6是內(nèi)存地址窗口:
ALT+7是調(diào)用堆棧的窗口(在程序很大的時(shí)候通過(guò)堆棧調(diào)用窗口來(lái)看程序在哪個(gè)函數(shù)停止的,里面變量哪里是空指針等,是很有用的):
ALT+8是反匯編窗口:
? ? ? ?都說(shuō)項(xiàng)目是調(diào)試出來(lái)的,是真的,寫代碼寫得開心,可能在加班玩命堆代碼的時(shí)候功能倒是做完了,但是有些地方有很多隱形的Bug,或許是同時(shí)忘了判斷空指針等等小問(wèn)題,程序老是崩潰,調(diào)試代碼的技術(shù)還是很有必要的。
? ? ? ?用這幾個(gè)窗口可以快速定位問(wèn)題和學(xué)習(xí)C++和計(jì)算機(jī)系統(tǒng)。
========
總結(jié)
以上是生活随笔為你收集整理的VS调试查看寄存器学习总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。