如何在 Visual Studio 中仅调试一个线程 [重复]
Posted
技术标签:
【中文标题】如何在 Visual Studio 中仅调试一个线程 [重复]【英文标题】:How to debug only one thread in Visual Studio [duplicate] 【发布时间】:2011-11-18 14:00:18 【问题描述】:我希望能够在调试时只跟踪一个线程的执行。我使用线程池,所以调试器会不断在线程之间切换,这让调试非常不舒服。
阅读:
Visual Studio, debug one of multiple threads How to debug a single thread in Visual Studio?我得到了一种解决方案,即条件断点(基于线程的名称)。但是,我不能说“线程 #3”总是会处理有趣的情况,所以我必须更改每次执行的条件。工作量太大。
另一个解决方案是使用冻结/解冻功能只让我感兴趣的线程运行。但是,这会使某些信息不可用,因为所有线程都已暂停。
我现在使用的是让程序运行,直到我到达一个断点,我肯定会在好线程中。然后我暂停线程池的所有其他线程并尝试恢复执行。如果程序似乎卡住了,我会暂停并解冻当前线程。
理想的解决方案是找到正确的线程,对其进行标记,然后对 Visual Studio 说:“仅在标记当前线程时才中断”。
这可能吗?
【问题讨论】:
那么线程闯入的标准是什么? 标准将是停止是线程被标记 单独测试您的代码。以单元测试为例。然后你只需要调试线程交互,那种你不想想冻结线程的调试。 这不是我想要的,我的问题不是并发问题,但我只是不想浪费时间从我感兴趣的线程切换到另一个线程。 相关“Step over” when debugging multithreaded programs in Visual Studio 【参考方案1】:在调试时,您可以冻结线程窗口中的所有线程并仅恢复您感兴趣的线程。
【讨论】:
谢谢,但它没有回答问题:我希望应用程序正常运行,并且只在一个线程中的断点处停止【参考方案2】:我会使用您提到的条件断点,但不是与某个固定字符串进行比较,而是与某个半全局变量(可能是您的主类上的静态属性?)进行比较。
当您确定哪个线程变得有趣时,您可以使用即时窗口设置变量名称并允许命中条件断点。
【讨论】:
这将是一个可能的解决方案。我看到了 2 个缺点:我需要修改我的代码来调试它,我需要经历一个(复杂的)断点过程(1 点击 vs 点击,复制过去,1 点击) 对于那些最近收听的人(比如我),我建议进一步阅读answer which elaborates this workaround。我还建议投票给the suggestion mentioned here。【参考方案3】:有点晚了,但这是搜索中的第一个答案。
我在 VS 2015 中使用以下...
var thread = System.Threading.Thread.CurrentThread;
if (thread.Name == null)
thread.Name = "Main";
然后在断点...
System.Threading.Thread.CurrentThread.Name == "Main"
为了使其更灵活,您可以将 Thread 嵌入到自定义类中。
仅供参考:您不能在条件断点中使用静态变量,因为它们不在上下文中。从来没有真正理解为什么静态并不总是在上下文中。
【讨论】:
感谢您的回答(即使迟到了)您会在哪里添加第一段代码来命名线程? (我已经提到将这个添加到代码中需要提前知道我想要关注的线程) @kamaradclimber。尽快地。一个线程名只能设置一次,否则会出现异常。您可以在调试中手动设置 thread.Name。你也可以说 if thread.name == xxx System.Diagnostics.Debugger.Break() 对不起.. 5 分钟超时。 @kamaradclimber。尽快地。一个线程名只能设置一次,否则会出现异常。您可以在调试中手动设置 thread.Name 或仅设置 System.Threading.Thread.CurrentThread.Name = "xyz"。你也可以说... if (thread.name == xxx) System.Diagnostics.Debugger.Break();。如果需要,您可以为多个线程指定相同的名称。在过去,我已经添加了 bool stop = thread.Name == "someName" 的代码,然后在调试断点中你可以只输入条件stop
。让生活更轻松以上是关于如何在 Visual Studio 中仅调试一个线程 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual Studio 代码中仅搜索特定文件类型?
如何限制部署后脚本在 Visual Studio 数据库项目中仅运行一次
如何在 Visual Studio 2015(用于 C++)中仅禁用 SIMD 自动矢量化优化?
.NET Web应用配置本地IIS(实现Visual Studio离线运行与调试)
调试时如何让 Visual Studio 保持在一个线程上?
Web Essentials 浏览器链接在 Visual Studio 2015 中仅适用于 ASP.net 5 应用程序