繁体   English   中英

关闭即将发布的调试声明

[英]Close upcoming Debug Assertion

我正在用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.dllCloseWindow方法对我不起作用-没有异常,但是什么也没有发生)
  • SetToForeGround()解决方法的更好解决方案
  • 最好的方法是抑制断言-可能吗?

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

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

在配置文件中,您可以这样关闭用户界面:

<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集合通过代码来完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM