.NET的十大調試技巧

人鼠之間最周密的計劃有時還是會出岔子。即使您已經嚴格地將單元測試放在了適當的位置,有時您仍然想要開始調試應用程序或單元測試。在本文中,我們將瞭解. net的10個調試技巧。

.NET的十大調試技巧

1.設置斷點

斷點是調試的基本單位之一。它是調試環境的一個提示,它應該在某個點停止應用程序的執行。如果您使用的是完整的Visual Studio IDE,則添加斷點很簡單。單擊要停止執行的代碼行旁邊的裝訂線。

斷點可以添加到幾乎任何執行的代碼行中。這意味著您無法Fact 在此代碼中的屬性或實際函數名稱上斷點 。在前一種情況下,如果需要打破屬性,可以進入屬性定義。在後者中,函數第一行的斷點將在函數執行之前停止執行。可以在執行代碼之前或在調試時添加斷點。

2.有條件的斷點

有時,在遇到您正在尋找的條件之前,可能會多次執行一段代碼。例如,您可能正在使用集合,而第93個元素是您需要調試的元素。您可以坐下來點擊F5 92次以獲得您感興趣的記錄,或者您可以使用條件斷點。條件斷點只會導致進程在滿足條件時停止。條件可以非常簡單,例如計算一條線被擊中的次數。它們也可以更復雜,例如檢查某些值是否為真。

條件對話框中的一個未充分利用的功能是在值更改時設置斷點。如果您試圖追蹤正在改變某個變量值的內容,這可能非常有用。此外,還有一個複選框,用於在命中斷點時執行操作。您可以通過這種方式快速將臨時日誌添加到正在運行的應用程序

3.查看返回值

在大多數情況下,您可以在調試時使用鼠標懸停在變量上,以瞭解變量中包含的值。您無法執行此操作的一個地方是從函數中獲取返回值。您不能簡單地將鼠標懸停在return語句上並預覽將從函數返回的內容。要拉出一個值,你可以看兩個地方:手錶和當地人。

在locals窗口中,您可以通過查找函數的名稱(當然是完全限定的),然後單詞“return”來查看返回值。我在函數的結束括號上放置一個斷點,以查看值將被退回。

在監視窗口中,您可以通過檢查名為的特殊變量來引用當前返回值 $ReturnValue 。

能夠在錶盤中看到一個價值是一回事,但不像我在任何一家銷售中國商店的孩子,你可以捅東西。如果您需要模擬某些返回值或檢查特定的,難以重現的變量集會發生什麼,那麼可以通過查看locals窗口中顯示的值來完成。如果您有需要測試的邊界條件,但是不確定如何設置輸入以獲得所需的輸出,則此技術特別有用。在下面的視頻中,您可以看到我們下一個調試提示提供的第一個和最後一個總和的預覽:OzCode。

5. OzCode

與大多數其他IDE相比,Visual Studio在調試方面是IDE的凱迪拉克。添加OzCode將一組火箭助推器綁在上面。它提供了豐富的工具集,使調試更加容易。我特別喜歡它在調試會話期間對代碼顯示所做的更改。您可以看到,在上面的視頻中,變量值以內聯方式顯示,而不必將鼠標懸停在它們上面。此外,您可以在複雜對象或對象集合中搜索特定值。

您可以在他們的網站上閱讀有關OzCode功能的所有信息。該工具不是免費的,但它是一個值得添加到您的工具帶。如果您的代碼庫不能通過單元測試輕鬆測試,那麼購買是值得的。

6.添加單元測試

有時最好的調試形式不是調試。調試的是它往往是一個非常緩慢的過程。您需要設置一個測試用例,設置一些斷點,然後運行應用程序以到達您需要的位置來運行您希望調試的行為。我發現這在過去是一次非常令人沮喪的經歷。圖形應用程序經常需要花費大量時間點擊按鈕才能找到問題所在的位置。

您可以更好地設置一個單元測試,以便使用您需要的值來運用相關功能,而不是掙扎於此。到目前為止,本文中介紹的技術可能有助於您瞭解哪些值導致問題。然後可以將這些提取到單元測試中以加強調試周期。當然,您可以調試單元測試以真正解決問題。

有無數偉大的單元測試工具,其中一些甚至可以為您生成一些測試。利用這些工具並構建一套單元測試可以減少將來必須放棄調試的次數。最終的結果是,在將來更改代碼時,您會感覺更舒服,因為您知道自己擁有可靠的測試安全網。

額外提示:使用前綴簽入

你可能會認為Prefix只是一個工具,可以讓你深入瞭解你的代碼在做什麼,但它不止於此。您可以使用前綴查找從n + 1個錯誤到隱藏異常以及獲取代碼建議的所有內容。經常查看Prefix浮出的日誌將足以指出您正確的方向來修復您的錯誤。即使您正在進行初始開發,Prefix也可以一直運行,因此您可以在它們仍在計算機上時捕獲錯誤,並且您不必在生產中調試問題。

閱讀為什麼APM使用正在向左轉發展和QA。

很難測試代碼

如果您的代碼庫難以測試,並且其中有一些代碼庫,那麼您可能想要獲取Michael C. Feathers的書“有效地使用遺留代碼”的副本。本書的附錄提供了有關如何從混亂的不可測試代碼中提取可測試代碼的具體建議。

7. LINQ中的斷點

我是一名LINQ癮君子。在那裡,我出來說了。沒有構建的應用程序沒有大量使用LINQ。我喜歡能夠以非常簡潔的方式進行排序,過濾和投影的功能性。我的大腦用於解析和理解複雜的查詢,我知道我作為開發人員的一個缺點就是編寫了不可接受的LINQ語句。傳統上,調試LINQ非常複雜,而且Microsoft文檔中的建議非常少。您可以通過一次選擇查詢塊並在快速監視或觀察窗口中評估它們來進行調試。這留下了一些需要。

OzCode有一個很好的可視化工具,它將顯示如何在每一步中更改LINQ查詢中的數據。在這裡,您可以看到一個查詢,它接受一堆單詞,過濾它們的長度,抓取第一個字母,對它們進行分組,並找到最大的計數。

查詢顯示為一系列面板,顯示執行步驟後的數據狀態。目前只支持可視化全框架LINQ查詢,但對.NET Core的支持正在進行中。

8.評估沒有副作用的功能

功能編程中精心設計的方法沒有副作用。也就是說,您可以使用相同的輸入多次運行相同的功能,結果將是相同的。這稱為純函數,它通過緩存和優化實現各種樂趣。不幸的是,我們遇到的大多數功能都不是純粹的,可能會產生副作用。考慮這個功能:

static int hitCounter = 0 ;

public static int GetAndIncrement()

{

return hitCounter ++ ;

}

每次調用此函數時,結果都是不同的:0,1,2,3。如果您在快速監視窗口中評估該函數,則也是如此。

每次評估函數時,命中計數器的副作用都會增加。調試代碼時,這是一個簡單的條件。為了避免在我們調試時更改正在運行的程序的狀態,我們可以在表達式中添加“,nse”。

9.在VSCode中調試

如果您正在處理未使用完整版Visual Studio的項目,那麼您仍然可以通過利用Visual Studio Code獲得豐富的調試體驗。VSCode的調試體驗不如完整的VS那麼好,但它仍然很好。在OzCode中找到的swish工具尚未出現在VS Code中。您可以使用VSCode調試整個不同語言的主機:從Java到Python再到C#,所有這些都通過一系列插件得到支持。 有關如何開始調試的文檔也很棒,可能是您需要的唯一起點。

10.說出來

這可能是您調試代碼時最重要的事情。找一個朋友,一個同事或一個無生命的物體,並談談你遇到的問題。我發現只是將我的想法充分地解釋到其他人的行為就足以指出我的解決方向。有時,最簡單的解決方案比光滑的調試工具更好。


分享到:


相關文章: