从崩溃的EXE中查找堆栈跟踪日志

时间:2014-09-03 05:02:16

标签: c#

我正在运行一个c#控制台应用程序。我发布了它,因为我想在几台计算机上进行一些测试。

应用程序有时会导致错误,并且窗口弹出窗口会强制我关闭应用程序,从而关闭控制台,然后我才能查看相关的异常。

有没有什么方法可以让我看到堆栈跟踪日志类似于在Visual Studio中运行它?我认为这可能是通过Windows事件查看器实现的,但我并不完全确定。或者至少允许控制台可见,并且在我确认存在错误时不会自动关闭。

1 个答案:

答案 0 :(得分:1)

你可以做你所提到的所有事情。例如要查看控制台窗口中的错误,可以在代码周围放置一个try catch块并调用Console.WriteLine()和Console.ReadLine()方法。

还有stacktrace.tostring()方法 - 例如

http://msdn.microsoft.com/en-us/library/system.diagnostics.stacktrace.tostring(v=vs.110).aspx

即使您将Console.WriteLine()放入代码中,控制台应用程序也会自动关闭。你需要的是最后的Console.ReadLine(),也许是你的try catch块的finally部分。

这样,控制台窗口将保持打开状态。

您还可以通过控制台ap将事件写入事件日志,并在事件查看器中查看它们。

这是通过使用System.Diagnostics命名空间的EventLog.CreateEventSource方法完成的。以下链接:

http://support.microsoft.com/kb/307024

另一种方法是使用system.IO将行写入日志文件(例如.txt文件),因此如果进程在深夜运行,您可以回顾错误。在这种情况下,您可以使用以下代码:

public static void LogMessage(string message)
    {
        TextWriter textWriter = new StreamWriter("download.log", true);
        textWriter.WriteLine(message);
        textWriter.Close();
    }

然后在你的例外中:

catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            Logging.LogMessage(ex.Message);
        }