c# – 控制台应用程序打印“失败:”

我有一个控制台应用程序,它读取一些数据,将其填充到类似字典的结构中,操纵它然后制作一些输出文件.

但是,在打印输出时,它有时会打印:

Fail:

它真的不应该在哪里.我在Google上找不到任何东西(搜索的内容并不多),当我在我的解决方案中搜索字符串“fail”时,我找不到任何东西(所以这不是我的代码所做的).

我不知道为什么会发生这种情况,相关的块通常会产生异常,但是我抓住它们,当我使用Console.WriteLine而不是Trace.WriteLine时,它工作正常,但我无法轻易验证这是原因.

我不知道如何解决这个问题.

什么可能导致失败:被打印到控制台?

我如何设置一个断点来阻止它呢?

我甚至在哪里开始想要解决这个问题?

最佳答案 感谢Adriano的熟练预感,我能够怀疑断言是罪魁祸首.

实际上,在打印神秘的Fail:消息时运行的代码块确实调用了这样的断言:

Debug.Assert(myString.Length > 0);

显然,“失败:”应理解为“断言失败”.我可以通过将其更改为:

Debug.Assert(myString.Length > 0, "Assertion failed with myString == \"" + myString + "\".");

这改变了Fail:消息失败:断言失败,myString ==“”并消除了混乱,并让我处理了进一步调试的问题(因为我知道断言是生成失败消息的确切行).

事实证明,在调试模式下,Visual Studio不会中断断言失败,而是简单地将失败消息打印到输出(启用中断会在here中讨论).就我而言,我一直在使用跟踪侦听器,以便我的程序输出将打印到文件和控制台.为此,我使用了以下初始化代码:

    private static void PrepareListeners()
    {
        Trace.Listeners.Clear();

        var logPath = "/path/to/my/file.txt";
        File.Delete(logPath);
        var textListener = new TextWriterTraceListener(logPath);

        var consoleListener = new ConsoleTraceListener(false);
        consoleListener.TraceOutputOptions = TraceOptions.DateTime;

        Trace.Listeners.Add(textListener);
        Trace.Listeners.Add(consoleListener);
        Trace.AutoFlush = true;
    }

然后我用Trace.WriteLine生成输出.似乎跟踪侦听器也在接收断言失败消息. (它们显示在我的日志文件和控制台中.)

点赞