我有一个c#程序会抛出NullReferenceException()
。当我在我的Vista机器上启动它时,它给出了熟悉的屏幕“Foo已经停止工作”。我可以轻松点击“详细信息”以查看出现了什么问题。在一台XP机器上根本没有警告:程序刚退出,而在另一台XP上,我得到“Foo遇到问题......”的消息。有没有办法可以改变这个(XP的)设置?
此外,我想将此错误消息写入日志文件,因此如果其他人使用我的程序,我可以看到出了什么问题。有没有办法可以将未捕获的异常发送到文件?
编辑:我希望这可以用于整个项目,而不仅仅是关键部分。我不认为建议的做法是将整个程序包装成一个大的try...catch
,或者是它?
答案 0 :(得分:3)
请查看:UnhandledException和ThreadException。
您可以将错误记录在文件中,或使用Windows logging facilities。
答案 1 :(得分:1)
如果您的目标是WPF,则可以使用DispatcherUnhandledException
来捕获代码中未处理的任何异常。否则,请确保使用try-catch块捕获任何可预见的异常。
在DispatcherUnhandledException
的委托中或在try-catch块的catch
部分中,您可以调用将错误消息写入日志文件的函数。
答案 2 :(得分:1)
在您认为会失败的所有组件周围添加try catch块,并通过将错误数据流式传输到日志文件来处理这些块
答案 3 :(得分:0)
请看这个链接:
http://blogs.msdn.com/csharpfaq/archive/2006/03/27/562555.aspx
这将帮助您启动并运行。
使用:
try
{
// Your code here
}
catch (Exception ex)
{
// This will tell you the Exception
Console.WriteLine("Exception type: {0}", ex.GetType());
// or, if you use the example from the link above
LogMessageToFile(String.Format("Exception type: {0}", ex.GetType));
}
答案 4 :(得分:0)
您可以将代码包装在
中try
{
// Your code
}
catch (Exception ex)
{
streamWriter.WriteLine("your custom exception text, stack trace:" + ex.StackTrace.ToString());
MessageBox.Show("Your custom exception text, Stack Trace:" + ex.StackTrace.ToString());
}
并使用指向您选择的日志文件的流编写器对象自行处理反馈。
如果是winforms应用程序,您可以添加一个消息框或自定义对话框,告知用户发生了什么,如上所示。