郭樹文
(赤峰市環境科學研究院,內蒙古 赤峰 024000)
VS.NET中對應用程序進行調試的方法和步驟
郭樹文
(赤峰市環境科學研究院,內蒙古 赤峰 024000)
本文介紹了在Visual Studio.NET的IDE環境中對應用程序進行調試的方法和步驟,并介紹了VS.NET中的調試工具.
應用程序;錯誤;調試
開發出應用程序后,必須先確保其沒有錯誤并且安全可靠,然后才能將其交付給用戶.也就是說,在確定應用程序可以發布之前,必須先徹底檢查該應用程序是否存在錯誤,并且應糾正遇到的任何錯誤.其實,任何實際的應用軟件都不能保證完全沒有錯誤,但是程序員要保證盡力發現軟件存在的錯誤并修正這些錯誤.搜尋和消除錯誤的過程稱為調試.調試過程是一個程序員最重要的工作之一.
本文將詳細討論如何對C#中的應用程序進行調試、排除錯誤.
以某大型購物中心的場景為例,該中心使用計算機處理其計費系統.此系統接受顧客所購所有商品的名稱和價格,計算總額,減去折扣(如果有),然后輸出最終的帳單金額.假設在事務處理過程中,收銀員的計算機屏幕顯示一則錯誤消息,然后應用程序終止.這時候必須重新執行未完成的當前事務處理,還必須重新輸入全部信息.但是,如果程序員已經預先編寫代碼對這種情況進行處理,這種錯誤就不會發生,系統也不會崩潰.
必須先完全消除所有已經發現的語法錯誤和語義錯誤,然后才能成功部署應用程序.而在將軟件視為完全可靠之前,應該先對其進行測試.軟件測試過程是軟件開發過程中的一個重要組成部分.但是,盡管測試有助于確定輸出結果是否正確,但它無法確定錯誤發生的確切位置.這就是需要使用調試的原因.
測試是對開發人員認為正確的許多方面進行確認,直至開發人員發現其中一項不正確的這樣一個過程.而調試就是找出并改正這些不正確項的過程.
例如,程序員認為變量X的值在某一時間將為12,或認為在函數調用AREA(number,5)中接收到參數number和5的值是正確的.程序員對此如何確認?答案是使用調試工具.調試工具雖然無法確定錯誤,但是對于確定錯誤發生的位置極為有用.建議在所有的編程工作中使用一個調試工具. Visual Studio.NET的IDE帶有調試工具.
語法錯誤是編碼過程中遇到的最明顯的一類錯誤.程序員在編寫代碼的過程中不遵循語言規則時,就會產生語法錯誤.例如,C#要求程序員在每行代碼的末尾加上分號.如果漏掉分號,就被視為語法錯誤.
當應用程序試圖執行無法實施的操作時,就會產生運行時錯誤.此類錯誤發生在運行時.在程序運行過程中要拿一個變量作除數,然而這個時候這個變量的值是0,這種情況就會產生運行時錯誤.
語義錯誤指編譯器不會直接指出的邏輯錯誤,語法可能是對的,但代碼或許不會顯示所需的輸出結果.此類錯誤僅在其實際發生時出現在運行時,這是最難發現的程序錯誤.檢測此類錯誤的唯一方式是測試應用程序,以確保其提供的輸出結果為預期結果.表1列出了各種錯誤之間的區別.
很多程序員通常都試圖通過調用輸出函數(如Console.Write()等)來顯示某種消息,以判斷該點以前的代碼是否正確執行,從而達到隔離問題的目的.這些函數還可以用來跟蹤和顯示程序內某個變量的值.這是一種有效的調試技術.但麻煩的是,一旦找到并解決了問題,必須從代碼中刪除所有這些輸出函數的調用.這是一個相當繁瑣的過程.

表1 語法錯誤和語義錯誤
為簡化此過程,大多數編程語言和工具都提供有調試器,以便程序員觀察程序的運行時行為并跟蹤變量的值,從而確定錯誤的位置.使用調試器的優點是,檢查變量的值時不必插入任何輸出語句來顯示這些值.Visual Studio.NET也提供有調試器,以便程序員調試使用.NET支持的任意一種語言編寫的代碼.它為程序員提供了計算變量的值和編輯變量、暫掛或暫停程序執行、查看寄存器的內容以及查看應用程序所耗內存空間的工具等.
使用調試器時,必須在代碼中插入“斷點”,以便在特定行處停止執行.斷點告知調試器,程序應在設置的斷點處暫停執行(暫時停止).程序進入中斷模式后,就處于暫掛狀態.VS.NET中的許多調試器功能都只能在中斷模式下調用.通過這些功能,程序員可以檢查變量的值,如果需要還可以更改變量的值,也可以檢查其他數據.
在VS.NET中設置斷點的步驟如下:
(1)右擊所需代碼行,以設置斷點.此時會顯示彈出式窗口
(2)選擇“插入斷點”.設置斷點所在的代碼行由代碼旁的彩色點指示,且整行均為高亮顯示.
下圖所示為在不同的代碼行設置有斷點的程序示例的代碼窗口.遇到斷點時,程序會在設置斷點所在的代碼行停止.

在上圖中,控制權位于第一個斷點,代碼旁的黃色箭頭和黃色高亮顯示便可表明這一點.要繼續執行程序,請從菜單中選擇“調試”?“繼續”(也可以按快捷鍵F5).如果設置有更多斷點,程序執行將在每個斷點處再次停止,選擇“調試”?“繼續”后將會繼續.
Visual Studio.NET環境提供了創建、編譯和生成應用程序解決方案的工具.共有兩種模式可用來生成應用程序,一種是調試模式(Debug模式)另一種是發布模式(Release模式).調試模式可用來重復編譯應用程序和排除錯誤,直至能夠成功運行.當應用程序無需重復編譯即可發布時,再改成發布模式編譯,然后發布.
VS.NET調試器提供有多個窗口,用以監控程序執行.其中可在調試過程中使用的部分窗口包括“局部變量”窗口、“監視”窗口、“快速監視”對話框、“即時”窗口.下面我們將逐個說明這些窗口:
4.1 “局部變量”窗口
“局部變量”窗口顯示局部變量中的值.它只列出當前作用域(即正在執行的方法)內的變量并跟蹤它們的值.控制權一旦轉到類中的其他方法,系統就會從“局部變量”窗口中清除列出的變量(如果超出作用域),并顯示當前方法的變量.
調試應用程序時從菜單中選擇“調試”→“窗口”→“局部變量”,即可顯示“局部變量”窗口.
“局部變量”窗口包含三列信息:“名稱”列顯示變量的名稱,“值”列顯示變量的值,“類型”列顯示變量的類型.當程序執行從一個方法轉向另一個方法時,“局部變量”窗口中顯示的變量也會改變,從而只顯示局部變量.可以為“值”列下的字符串和數值變量鍵入新值,當值被更改后,新值將顯示為紅色.程序將使用這個變量的新值.
4.2 “監視”窗口
“監視”窗口用于計算變量和表達式的值,并通過程序跟蹤它們的值,也可以用來編輯變量的值.與“局部變量”窗口不同,此窗口中要“監視”的變量應由開發人員提供或指示.因此,可以指定不同方法中的變量.要同時檢查多個表達式或變量,可以同時打開多個“監視”窗口.VS.NETIDE中的“監視”窗口如圖9.4所示.變量的名稱應在窗口中指定.執行程序時,“監視”窗口會自動跟蹤變量的值.如果被監視的變量作用域不在當前執行的方法內,將會顯示“標識符超出范圍”的錯誤.
從菜單中選擇“調試”→“窗口”→“監視”窗口(1)“監視”窗口,(2)“監視”窗口,(3)或“監視”窗口,(4)即可顯示“監視”窗口.
4.3 “快速監視”對話框
“快速監視”對話框可用于快速計算變量或表達式的值.通過此對話框還可以修改變量的值.下圖所示為“快速監視”對話框.
此對話框每次只能用來顯示一個變量的值.此外,此對話框實際為模式對話框.也就是說,它不能用來在執行過程中跟蹤變量的值.要繼續執行代碼,必須關閉此對話框.要跟蹤變量的值,可以單擊“添加監視”按鈕,將變量添加到“監視”窗口中.
用右鍵單擊變量并選擇“快速監視”,即可顯示“快速監視”對話框.
4.4 “即時”窗口
“命令”窗口的即時模式可用于檢查變量的值、給變量賦值以及運行一行代碼.下圖所示為VS. NET中“命令”窗口的即時模式.要查找變量的值,必須在變量的名稱前添加問號(?).當應用程序處于中斷模式時,值將顯示在“命令”窗口的即時模式中.同樣,在此窗口中鍵入賦值代碼,然后按下Enter鍵,即可更改變量的值.分中斷模式無法使用“即時”窗口.
從菜單中選擇“調試”→“窗口”→“即時”,即可顯示即時模式下的“命令”窗口.
(1)跨語言調試使用 VB.NET、VC++.NET、VC#.NET、Managed Extensions for C++、腳本和SQL編寫的應用程序.
(2)調試為Microsoft.NET框架公共語言運行庫編寫的應用程序以及Win 32本機應用程序.
(3)加入正在主機或遠程機器上運行的程序.
(4)通過在單個Visual Studio解決方案中啟動多個程序,或加入已經在運行的其他程序來調試多個程序.
調試在編碼過程中以最小粒度執行.現在已經有很多的方法和調試環境幫助軟件開發人員在編碼過程中調試程序.集成開發環境(IDE)提供了一種在不需要編譯的情況下捕獲語言專有預定義錯誤(如語句結尾缺少字符和未定義變量等)的方式.
通過對應用程序的調試,可以找出程序中存在的絕大部分語法錯誤和運行時錯誤,減少程序在運行過程中出現錯誤,造成系統中斷.但是,即使找到并消除了應用程序中的語法錯誤和運行時錯誤,程序仍然不一定完全正確.要確保應用程序工作完全正常,還必須使用各種數據對其進行測試.測試可以確保向客戶交付穩定可靠的產品,是檢查應用程序并確保其符合設計規范的過程.測試的另一個重要原因是軟件中包含許多尚未發現的錯誤,為找出應用程序中這些錯誤,應當對其進行測試.
〔1〕Jeff Ferguson,Brian Patterson et al.C# Bible [M].北京:電子工業出版社出版,2002(12):258-269.
TP206
A
1673-260X(2010)03-0026-03