我已经创建了一个调试听者重定向从调试/控制台窗口到文件输出(带有调用栈)调试输出重定向到一个文件,使用以下代码:问题使用跟踪侦听
void SomeMethod()
{
// Create a file for output .txt.
Stream debugFile = File.Create(fileName);
// create TextWriterTraceListener named "file"
TextWriterTraceListener debugWriter = new TextWriterTraceListener(debugFile, "file");
// add to debug listeners
Debug.Listeners.Add(debugWriter);
// set callstack to be shown
Debug.Listeners["file"].TraceOutputOptions |= TraceOptions.Callstack;
// set auto-flush
Debug.AutoFlush = true;
}
但输出不会重定向到我指定的文件,它总是空的。
我从我的主窗体中的构造函数调用它。是我从一个问题中调用它的地方?
我在这里想要实现的是将调试输出窗口中的异常放置在具有调用堆栈的文件中,以便我可以找到并更正它们。
UPDATE:经过一番研究,我得出这样添加新TraceListener
到Debug Listeners
收集不重定向从调试/控制台输出结论。它实际上只是响应Write
,WriteLine
等方法,就像缺省侦听器一样。 问题仍然存在:如何捕获Debug/Console窗口的输出以及如何获取出现在那里的异常的堆栈跟踪?
任何人有任何想法?
你确定你应该添加到Debug.Listeners?调用Console.WriteLine和Debug.WriteLine会产生不同的行为。如果您将侦听器添加到调试中,但调用控制台,则可能会导致您正在报告的问题。 – JustLoren 2011-04-06 15:21:07
@JustLoren - 我不确定你的意思。我在这里要做的是在Visual Studio的调试控制台窗口中将相同的输出传输到一个文件,但是对于发生的每个异常都有一个调用堆栈。 – TheBoyan 2011-04-06 15:27:53
您应该尝试通过调用您的函数来设置它,然后调用Debug.WriteLine(“Debugger Initialized”)来手动写入您的Debug侦听器。这应该验证一切正常。如果您只是依赖框架,则无法确定输出窗口实际正在监听哪个流。 – JustLoren 2011-04-06 15:29:18