在调试时,我怎么能保证没有步入每一行代码的输出是什么?(While debugging, how c

2019-10-17 17:29发布

在下面的控制台应用程序,如果我把一个断点在最后一行围棋(); 并执行到断点(在调试模式),按F5键,结果不是在每次运行时完全不同。
控制台可以是空白(不输出任何东西):

或者它可以输出只是另一个运行结果的一部分:

或者,在极少数情况下,结果是“完全”(“现实化”):

如果我通过F10调试(步过)或F11(步骤进),执行的结果会立即输出到控制台窗口。

为什么这样的差异?
假设我调试使用3D党库,其中我没有aссess源代码的应用程序。
是否有可能以确保他们的输出,而不走进了他们的代码?

控制台应用程序的代码:

using System;
using System.Threading;

namespace _5_2
{
  class ThreadNaming
 {
    static void Main()
    {
      Thread.CurrentThread.Name = "main";
      Thread worker = new Thread(Go);
      Thread worker2 = new Thread(Go);
      worker.Name = "1111";
      worker.Start();
      //string just4breakPoint = "aaa";
      worker2.Name = "2222";
      worker2.Start();
      Go();
      Console.ReadLine();
    }

    static void Go()
    {
      Console.WriteLine
        ("Hello from " + Thread.CurrentThread.Name);
    }
  }
}

Answer 1:

“为什么这样的差异?” - 这是因为步调试介绍线程的同步,并可能改变在事情发生的顺序。

标记此为一个问题,这一事实可能表明你在你的代码需要同步。



Answer 2:

它只我就明白了经讨论后 ,为了通过F5拥有完整输出高达断点,需要输出由F10或F11执行一次步调试后进行同步。 在大多数情况下,这意味着符合断点(前或感兴趣的行之后),以通过引入虚拟手段“步进”一次输出同步的能力之后插入可执行代码的虚拟线。



文章来源: While debugging, how can I ensure the output without stepping into each line of code?