我需要一些建议。
我有晚上运行的Windows服务。在我的开发环境中,它运行无一例外,但是当我运行它“安装在其他机器上”时,当我早上来时,我受到了System.Overflow异常的欢迎,该异常表明我已将int32设置为价值太大或太小。
我仔细梳理了服务的c#代码,并且我已经尝试/捕获所有内容的语句,应该捕获任何错误并将其写入日志,而不会因为此溢出异常而完全停止我的服务。但仍然会发生并停止服务。
我很欣赏任何关于如何确定导致错误的概念建议。
答案 0 :(得分:1)
答案 1 :(得分:1)
首先,让我告诉您,可以通过打开项目属性,选择“Build”(从左侧菜单),然后选择“Advanced ...”来禁用溢出/下溢。
顺便说一下,我一直这样做,因为它增加了开销,我不希望在我的科学应用程序中。手动,然后我控制事物。
但是这并没有解决问题......如果这是一个问题,它只是隐藏了“问题”。
如果您只关心代码中的零/非零条件,在项目设置中禁用溢出可以解决问题,因为即使发生溢出,您也会获得非零值,并且您的服务会继续运行而不会出现问题。
答案 2 :(得分:1)
在整个代码中添加try/catch
块的问题是很容易错过一个地方,因此不会记录异常。一种更强大的方法是使用值AppDomain.UnhandledException
。这将触发当前AppDomain
内未处理的任何异常。您可以将其挂钩到您的日志文件中,并希望更好地了解错误发生的位置
AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
...
void OnUnhandledException(object sender, UnhandledExceptionEventArgs e) {
// Log the exception here
}
答案 3 :(得分:1)
此外,对于WinForms应用程序:
http://msdn.microsoft.com/en-us/library/system.windows.forms.application.threadexception.aspx
和WPF:
http://msdn.microsoft.com/en-us/library/system.windows.application.dispatcherunhandledexception.aspx
要了解UI线程上的异常,因为它们不会转发到AppDomain.CurrentDomain.UnhandledException。