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

本文关键字:文件 问题 重定向 输出 跟踪 侦听器 调试 | 更新日期: 2023-09-27 17:49:17

我已经创建了一个调试侦听器,将输出从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输出窗口中的异常放置在具有调用堆栈的文件中,以便我可以找到它们并纠正它们。

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

有人有什么想法吗?

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

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

。如何捕获调试/控制台窗口的输出。但是,似乎没有办法从这个输出中获得堆栈跟踪。从这个角度来看,这似乎是一个糟糕的方法。

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

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