在前幾講中,在講解了斷點的基本用法后,給大家介紹了簡單的關(guān)于變量監(jiān)視的技術(shù),包括運行中的局部變量監(jiān)視,也打開了編譯器監(jiān)視的一小扇門,今天將為大家講解更全面的窗口監(jiān)視。如下:
1.內(nèi)存監(jiān)視
除了我們之前講的可以監(jiān)視程序中的局部變量以外,我們還可以監(jiān)視其他想要的信息,比如數(shù)組中某一元素的值,特定地址處的值等等。比如我們在學(xué)習(xí)字符串函數(shù)strcoy時,很多同學(xué)不明白函數(shù)的的”覆蓋”效果,我們則可以通過內(nèi)存監(jiān)視來詳細(xì)查看,例如程序:
#include<stdio.h> int main() { char str1[100] = "www.sztianhecheng.cn"; char str2[100] = "C language"; strcpy(str1,str2); puts(str1); return 0; }
我們想查看strcpy函數(shù)過后str1數(shù)組中的值,而puts僅僅會顯示覆蓋后的,如果我們想看后面沒有輸出的字符,那么最好就要內(nèi)存監(jiān)視了,方法如下:
在puts函數(shù)處設(shè)斷點,運行程序,如下:
我們可以在右下方處輸入我們想要看的數(shù)組元素來查看未輸出的那部分元素內(nèi)容,如圖:
也可以在內(nèi)存監(jiān)視框里,輸入str1來查看str1數(shù)組在內(nèi)存中的存儲情況,如下圖:
可以看到str1里的各字節(jié)處內(nèi)容為何物,重要的是我們知道str1的真實內(nèi)容為“C language.com”。
這下,是不是心里更有數(shù)了呢?
2.寄存器監(jiān)視
寄存器的呼出窗口是View ?– ?Debug Windows ?– ?Registers?? 快捷鍵是Alt+5,我們可以通過這個窗口查看寄存器的數(shù)值變化情況,也可以結(jié)合匯編代碼對比查詢。
例如一個累加求和程序,通過斷點監(jiān)視寄存器觀察如下:
可以看到變量i和sum在分別存放于EAX和ECX兩個通用寄存器中。對于逆向?qū)W習(xí)也是很好的工具哦,方法是View – Debug Windows – Disassembly 對應(yīng)快捷鍵Alt+8可以呼出反匯編代碼,如下:
怎么樣,方便吧
3.?;厮?/span>
我們在學(xué)習(xí)函數(shù)調(diào)用,以及C程序的真正入口 函數(shù)時就可以利用VC6編譯器提供的?;厮莨δ埽瑏聿榭春瘮?shù)調(diào)用過程,方法是在調(diào)試環(huán)境下選擇View – Debug Windows – Call Stack 快捷鍵Alt+7例如我們寫一個例子程序,可以嘗試此功能:
可以看到add函數(shù)之前是main函數(shù)調(diào)用,再之前…? …
怎么樣,看到這幾個功能,是不是對VC6的掌握更深了呢?
建議親自上機實驗,有問題隨時留言!
C語言研究中心(www.sztianhecheng.cn)