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