C#調試程序——斷點+觀察數據的方法
1.寫本文的背景
因為程序的調試非常重要,他可以讓自己不斷地利用Visual Studio的強大去查找定位自己的問題所在之處。從而,達到糾正自己程序錯誤的地方,健壯自己的程序,讓問題變得越來越少,程序變得越來越健康。故作此文,而且日后會將實用的調試程序方法不斷進行迭代更新。
2.調試與測試
調式與測試實際有異曲同工之妙,只不過對象不同。測試面向的是產品級,系統級;而調試往往是程序里的某一部分,某個方法,某個屬性或者對象。最終效果也很類似,好的測試人員,測試方案可以將產品系統的問題解決在搖籃中;好的調試方法也會讓你對程序的運行理解更深刻,對問題的查找定位變得更容易,讓軟件運行得更穩定。
3.斷點調試
3.1 F10
單步調試,會跳過自定義方法。
3.2 F11
單步調試,會進入自定義方法執行調試。
3.3 SHIFT+F11
跳出當前方法。
當鼠標停留在某變量上面的時候,會顯示它的賦值情況
4.監視
4.1 按照1方法打斷點,單步調試。
4.2 打開監視窗口
4.3 輸入變量
在監視窗口輸入要監視的對象或者屬性,點擊回車。
4.4展開監視對象
展開監視對象,在監視窗口可以觀察關心的數據。
5.即時窗口
5.1 輸入對象或者屬性
輸入之后,點擊回車。
5.2 觀察數據
在即時窗口觀察關心的數據。
6. 局部變量
6.1 局部變量窗口
如下路徑打開局部變量窗口。
6.2 顯示變量
對應的輸出窗口會把所有的當前方法的局部變量進行自動顯示。你也可以再此窗口中找到你關心的數據進行展開顯示。
7. 輸出窗口
7.1 打開輸出窗口
打開輸出窗口如下圖路徑
7.2 Debug輸出指令
這里需要將視圖對象(即json序列)對象進行序列化。
7.3 數據輸出成功如下
8 C#計算一段代碼的運行時間
利用System.DateTime.Now:
static void SubTest()
{
DateTime beforDT = System.DateTime.Now;
//耗時巨大的代碼
DateTime afterDT = System.DateTime.Now;
TimeSpan ts = afterDT.Subtract(beforDT);
Console.WriteLine("所測試代碼總共花費{0}ms.", ts.TotalMilliseconds);
}
9 Assert數據斷點
在Nunit測試框架下(或者XUnit,MSTest都是同理)
[Test]
public void ColumnsShouldBeAutoGeneratedIfNoColumnsAreSpecified()
{
var package = _personList.ToPackage();
Assert.AreEqual(3,package.Workbook.Worksheets[1].Dimension.Columns);
}
Assert.AreEqual(3,package.Workbook.Worksheets[1].Dimension.Columns);
表示當package.Workbook.Worksheets[1].Dimension.Columns值等於3時,測試通過;不等於3時,在此處報錯。