講師:戴志華 hana@arbor.ee.ntu.edu.tw 國立台灣大學電機工程研究所 Visual Basic 程式設計 講師:戴志華 hana@arbor.ee.ntu.edu.tw 國立台灣大學電機工程研究所
第十七章 程式的除錯
錯誤分類 編譯時期錯誤(Compile errors) 執行時期錯誤(Run-time errors) 邏輯錯誤(Logic errors)
Compile errors 沒有按照VB語法的規定會引發語法錯誤 打錯關鍵字 漏打標點符號 結構寫錯 …………………..
Compile errors(cont’d) Auto Syntax Check(語法檢查) 選 Tools 功能表的 Options 命令。 選取 Editor 標籤頁。 勾選或清除 Auto Syntax Check 選項。
Compile errors(cont’d) Require Variable Declaration(強制變數宣告) 選 Tools 功能表的 Options 命令。 選取 Editor 標籤頁。 勾選或清除 Require Variable Declaration選項。
Compile errors(cont’d) Combine “Auto Syntax Check” and “Require Variable Declaration” 變數名字大小寫兼具
Run-time errors 當程式執行時發生意外的狀況錯誤,導致程式無法繼續執行的錯誤 取用無法使用的物件 試圖讀取不存在的檔案 執行除以0的運算 ………………..
Logical errors 程式執行沒有得到預期的結果 最不容易發現 借助VB提供的除錯工具追蹤並檢視程式執行的結果,才能找出錯誤所在
Visual Basic 的三種模式 Design(設計) 製作畫面,加程式碼 Run(執行) 程式執行 Break(中斷) 除錯
What can we do in “Break” mode 當VB進入中斷模式後,你就能夠: 修改應用程式的程式碼。 知道現在正在執行那一個程序。 檢視及改變變數或屬性的內容值。 改變程式執行的流程。 執行VB的敘述或程序。
How to get into “Break” mode 碰到設定的中斷點 碰到 Stop 敘述 以F8或Shift-F8啟動程式執行 按下 Ctrl+Break 組合鍵,或是工具列中的 Break 鈕
How to get into “Break” mode(cont’d) 應用程式發生執行時期的錯誤,按下 Debug 鍵 放在 Debug.Assert 敘述後面的運算式運算的結果是 False
設定中斷點 使用Toggle Breakpoint 命令 按下 F9 鍵 使用滑鼠的左鍵點中欲設定中斷點的程式碼的 Margin Indicator 區 Ctrl+Shift+F9 Clear all breakpoints
使用Stop敘述 可以隨著程式碼一起儲存起來 製成EXE之後不會失效 Sub cmdSubmit_OnClick() 'Enter Break mode Stop End Sub
使用Debug.Assert方法 接在Debug.Assert 後面的運算式運算的結果是False便中斷 製成EXE之後就會完全失效 Private Sub cmdCount_Click() Dim intCounter As Integer For intCounter = 1 To 10 Debug.Assert intCounter < 5 Next End Sub
使用Debug工具列 使用滑鼠的右鍵點中工具列上空曠的地方,再選擇 Debug 命令
追蹤程式方法 逐行(Step Into) F8 逐程式(Step Over) Shift-F8 跳出(Step Out) Ctrl-Shift-F8 執行至游標處(Run to Cursor) Ctrl-F8
追蹤程式方法(cont’d) 設定下個執行點 (Set Next Statement) Ctrl-F9 顯示下個執行點 (Show Next Statement)
使用Watch視窗 使用Watch視窗在程式進入中斷模式時,檢視變數的內容值或運算式的結果 Debug/Add Watch Debug/Edit Watch
使用Quick Watch 想在VB進入中斷模式時監視並未加到Watch視窗的變數、屬性或運算式 Debug/Quick Watch
使用Immediate視窗 利用Immediate視窗呼叫程序、計算運算式、或是改變屬性或變數的值 用來顯示錯誤訊息
把資料列印到Immediate視窗 在Immediate視窗中使用 Print 方法 在應用程式中使用 Debug.Print 方法 Print BackColor ? BackColor
使用 Debug.Print 不用中斷程式的執行,就可以檢視欲檢視的變數、屬性或運算式 不會影響使用者輸出的畫面 Debug.Print "Salary = " & curSalary
Immediate視窗的進階用法 改變屬性或變數的內容值 測試程序的結果 frmMain.BackColor = 255 intMaxRows = 50 dblResult = Quadratic(2, 8, 8)
Immediate視窗的進階用法(cont’d) 可以輸入任何運算除了不接受宣告 error 58
使用Local視窗 觀察目前執行的程序可以看得到的變數 View/Locals Window
使用Call Stack視窗 存放已經被呼叫,但是還沒有執行結束的所有程序 View/Call Stack Function A Function B Function C
除錯基本程序 在可疑的地方設中斷點 在過程中順便把可疑的變數加入監看視窗 修改可疑之處,在測試之~~
Error On Error GoTo line On Error Resume Next On Error GoTo 0