使用跟踪侦听器将调试输出重定向到文件时出现问题

时间:2011-04-06 15:07:20

标签: c# .net debugging redirect tracelistener

我创建了一个调试监听器,使用以下代码将Debug / Console窗口的输出重定向到一个文件(带有一个调用堆栈):

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;
}

但输出不会重定向到我指定的文件,它始终为空。

我从主窗体的构造函数中调用它。我是从问题中调用它的地方吗?

我在这里想要实现的是将调试输出窗口中的异常置于带有调用堆栈的文件中,以便我可以找到它们并进行更正。

更新:经过一些研究后,我得出结论,在Debug TraceListener集合中添加新的Listeners不会重定向调试/控制台的输出。它实际上只是响应WriteWriteLine等方法,默认侦听器也是如此。 问题仍然存在:如何捕获Debug / Console窗口的输出以及如何获取出现在那里的异常的堆栈跟踪?

有人有什么想法吗?

1 个答案:

答案 0 :(得分:2)

这是一篇文章,回答了我的一部分问题: http://www.codeproject.com/KB/trace/DbMonNET.aspx

即。如何捕获Debug / Console窗口的输出。但是,似乎无法从此输出获取堆栈跟踪。从这个角度来看,无论如何它看起来都是一种糟糕的方法。

进一步研究:看起来这些异常正在出现,因为它们是在其他未正确链接的dll中处理的,而是在那里处理它们而不是我的try / catch块。这可能是我应该查看我的错误的地方,即如果有dll引用,我应该添加项目引用。

更多研究 :在Visual Studio主菜单中启用异常中断:调试 - >例外 - >检查您希望应用程序中断的异常类型(公共语言运行时)...没有更好的方法来处理异常。