多亏了阿德里亚诺的直觉,我能够怀疑断言是罪魁祸首。
事实上,打印神秘消息时正在运行的代码块Fail:
确实调用了这样的断言:
Debug.Assert(myString.Length > 0);
显然,“Fail:”应该被理解为“Assertion fail”。我可以通过将其更改为来验证这一点:
Debug.Assert(myString.Length > 0, "Assertion failed with myString == \"" + myString + "\".");
这将Fail:
消息更改为Fail: Assertion failed with myString == ""
并消除了混淆,并让我处理了进一步调试的问题(因为我知道断言是生成失败消息的确切行)。
事实证明,在调试模式下,Visual Studio 不会在断言失败时中断,而是简单地将失败消息打印到输出(此处讨论了启用中断)。就我而言,我一直在使用跟踪侦听器,以便将程序的输出打印到文件以及控制台中。为此,我使用了以下初始化代码:
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
. 跟踪侦听器似乎也在接收断言失败消息。(它们出现在我的日志文件和控制台中。)