Delphi7中提供了一些附加調(diào)試工具來幫助用戶檢查程序錯(cuò)誤。從性能上講,其中一些工具屬于高級調(diào)試工具。盡管高級調(diào)試工具不像其他工具那樣常用,但對于經(jīng)驗(yàn)豐富的編程人員來說,它們是非常有用的。
Evaluate/Modify對話框(The Evaluate/Modify Dialog Box)
該對話框用于檢查變量的當(dāng)前值和修改變量的值。使用這個(gè)對話框,用戶可以修改某個(gè)變量的值來測試不同的輸出結(jié)果。在調(diào)試期間改變一個(gè)變量的值,使用戶能測試程序不同參數(shù)的效果,而不必每次都重新編譯。如下圖主菜單【Run | Evaluate/Modify】或按【Ctrl + F7】
Note
該對話框的工具欄即可顯示大圖標(biāo)也顯示小圖標(biāo),要在大小圖標(biāo)進(jìn)行切換的話,用鼠標(biāo)拖動(dòng)位于工具欄下方的線條,工具就會在大小圖標(biāo)間進(jìn)行調(diào)整了。
Evaluate/Modify對話框,類似于Watch List和Debug Inspector。如果點(diǎn)擊代碼中的一個(gè)變量,并從Code Editor的快捷菜單中選擇【Evaluate/Modify】菜單項(xiàng),該變量會自動(dòng)被求值。也可手動(dòng)輸入要進(jìn)行求值的變量,從主菜單選擇【Run | Evaluate/Modify】菜單項(xiàng),然后輸入要求值的變量名。
Expression字段用于輸入要對其求值的變量名或表達(dá)式。點(diǎn)擊Evaluate按鈕或按Enter鍵,表達(dá)式或變量就會被求值。結(jié)果顯示在Result字段中。如下圖:
Note
Evaluate/Modify對話框可當(dāng)做一個(gè)簡易計(jì)算器使用,可輸入十六進(jìn)制數(shù)(或十進(jìn)制數(shù),或兩者都可)的數(shù)學(xué)公式,讓計(jì)算器計(jì)算結(jié)果。例如如下圖:
還可在Expression中輸入邏輯表達(dá)式,Result顯示True。如下圖:
程序必須停在斷點(diǎn)處才能使用Evaluate/Modify對話框這一功能。
如果用戶想要改變一個(gè)變量的值,可在New Value字段輸入新值并點(diǎn)擊Modify按鈕,變量就會變成輸入的新值。當(dāng)用戶點(diǎn)擊Run按鈕重啟啟動(dòng)程序(或繼續(xù)步進(jìn)調(diào)試)時(shí),就會使用新值。
Note
與Watch List和Debug Inspector不同的是,當(dāng)用戶一行一行執(zhí)行代碼時(shí),Evaluate/Modify對話框不會自動(dòng)更新。如果代碼改變了Evaluate/Modify對話框中變量的值,必須再點(diǎn)擊Evaluate按鈕才能看到改變后的值。這使得Evaluate/Modify對話框有個(gè)優(yōu)點(diǎn):步進(jìn)式調(diào)試代碼時(shí)速度更快,因?yàn)檎{(diào)試器不必每執(zhí)行一行代碼就求一個(gè)表達(dá)式的值。可交互地使用這個(gè)對話框來求變量或表達(dá)式的值,并且求完值后立即關(guān)閉此對話框。
調(diào)用棧窗口(The Call Stack Window)
在程序運(yùn)行階段,用戶可通過查看調(diào)用棧來檢查應(yīng)用程序調(diào)用的函數(shù)或過程。從主菜單上選【View | Debug Windows | Call Stack】菜單項(xiàng)來顯示Call Stack窗口,該窗口列出應(yīng)用程序調(diào)用的函數(shù)和過程,按調(diào)用順序的先后排列,最近調(diào)用的函數(shù)或過程列在窗口頂部。
雙擊Call Stack窗口中的方法名,會顯示該方法的代碼行(如果該方法在應(yīng)用程序中);當(dāng)函數(shù)或過程的代碼不存在時(shí)(VCL方法), Call Stack窗口顯示該過程所在的模塊名和地址。雙擊沒有源代碼的函數(shù)和過程,會顯示CPU窗口。
當(dāng)碰到Windows Access Violation錯(cuò)誤時(shí),查看調(diào)用棧非常有幫助。通過查看調(diào)用棧,用戶能找出程序中產(chǎn)生錯(cuò)誤的位置;找到程序中錯(cuò)誤位置是排除錯(cuò)誤的第一步。
Tip
如果調(diào)用棧列表中包含有無意義的信息,那可能是調(diào)用棧被破壞了。被破壞的調(diào)用棧通常標(biāo)志著棧溢出或內(nèi)存覆蓋。
CPU窗口(The CPU Window)
可從主菜單【View | Debug Windows | CPU】菜單項(xiàng)或按【Ctrl + Alt + C】來顯示CPU窗口。
CPU窗口使用戶能夠在匯編指令級查看應(yīng)用程序?梢詧(zhí)行一個(gè)匯編指令就暫停一下;也可以運(yùn)行程序至某條匯編指令(就像用常規(guī)調(diào)試器運(yùn)行程序至某行源代碼一樣)。CPU窗口分成五個(gè)窗格:反匯編窗格(Disassembly pane)、寄存器窗格(CPU Registers pane)、標(biāo)志窗格(Flags pane)、原始棧窗格(Machine Stack pane)和轉(zhuǎn)儲窗格(Memory Dump pane)。
每個(gè)小窗格都有一個(gè)快捷菜單,這個(gè)快捷菜單提供使用該窗格時(shí)所需的功能。要有效地使用CPU窗口,必須懂匯編語言。顯然,CPU窗口是一個(gè)高級調(diào)試工具。
Go to Address命令(The Go to Address Command)
Go to Address命令也是一個(gè)高級調(diào)試工具。當(dāng)應(yīng)用程序出現(xiàn)故障時(shí),Windows會顯示一條出錯(cuò)消息,給出違例地址。用戶可以使用Go to Address命令來找出程序中發(fā)生故障的位置。當(dāng)Windows發(fā)出Access Violation出錯(cuò)消息時(shí),會顯示一個(gè)類似于下圖的錯(cuò)誤。
當(dāng)用戶看到這樣的出錯(cuò)消息時(shí),記下違例發(fā)生的地址,從Code Editor快捷菜單中選擇【Debug | Go to Address】菜單項(xiàng)來顯示Go to Address對話框。
把記下的地址輸入到Go to Address對話框的Address字段中。點(diǎn)擊OK,調(diào)試器就開始查找發(fā)生故障的源代碼行。如果故障出現(xiàn)在代碼中,則光標(biāo)會指著產(chǎn)生錯(cuò)誤的源代碼行。如果是代碼以外的地方發(fā)生故障,會彈出一個(gè)消息框告訴用戶,代碼中未找到該地址。這是一個(gè)高級調(diào)試工具,用戶可能還從未使用過。