【问题标题】:Problems with single stepping in Visual Studio 2010 debugger?Visual Studio 2010 调试器中的单步执行问题?
【发布时间】:2010-09-17 17:14:43
【问题描述】:

当我调试托管的多线程代码时,我处于 ​​Main\UnitTestRunner 线程中的断点并开始单步执行偶尔,调试器会切换到另一个线程并开始单步执行它的代码。我怎样才能阻止这种情况?

如果重要,请使用 VS2010 + Resharper 5.1。

更新 1:

在单步 (F10) 命令之后仔细查看堆栈表明,在调试器决定停止执行之前实际上执行了许多 (10-30) 步。

这种情况经常发生,以至于几乎不可能进行调试。这与提到的issue Hans 非常相似。

更新 2:

我已在 Microsoft Connect 上提交了bug。如果您也遇到此问题,请“投票”。

更新 3:

已被 M$ 确认为将在下一个“服务版本”中修复的错误。解决方法是将单元测试定位到 .NET 3.5,如 here 所述。

【问题讨论】:

  • 我偶尔也看到过,感谢您提出这个问题。
  • 这也是 VS2008 SP1 中的一个问题,已通过修补程序解决。在 connect.microsoft.com 上报告此问题

标签: visual-studio debugging


【解决方案1】:

您可以转到线程视图并冻结其他线程。

调试 -> Windows -> 线程

然后右键单击要冻结的线程并选择冻结。如果您希望再次使用该线程,请右键单击该线程并选择解冻。

【讨论】:

  • 冻结会阻止调试器进入线程,还是完全停止线程运行?我需要后台线程继续运行,我只是不想调试它们。
  • @David Lynch:线程无法继续在后台运行,因为您可能会在调试中遇到无法复制实际程序执行的竞争条件。似乎 Visual Studio 试图让线程在调试器中以与它们在实际程序执行中相同的顺序运行事件 - 您可以冻结您不使用的线程,但您的程序可能希望这些线程完成某些事情(或者,相反,如果它们继续运行,它们可能会期望您当前正在调试的事情会完成),因此请谨慎调试。
  • @rwmnau:多线程应用程序本质上是异步的,即使在调试器中,线程也会这样运行。
  • 我无法冻结有问题的线程,因为它们必须运行主线程才能输入我正在调试的代码。
  • @David:您应该能够根据需要进行冻结和解冻。或许请参阅上面 Hans Passant 的说明。
【解决方案2】:

除了 Brian 的回答 - 如果你的线程中的代码没有重叠,你可以点击你想停止的下一行,然后点击“Run to Cursor”

【讨论】:

    【解决方案3】:

    如果您使用的是 64 位操作系统,请确保您的调试器设置默认为 64 位进程。在 Debug -> Options and Settings -> TestDriven.Net -> General 下,确保“Any CPU tests”设置为 Run in 64-bit process。

    【讨论】:

      猜你喜欢
      • 2011-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-25
      相关资源
      最近更新 更多