【问题标题】:Freeze all threads on breakpoint in VS2010在VS2010的断点处冻结所有线程
【发布时间】:2011-01-13 04:43:58
【问题描述】:

我正在使用 VS2010 Beta 2 来调试一些多线程代码。喜欢并行堆栈等。

不过,我有一个问题:我在一个可能被多个线程调用的方法中设置了一个断点。一旦我遇到断点,我真的想将注意力集中在触发该断点的线程上。但是,当我点击“step”时,VS 经常切换到另一个线程(比如我在线程 1 上停止,但与此同时,线程 2 遇到了我的断点)。

我知道我可以在线程窗口中手动冻结线程。有没有办法自动做到这一点——基本上,一旦我遇到断点,冻结除当前线程之外的所有线程,直到我点击 F-5?

【问题讨论】:

  • 是的,太麻烦了,特别是如果你有很多并行线程!也许像 Kragen 所说的那样记下 threadID,然后使用“Run to cursor”继续下一行。如果一个线程命中该行并且它的 threadID 不是您跟踪的那个,那么重复“运行到光标”直到您获得所需的线程。至少 VS 不会在整个节目中跳来跳去,而你会一直失去焦点。

标签: visual-studio visual-studio-2010 debugging visual-studio-debugging


【解决方案1】:

我刚刚发布了一个 Visual Studio 2010 扩展,它完全符合您的要求。 而且它是免费的:)。

演示文稿

此 Visual Studio 2010 扩展添加了两个快捷方式和工具栏按钮,使开发人员可以在调试多线程应用程序时轻松专注于单线程。

它大大减少了手动进入“线程”窗口以冻结/解冻除需要遵循的线程之外的所有线程的需要,因此有助于提高工作效率。

特点

将进一步的执行限制在当前线程上。将冻结所有其他线程。快捷键:CTRL+T+T 或雪花按钮。 切换到下一个单线程(基于 ID)。将更改当前线程并冻结所有其他线程。快捷键:CTRL+T+J 或下一步按钮。

查看here on the Galleryofficial pageCodeplex repository

【讨论】:

    【解决方案2】:

    如果您从 Debug->Windows->Threads 加载线程窗口。一旦遇到断点,您可以选择所有线程并单击“冻结线程”,然后您可以恢复活动线程,选择它并选择“解冻线程”。

    这将只允许当前线程在调试器中执行。

    【讨论】:

      【解决方案3】:

      据我所知,您可以在单步执行时禁用断点。

      当我担心会混淆许多线程时,我倾向于只打开线程窗口并记下线程 ID。

      【讨论】:

      • 在单步执行时禁用断点
      【解决方案4】:
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-16
      • 1970-01-01
      • 1970-01-01
      • 2011-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多