【问题标题】:How to attach debugger to command line mstest如何将调试器附加到命令行 mstest
【发布时间】:2014-07-31 12:34:39
【问题描述】:

我有一个使用 mstest 的单元测试套件,我可以在 Visual Studio 中正常运行,但是当我的部署脚本尝试使用命令行调用 mstest 运行测试时,它会在一半的测试期间冻结。这可能是测试中的问题,但由于无法在调试器中重现该问题,因此我无法找到该问题。

到目前为止,我无法附加 mstest 进程来调试问题,因为当我附加并暂停时,我在 Visual Studio 中什么也看不到(没有列出线程,没有已知代码)。它如何使用阻止轻松附加到它的 appdomains 有什么奇怪的吗?任何其他尝试和排除故障的好方法,甚至可以从测试内部执行相当于 Console WriteLine 的操作,以便 mstest 将其显示在其运行的控制台窗口中?

【问题讨论】:

  • 确保在附加时选择正确的调试器类型 - 尝试明确指定而不是自动检测。
  • 嗯,奇怪。你可以Trace.WriteLine,它会出现在生成的.trx中,但我不确定它直到最后才写报告......

标签: c# debugging mstest visual-studio-debugging


【解决方案1】:

在 Process Explorer 中查看进程树后,MSTest.exe 正在启动一个名为 QTAgent32_40.exe 的子进程,我能够附加到该进程并关闭 Just my code 以便调试我的测试。

事实证明,在我创建的使用 MethodImplOptions.Synchronized 的模拟对象中,它实际上是死锁了

【讨论】:

  • 即使您已经明白了,我还是建议将 Rob 的以下答案命名为“答案”,因为他解决了如何从 VS 内部进行调试,以及如何克服子进程启动的问题。我和你有类似的问题,他的回答提供了关键。
【解决方案2】:

两个选项。

  1. 在 IDE 中取消选中测试 -> 测试设置 -> 保持测试执行引擎运行。

  1. 使用命令行:

使用 /noisolation 开关运行 mstest。它将直接执行测试,而不是生成辅助进程。

混合:自动将VS调试器附加到命令行mstest.exe:

我为我的测试项目配置了调试选项卡:

启动外部程序:C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\MSTest.exe

命令行参数:/noisolation /testcontainer:MyProjectName.dll

【讨论】:

    【解决方案3】:

    这是我对vstest.console 工具的建议:

    1. 在测试文件的底部添加新的测试方法,所以这个测试将首先在vstest.console工具中执行:

      [TestMethod]
      public void DebugAttachToProcessTimeout()
      {
          Console.ReadLine();
      }
      
    2. 使用适当的程序集作为参数启动 Vstest.console.exe。工具将尝试检查第一个测试并等待用户输入。
    3. 切换到 Visual Studio 并转到调试 -> 附加到进程 (CTRL+ALT+P)。然后选择“Vstest.console.exe”并点击“附加”。
    4. 现在您可以返回控制台并按 Enter。工具将继续使用附加的 Visual Studio 执行测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-08
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多