System.Overflow异常 - int32太大或太小

时间:2010-04-02 14:40:45

标签: c# overflow

我需要一些建议。

我有晚上运行的Windows服务。在我的开发环境中,它运行无一例外,但是当我运行它“安装在其他机器上”时,当我早上来时,我受到了System.Overflow异常的欢迎,该异常表明我已将int32设置为价值太大或太小。

我仔细梳理了服务的c#代码,并且我已经尝试/捕获所有内容的语句,应该捕获任何错误并将其写入日志,而不会因为此溢出异常而完全停止我的服务。但仍然会发生并停止服务。

我很欣赏任何关于如何确定导致错误的概念建议。

4 个答案:

答案 0 :(得分:1)

  • 你一定错过了一个try / catch实例,或者你的错误处理程序中有错误,或者它会被处理。
  • 在Windows中,您可以将服务设置为在意外结束时重新启动。

答案 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。