在LINQPad,Debug.Assert()并Trace.Assert()从System.Diagnostics命名空间不会达到预期效果.
而不是破坏 - 即弹出一个消息框或其他恰好配置的东西<trace>- 它们只是将"失败:"或"Fehler:"打印到输出窗口,让程序以其快乐的方式继续.换句话说,除了嘈杂,不可忽视的爆炸之外,只有近乎看不见的微屁,将"失败:"散布在文本输出中.
有没有办法Assert()恢复到LINQPad下的默认行为?
或者,是否有一种简单的Trace.Assert()模拟方法,以便失败导致嘈杂的爆炸(例外,消息框,无论如何),故障的来源以行号或类似的形式确定?
我的单元测试是基于的Trace.Assert(),如果函数在失败时不能破坏程序,它们就完全没用了.
在Visual Studio中,一切正常但在LINQPad中没有.我没有摆弄任何系统范围的设置,但我确实在某个时间点安装了Mono.我在LINQPad的所有设置中使用精细的梳子,但无济于事.LINQPad版本为4.57.02(非免费),在Windows 7 Pro(德语)和Windows 8.1 Pro(英语)上运行.
我用google搜索高,宽,但我唯一能找到的是Trace.Assert没有破坏的主题,也没有在Stack Overflow上显示消息框.它的标题看起来很有希望,但其中的答案却没有.
PS:我试着通过添加进行模拟
class Trace
{
public static void Assert (bool condition)
{
if (!condition)
throw new Exception("FAIL!");
}
}
Run Code Online (Sandbox Code Playgroud)
到LINQ脚本并在throw语句上设置断点.单击LINQPad调试器中的相关调用堆栈条目将我带到相关的源代码行,因此这种方法很有效.但是,我无法找到与FoxPro SET DEBUG ON直接从源代码调用调试器的等价物,而不必在throw... 上设置断点.
要回答问题的后半部分,即如何在抛出异常时让LINQPad调试器中断,答案是单击工具栏上的"Bug"图标之一.
异常未处理时单击" 中断"(红色错误),以便在抛出未处理的异常时使查询中断.
抛出异常时单击" 中断"(蓝色错误),以便在抛出异常时使查询中断,无论是否处理异常.
您可以让LINQPad通过右键单击并选择Set as default来设置默认值.(这样做会强制调试器始终附加到您的查询,这会导致性能成本很低.)
至于为什么Debug.Assert(false)不显示对话框,这是因为LINQPad中尚未实现此行为.通过将以下代码添加到My Extensions,您可以轻松地将其实现为扩展:
public class NoisyTracer : TextWriterTraceListener
{
public static void Install()
{
Trace.Listeners.Clear();
Trace.Listeners.Add (new NoisyTracer (Console.Out));
}
public NoisyTracer (TextWriter writer) : base (writer) { }
public override void Fail (string message, string detailMessage)
{
base.Fail (message, detailMessage);
throw new Exception ("Trace failure: " + message);
}
}
Run Code Online (Sandbox Code Playgroud)
然后,要启用,请按如下方式编写查询:
NoisyTracer.Install();
Debug.Assert (false);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
491 次 |
| 最近记录: |