繁体   English   中英

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

[英]System.Overflow Exception - int32 is too large or small

我需要一些建议。

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

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

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

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

首先,让我告诉您,可以通过打开项目属性,选择“Build”(从左侧菜单),然后选择“Advanced ...”来禁用溢出/下溢。

顺便说一句,我一直这样做,因为它增加了开销,我不希望在我的科学应用程序中。 手动,然后我控制事物。

但这并没有解决问题......只是隐藏了“问题”,如果这是一个问题。

如果您只关心在代码中的某处检查零/非零条件,在项目设置中禁用溢出可以解决问题,因为即使发生溢出,您也会获得非零值,并且您的服务会继续运行而不会出现问题。

在整个代码中添加try/catch块的问题是很容易错过一个地方,因此不会记录异常。 一种更强大的方法是使用值AppDomain.UnhandledException 这将触发当前AppDomain未处理的任何异常。 您可以挂钩来写入您的日志文件,并希望更好地了解错误发生的位置

AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;

...

void OnUnhandledException(object sender, UnhandledExceptionEventArgs e) {
 // Log the exception here
}

此外,对于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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM