前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实用小技巧:vs2022多线程调试

实用小技巧:vs2022多线程调试

作者头像
江湖评谈
发布2024-03-14 15:49:16
1940
发布2024-03-14 15:49:16
举报
文章被收录于专栏:天下风云天下风云

前言

多线程怎么调试呢?通过AOT编译器ILC来看下,如何调试多线程?

.NET9 ILC编译托管方法用的是CPU密集型Parallel.ForEach并行,因为多个方法并行运行导致了断点的飘忽。这里可以通过VS提供的线程冻结方式,冻结其它所有线程,只运行当前线程的方式来进行单步调试。

ILC代码

ILC并行编译函数代码如下:

代码语言:javascript
复制
  private void CompileMultiThreaded(List<MethodCodeNode> methodsToCompile)
  {
      if (Logger.IsVerbose)
      {
          Logger.LogMessage($"Compiling {methodsToCompile.Count} methods...");
      }

      Parallel.ForEach(
          methodsToCompile,
          new ParallelOptions { MaxDegreeOfParallelism = _parallelism },
          CompileSingleMethod);
  }

methodsToCompile是需要编译的所有方法,这里面用了Parallel.ForEach进行函数并行编译。像这种情况,如果调试CompileSingleMethod回调方法,则会导致了断点飘忽不定。

解决方法

在调试的过程中(没有退出调试),VS菜单栏-》调试-》窗口-》线程,打开线程窗口。

看到黄色箭头指向的就是当前运行的线程,但同时还有其它的很多线程一起运行。Ctrl+A全选所有线程,注意去掉选择黄色箭头指向的线程,因为它是我们要调试的线程。右键-》冻结线程。如下图:

其它线程冻结了,这个时候,我们就可以愉快的调试当前线程了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-03-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 江湖评谈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • ILC代码
  • 解决方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档