Adriano の鋭い勘のおかげで、私は主張を犯人として疑うことができました。
実際、謎の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
。トレース リスナーもアサーション エラー メッセージを取得しているようです。(ログファイルとコンソールに表示されます。)