C#多线程调试

概要

这篇文章主要分享多线程部分调试技巧,在日常的开发工作中会经常遇到多线程调试的需要。在我们调试的过程中会出现断点的焦点在多个线程之间“反复横跳”根本无法集中跟踪某一个线程的操作链路。那么今天我们来看看如何调试操作。如果有其它需要的可以参考下面微软官方的文档地址。

f98aeffdbd263e890045ce96e0e89653.png

  • 参考文献:https://docs.microsoft.com/zh-cn/visualstudio/debugger/get-started-debugging-multithreaded-apps?view=vs-2022

  • 工具:VisualStudio 2022

  • 框架:.NET5

  • 语言:C#

  • 程序:控制台应用

详细内容

开始调试之前我们先需要明白一个概念--“调试条件”。

af632578a8746dd2bd62f38416fd90c0.png

调试条件编写,下图的红圈里就是编写条件的文本框。文本框里的内容和写C#代码中if判断里的条件没有任何区别。同时还能在里面编写方法。

0d6275031f6f59cdd51c091b159be8ca.png

---分割线--

55b7be16f94f0a13b8db55b64a4f1687.png

当条件文本框失去焦点之后自动保存。

1431ce2deb060434cd2da1363a012d84.png


调试技巧1:

  • 1.编写测试代码

internal class Program
    {
        static void Main(string[] args)
        {
            Task[] task = new Task[6];
            for (int i = 0; i < task.Length; i++)
            {
                task[i] = Task.Run(Do);
            }
            Task.WaitAll(task);
        }

        private static void Do() 
        {
            int x = Thread.CurrentThread.ManagedThreadId;
            while (true)
            {
                Console.WriteLine(DateTime.Now);
            }
        }
    }
  • 2.打开线程监控窗口(需debug启动之后再点开“调试”选项)

2747e5adddb5f974a9cb605b6c7364d2.png

4ede71606008c581e640a62bcaed1d9d.png

  • 3.设置断点

e1cdc2e8600102d6b0e3bde429a5007e.png

  • 4.设置你需要查看的线程id

23b6319c08c953744793fdfcee511c61.png

编写调试条件

060f17fca9d23fbedce96de7540cdfa3.png

F10开始调试

fba86333e7c539797c808ef362373e60.png

调试技巧2:

  • 1.编写测试代码

internal class Program
    {
        static void Main(string[] args)
        {
            Task[] task = new Task[6];
            for (int i = 0; i < task.Length; i++)
            {
                task[i] = Task.Run(Do);
            }
            Task.WaitAll(task);
        }

        private static void Do() 
        {
            int x = Thread.CurrentThread.ManagedThreadId;
            //循环调试
            for (int i = 0; i < 100; i++)
            {
                Console.WriteLine(i);
            }
        }
    }

当遇到循环时,也可以编写调试条件。这样我们就不用一直按F10按50次了。

baea13528a805a6991452c6f0863c09b.png

技术群:添加小编微信并备注进群

小编微信:mm1552923   

公众号:dotNet编程大全    

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值