當我們調試複雜代碼時,尤其是那些長年累月無人維護的不良代碼,我們常常遇到的情況是,我們需要打大量的斷點,並且在調試的時候,不斷的反覆啓用和禁用它們,一不注意還容易錯誤的將斷點刪除,這是一個糟糕的調試體驗。
隨着 Visual Studio 2022 新版本的發佈,新的“斷點組”特性已經加入其中。此特性允許我們創建斷點組,用於將某類斷點統一管理,從而使調試過程更加簡單和高效。
下面讓我們看一下“斷點組”的使用。
Step 01 準備一個控制檯程序
下面是一個驗證素數的控制檯應用。
using System.Collections.Concurrent; using System.Diagnostics; namespace Demo { class Program { static void Main() { var limit = 2000000; var numbers = Enumerable.Range(0, limit).ToList(); var watch = Stopwatch.StartNew(); var primeNumbersFromForeach = GetPrimeList(numbers); watch.Stop(); var watchForParallel = Stopwatch.StartNew(); var primeNumbersFromParallelForeach = GetPrimeListWithParallel(numbers); watchForParallel.Stop(); Console.WriteLine($"Classical foreach loop | Total prime numbers: {primeNumbersFromForeach.Count} | Time Taken: {watch.ElapsedMilliseconds} ms."); Console.WriteLine($"Parallel.ForEach loop | Total prime numbers : {primeNumbersFromParallelForeach.Count} | Time Taken:{watchForParallel.ElapsedMilliseconds} ms."); Console.ReadLine(); } private static IList<int> GetPrimeList(IList<int> numbers) => numbers.Where(IsPrime).ToList(); private static IList<int> GetPrimeListWithParallel(IList<int> numbers) { var primeNumbers = new ConcurrentBag<int>(); Parallel.ForEach(numbers, number => { if (IsPrime(number)) { primeNumbers.Add(number); } }); return primeNumbers.ToList(); } /// <summary> /// 判斷是否爲素數 /// </summary> /// <param name="number"></param> /// <returns></returns> private static bool IsPrime(int number) { if (number < 2) { return false; } for (var divisor = 2; divisor <= Math.Sqrt(number); divisor++) { if (number % divisor == 0) { return false; } } return true; } } }
Step 02 創建“斷點組”
在斷點窗口中,點擊 新建 -> 斷點組
輸入斷點組名稱,設置斷點組
將任意斷點添加到斷點組
設置好後的樣子
Step 03 驗證“斷點組”
* 可以通過斷點組,啓用或禁用一組斷點。
* 可以通過斷點組,設置“僅當命中以下代碼時啓用”。
小結
“斷點組”帶來的優點:
* 對於大量斷點的複雜場景提供了一種自定義斷點配置和單獨或組合切換斷點的方法,從而使調試、測試和故障排除更快、更有效。
“斷點組”的不足:
* 目前斷點組尚未支持導入與導出。
* 目前斷點組僅支持“僅當命中以下代碼時啓用”設置,尚未支持其他斷點設置。