gpt4 book ai didi

使用“断点组”来简化调试

转载 作者:我是一只小鸟 更新时间:2023-08-19 21:56:51 26 4
gpt4 key购买 nike

  当我们调试复杂代码时,尤其是那些长年累月无人维护的不良代码,我们常常遇到的情况是,我们需要打大量的断点,并且在调试的时候,不断的反复启用和禁用它们,一不注意还容易错误的将断点删除,这是一个糟糕的调试体验.

  随着 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 验证“断点组”

  * 可以通过断点组,启用或禁用一组断点.

  * 可以通过断点组,设置“仅当命中以下代码时启用”.

小结

  “断点组”带来的优点:

  * 对于大量断点的复杂场景提供了一种自定义断点配置和单独或组合切换断点的方法,从而使调试、测试和故障排除更快、更有效.

  “断点组”的不足

  * 目前断点组尚未支持导入与导出.

* 目前断点组仅支持 “ 仅当命中以下代码时启用 ” 设置,尚未支持其他断点设置.

  。

最后此篇关于使用“断点组”来简化调试的文章就讲到这里了,如果你想了解更多关于使用“断点组”来简化调试的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com