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

The*_*yan 5 .net c# 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;
}
Run Code Online (Sandbox Code Playgroud)

但输出不会重定向到我指定的文件,它总是为空.

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

我在这里尝试实现的是将调试输出窗口中的异常放在带有调用堆栈的文件中,以便我可以找到它们并更正它们.

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

有人有主意吗?

The*_*yan 2

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

即如何捕获调试/控制台窗口的输出。但是,似乎无法从此输出中获取堆栈跟踪。从这个角度来看,无论如何,这似乎都是一个糟糕的做法。

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

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