程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#調試從入門到精通(1)

C#調試從入門到精通(1)

編輯:關於C語言
我們在做程序開發時,難免會遇到錯誤異常。如何快速地找到出錯的地方、分析錯誤的原因以及找到解決問題的方案,是許多初級程序員困擾的問題,這也正是經驗的寶貴之處。下面我將簡單介紹在Visual Studio中調試以及一些高級的調試和常見的錯誤。

PS:如無特別說明Visual Studio均指Dev10即Visual Studio 2010。

入門篇

假設你是有著.Net平台的程序員,並且使用Visual Studio 做為開發工具。

斷點:最簡單的一種,設置一個斷點,程序執行到那一句就自動中斷進入調試狀態。設置斷點,在你覺得有問題的代碼行,左側單擊,會出現紅色的紅點即斷點。

啟動調式:按F5,或者菜單欄---調式---開始調試,或者工具欄的圖標

快速監視:快速查看變量或者表達式的值,也可以自定義表達式進行計算

 

單步執行

有三種,一種是每次執行一行(F10);一種是每次執行一行,但遇到函數調用就會跳到被調用的函數裡(F11);一種是直接執行當前函數裡剩下的指令,返回上一級函數(Shift+F11)。

還有一種後悔藥,設為下一句(Set Next Statement),即下一句會被執行的語句(右擊設置或者快捷鍵:Ctrl+Shift+F10),但要注意在調試與數據有關的時候,設置下一句有可能會報異常。如在調試向DataTable中添加行的時候,已經存在的行不能重復被添加到DataTable中。

監視

調試器可能會自動列出一些相關變量的值,但是你可能還關心其它變量的值,可以添加對這些變量的監視。還可以監視一個表達式的值,比如a+b。但是,這個表達式最好不要修改變量的值,比如監視a++都會導致監視時修改了a的值,影響了程序的運行結果。

調試技巧篇

使用快捷鍵會大大提升我們的調試效率,常用的調試快捷鍵:

F5 啟動調試

F10 執行下一行代碼,但不執行任何函數調用。

F11 在執行進入函數調用後,逐條語句執行代碼。

Shift + F11 執行當前執行點所處函數的剩余行。

Shift + F5 停止運行程序中的當前應用程序。可用於“中斷”模式和“運行”模式。

拖動斷點(感謝 聖殿騎士的提醒)

在調試中,我們可以拖動斷點,使得程序運行到我們想要運行的地方。通常是用來驗證這段代碼對程序的運行結果有沒有影響的。因為我們拖動代碼,則被過濾的代碼就不會執行,將它跟原來的相比,可以看出去掉這段代碼有什麼影響 

條件中斷

假如你寫了個for循環,而且循環的次數比較多,如下代碼,現在我們知道在i=50的時候會有異常,那我們不可能按50次F5去調試這代碼,不然這效率….

  1. private void ConditionDebug()  
  2. {  
  3.      for (int i = 0; i < 100; i++)  
  4.      {  
  5.           if (i==50)  
  6.           {  
  7.        //some error code here  
  8.    Console.WriteLine("i=50 here");  
  9.           }  
  10.      }  

我們可以直接利用vs提供的功能修改變量i的值,一開i=0,即剛進入for循環中,我們設置將i改為49並回車,再調試一次,會發現i=50; 如下圖

當然我們也可以直接在代碼裡寫代碼以達到這個目的,代碼如下

  1. private void ConditionDebug()  
  2. {  
  3.             for (int i = 0; i < 100; i++)  
  4.             {  
  5.  System.Diagnostics.Debug.Assert(i != 50);  
  6.                 if (i==50)  
  7.                 {  
  8.          //some error code here  
  9.          Console.WriteLine("i=50 here");  
  10.                 }  
  11.             }  
  12. }  

使用了調試中的Assert(斷言),當執行程序後會彈出如下的提示框,點擊Ingore(忽略)即可,

Immediate Window

Immediate window在調試的時候計算表達式的值、執行語句、打印變量的值等。我們輸入命令(注意一定要以“>”開頭),會有智能提示,而且命名都是自解釋型。

如,我們現在想要知道i的值,可以輸入命名>Debug.Print i(也可以簡單的使用>? i),如下圖

Immediate window還有更強大的用法,計算方法的返回值(如果有的話)

如果有這個的函數

  1. int MethodValue(int a)  
  2. {  
  3.             if (a==1)  
  4.             {  
  5.                 return 1;  
  6.             }  
  7.             else 
  8.             {  
  9.                 return 0;  
  10.             }  

我們可以使用Immediate命令 >? class.Method(args) 去調用這個方法,如下圖

其中p是當前類的實例(因為MethodValue是類的方法,注意?和表達式之間要有空格)

對於一些實時性很高的程序(如socket)使用   Debug.Write()把錯誤寫到日志文件中,.Net可以將Debug信息寫到你指定的文件中,記住,寫進出的信息不一定是出錯的信息,也可以是你的程序的運行的一些重要信息,當你調試過程中發現某個模塊出了問題,但是不能決定位置,那你就可以使用這個方法,如果是一天才出一個錯誤,那你就更要使用這個方法。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved