我正在使用 VS2010 Beta 2 来调试一些多线程代码。喜欢并行堆栈等。
不过,我有一个问题:我在一个可能被多个线程调用的方法中设置了一个断点。一旦我遇到断点,我真的很想将注意力集中在触发该断点的线程上。但是,当我点击“step”时,VS 经常切换到另一个线程(比如我在线程 1 上停止,但与此同时,线程 2 遇到了我的断点)。
我知道我可以在线程窗口中手动冻结线程。有没有办法自动做到这一点——基本上,一旦我遇到断点,冻结除当前线程之外的所有线程,直到我点击 F-5?
我正在使用 VS2010 Beta 2 来调试一些多线程代码。喜欢并行堆栈等。
不过,我有一个问题:我在一个可能被多个线程调用的方法中设置了一个断点。一旦我遇到断点,我真的很想将注意力集中在触发该断点的线程上。但是,当我点击“step”时,VS 经常切换到另一个线程(比如我在线程 1 上停止,但与此同时,线程 2 遇到了我的断点)。
我知道我可以在线程窗口中手动冻结线程。有没有办法自动做到这一点——基本上,一旦我遇到断点,冻结除当前线程之外的所有线程,直到我点击 F-5?
我刚刚发布了一个 Visual Studio 2010 扩展,它完全符合您的要求。而且它是免费的:)。
介绍
此 Visual Studio 2010 扩展添加了两个快捷方式和工具栏按钮,使开发人员能够在调试多线程应用程序时轻松专注于单线程。
它大大减少了手动进入“线程”窗口以冻结/解冻除需要遵循的线程之外的所有线程的需要,因此有助于提高生产力。
特征
仅将进一步执行限制在当前线程。将冻结所有其他线程。快捷键:CTRL+T+T 或雪花按钮。切换到下一个单线程(基于 ID)。将更改当前线程并冻结所有其他线程。快捷键:CTRL+T+J 或下一步按钮。
在画廊、官方页面或Codeplex 存储库上查看它。
如果从 Debug->Windows->Threads 加载线程窗口。一旦遇到断点,您可以选择所有线程并单击“冻结线程”,然后您可以恢复活动线程,选择它并选择“解冻线程” ”。
这将只允许当前线程在调试器中执行。
我不知道,但是您可以在单步执行时禁用断点。
当我担心混淆许多线程时,我倾向于保持线程窗口打开并记下线程 ID。
John Robbins有一篇关于如何使用 Visual Studio 宏执行此操作的博客文章。