gpt4 book ai didi

c# - 控制台应用程序打印 "Fail:"

转载 作者:行者123 更新时间:2023-11-30 12:31:28 26 4
gpt4 key购买 nike

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

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

Fail:

真正不应该的地方。我在 Google 上找不到任何东西(没有太多可搜索的),当我在我的解决方案中搜索字符串“fail”时我也找不到任何东西(所以这不是我的代码在做)。

我不知道为什么会这样,相关 block 确实经常产生异常,但我捕获了它们,当我使用 Console.WriteLine 而不是 Trace.WriteLine 它工作正常,尽管我无法轻易验证这就是原因。

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

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

如何设置断点使其停止?

我该从哪里着手解决这个问题?

最佳答案

多亏了阿德里亚诺敏锐的直觉,我才能够怀疑断言是罪魁祸首。

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

Debug.Assert(myString.Length > 0);

显然,“失败:”应理解为“断言失败”。我可以通过将其更改为来验证这一点:

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

这将 Fail: 消息更改为 Fail: Assertion failed with myString == "" 并消除了困惑,并为我提供了进一步调试问题的句柄(因为我知道断言是生成失败消息的确切行)。

事实证明,在 Debug模式下,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 生成输出。跟踪监听器似乎也在接收断言失败消息。 (它们出现在我的日志文件和控制台中。)

关于c# - 控制台应用程序打印 "Fail:",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13472042/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com