Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# System.Overflow异常-int32太大或太小_C#_Overflow - Fatal编程技术网

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

C# System.Overflow异常-int32太大或太小,c#,overflow,C#,Overflow,我需要一点建议 我有夜间运行的windows服务。在我的开发环境中,它毫无例外地运行,但当我运行它“安装在其他机器上”时,当我早上来时,我会受到System.Overflow异常的欢迎,该异常表示我已将int32设置为过大或过小的值 我仔细地梳理了服务的c#代码,我在所有内容中都有try/catch语句,这些语句应该能够捕获任何错误并将其写入日志,而不会因为这个溢出异常而完全停止服务。但它仍然会发生并停止服务 如果您能提供一些概念性的建议,告诉我是什么导致了这样的错误,我将不胜感激。 您一定错过

我需要一点建议

我有夜间运行的windows服务。在我的开发环境中,它毫无例外地运行,但当我运行它“安装在其他机器上”时,当我早上来时,我会受到System.Overflow异常的欢迎,该异常表示我已将int32设置为过大或过小的值

我仔细地梳理了服务的c#代码,我在所有内容中都有try/catch语句,这些语句应该能够捕获任何错误并将其写入日志,而不会因为这个溢出异常而完全停止服务。但它仍然会发生并停止服务

如果您能提供一些概念性的建议,告诉我是什么导致了这样的错误,我将不胜感激。

  • 您一定错过了try/catch实例,或者错误处理程序中有错误,否则将被处理
  • 在windows中,如果服务以意外方式结束,您可以将其设置为重新启动
首先,让我告诉您,通过打开项目属性,选择“构建”(从左侧菜单),然后选择“高级…”,可以禁用溢出/下溢

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

但这并不能解决问题。。。它只是隐藏了“问题”,如果它是一个问题的话


如果您只想检查零/非零条件,那么在代码的某个地方,在项目设置中禁用溢出可以解决问题,因为即使发生溢出,也会得到一个非零值,而且您的服务将毫无问题地继续。

在整个代码中添加
try/catch
块的问题在于,很容易错过一个位置,因此不会记录异常。更可靠的方法是使用值
AppDomain.UnhandledException
。这将针对当前
AppDomain
中未处理的任何异常触发。您可以将其挂接到日志文件中,希望能够更好地了解错误的来源

AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;

...

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

此外,对于WinForms应用程序:

和WPF:


要获取UI线程上异常的可见性,因为它们未转发到AppDomain.CurrentDomain.UnhandledException。

异常的堆栈跟踪是什么?如果溢出无关紧要,请将远程调试器连接到itOr将发生错误的分配更改为:myint=unchecked(分配);这将使溢流翻滚。但是,您可能希望首先跟踪错误。如果在计算机上放置调试生成,则可以生成stacktrace,而无需执行VS查看或发布生成,但可以包含pdb文件,以便在堆栈跟踪中包含行号。您是默认禁用此功能,还是仅在发布生成中禁用此功能?我希望后者能消除代码中的任何潜在错误,或者你有单元测试来覆盖这一点:),最好在你知道可以使用未检查的关键字imo的地方禁用它。@Mikael Svenson:你是对的,在发布版本中,由于涉及的开销,我禁用了算术溢出/下溢。从来都不知道会有这种情况,但它似乎在默认情况下被禁用。在我的光线跟踪器中,打开它似乎不会产生明显的性能差异,也许JIT只是认为它没有必要。@JulianR:对于GUI代码或不执行密集计算(如数学计算)的代码,您不会注意到任何差异。但是,尝试在求解200000个联立方程组的代码上使用此选项,您将看到!我把实时光线跟踪器归入“计算密集型”类别。还是没什么区别。不是说这些检查对性能没有影响,只是说这些检查似乎根本不存在。