【问题标题】:Close upcoming Debug Assertion关闭即将到来的调试断言
【发布时间】:2015-11-13 02:20:16
【问题描述】:

我正在使用 NUnit 测试调试 DLL,每次测试运行都会出现大量调试断言,这非常烦人。

所以我编写了一个轮询新调试断言的工具。该工具每 x 毫秒迭代一次所有窗口,并检查标题是否是可能的调试断言窗口标题集合之一。

在伪代码中是这样的:

void main()
{
    var thread = new Thread(ThreadMethod);
    thread.Start();
}

private void ThreadMethod()
{
    while(true)
    {
        foreach(var title in possibleWindowTitles)
        {
            IntPtr windowHandle = FindWindowHandle(title);

            if(windowHandle != IntPtr.Zero)
            {
                SetToForeground(windowHandle);
                SendKeys.SendWait("%I);
            }
        }
    }
}

代码行SendKeys.SendWait("%I")ALT + I 的组合键发送到窗口,这是“继续”按钮的组合键。

我的问题是:
有更好的选择吗?类似:

  • 新窗口出现时的事件
  • 一种更好的关闭窗口的方法(User32.dll 中的 CloseWindow 方法对我不起作用——没有异常,但没有任何反应)
  • SetToForeGround() 解决方法的更好解决方案
  • 最好的方法是抑制断言——这可能吗?

我的方法可行,但我认为我的解决方案很容易出错。所以我知道有人有个好主意

【问题讨论】:

  • 我将发布一个示例作为答案。

标签: c# debugging nunit assertion


【解决方案1】:

您可以配置对话框的行为。这是 DefaultTraceListener 提供的一种行为,可以在代码中或通过配置文件进行配置。 Debug.Assert 的文档提到了这一点。

在配置文件中,您可以像这样关闭 UI:

<configuration>
  <system.diagnostics>
    <assert assertuienabled="false" logfilename="c:\myFile.log" />
  </system.diagnostics>
</configuration>

您也可以通过配置文件从集​​合中删除默认跟踪侦听器:

<configuration>
<system.diagnostics>
  <trace autoflush="false" indentsize="4">
    <listeners>
      <remove name="Default" />
      <add name="myListener"  type="System.Diagnostics.TextWriterTraceListener"    initializeData="c:\myListener.log" />
    </listeners>
  </trace>
</system.diagnostics>
</configuration>

这些都可以通过代码使用Debug.Listeners 集合来完成。

【讨论】:

  • 感谢您的回答。目前我没有那么多时间。我检查后会报告;)
猜你喜欢
  • 2016-08-01
  • 2023-03-03
  • 2019-07-02
  • 1970-01-01
  • 2014-10-07
  • 2010-11-09
  • 2021-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多