Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.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
Visual studio 调试期间出现算术下溢或溢出异常_Visual Studio_Debugging_Exception_Random - Fatal编程技术网

Visual studio 调试期间出现算术下溢或溢出异常

Visual studio 调试期间出现算术下溢或溢出异常,visual-studio,debugging,exception,random,Visual Studio,Debugging,Exception,Random,今天是行为怪异的日子 我们有一个用Delphi2007制作的Win32项目,它托管.NET运行时并调用.NET来显示新表单,作为过渡期的一部分 最近,我们开始在代码中看似随机的位置和点遇到异常:算术溢出或下溢 其中一个的堆栈跟踪如下所示: at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) at System.Windows.Forms.Application.ComponentManager.Sy

今天是行为怪异的日子

我们有一个用Delphi2007制作的Win32项目,它托管.NET运行时并调用.NET来显示新表单,作为过渡期的一部分

最近,我们开始在代码中看似随机的位置和点遇到异常:算术溢出或下溢

其中一个的堆栈跟踪如下所示:

at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.RunDialog(Form form)
at System.Windows.Forms.Form.ShowDialog(IWin32Window owner)
at System.Windows.Forms.Form.ShowDialog()
at Gatsoft.Gat.UI.Windows.Forms.Remanaging.RemanageForm.DelphiOpenInNewMode(String employeeCode, String departmentCode, DateTime date) in C:\Dev\VS.NET\Gatsoft\Gatsoft.Gat.UI.Windows\Forms\Remanaging\RemanageForm.Delphi.cs:line 67
在VisualStudio解决方案中,最外层的类库之一(即,可以提取所有引用)设置了一个特定的调试程序,用于Delphi项目输出。这允许我们从VisualStudio调试.NET代码,即使程序的主要部分是用Delphi编写的

只有在从调试器运行时才会出现问题,而不是直接运行exe文件(通过资源管理器、快捷方式,甚至Visual Studio中的Ctrl+F5)

这台机器上显然没有间谍软件(如图所示)

还有什么可以查的吗


编辑:看起来.NET调试器正在启用此SNaN标志,而Delphi调试器没有。我们还需要进一步调查,但现在我接受他的答案

显然解决了 好的,看来我们终于解决了这个问题。对于我们的测试人员来说,问题在没有附加调试器的情况下开始出现,因此我们必须将问题的优先级提高

最后,我们发现了出现问题的机器的一个常见问题,它们是戴尔Lattitude D620笔记本电脑,配备NVIDIA Quadro NVS 110M,从2006年开始,使用系统映像中的旧驱动程序来配置笔记本电脑

我在网上找到了一篇帖子,虽然我在重新启动以更新显示驱动程序时丢失了url,但是有一个.NET服务崩溃了,主要是当机器在屏幕上忙着做一些事情时。重现他的问题的一种方法是打开C:\的命令提示符,然后执行
DIR/S
来强制进行大量屏幕更新,这将触发崩溃

他也有一张NVIDIA视频卡

我的机器上的问题几乎每2-4次启动我们的程序就出现一次,但在更新视频驱动程序后,我已经有123次成功启动,没有任何问题。(顺便说一句,我可以推荐这些东西)

看来我们找到了罪魁祸首,一个老掉牙的NVIDIA司机

更新了这个问题,以便将来可能有人可以节省一些时间

现在,如果你不介意的话,我要去角落里哭了

倒霉! 我一定是倒霉了。我刚发布上述更新,同事的笔记本电脑就在更新视频驱动程序后出现故障

不过,我敢肯定,这是我们应用程序之外的一个问题,所以现在还需要确定要更新哪些特定内容


进一步更新:好的,我的机器现在显然已经修好了,而我的同事的机器却没有修好。到目前为止,我们已经更新了BIOS、芯片组驱动程序,目前SP3 for XP即将推出

今晚将进行老化测试,应用程序将在一夜之间启动,因为问题可能是在启动过程中出现的,也可能是在第一次执行某些WinForms.NET代码时出现的。此应用程序主要是一个Delphi Win32应用程序,但它承载.NET运行时,问题似乎与.NET代码有关。当我们“引导”.NET运行时时,问题可能会出现,或者当我们从Win32启动第一个.NET窗口时,问题也会出现


从统计学上讲,我现在已经准备好发布这段代码了。整个晚上,应用程序已经启动3051次,没有出现错误,而在我更新视频驱动程序之前,它每2-4次就会崩溃一次

刺探并发现(!/?) 这种修复bug的痛苦感觉就像是去看医生,接下来是以下对话:

Doc: Does this hurt?
Me: No...
Doc: What about now?
我已经戳了戳这个应用程序,最后我想我已经发现了我们所做的一些事情,它引入了这个问题

在我们的应用程序中,我们从Delphi 2007 Win32应用程序中托管.NET运行时,在我们的粘合代码中,我们有以下行(现在):

中间的两个常数原来只有0,意味着选择默认值。这一变化是在几个月前引入的,此后,这一问题逐渐向我们袭来。引入此更改是为了鼓励ANTS profiler加载我们的Win32 application+托管的.NET运行时,以便进行性能分析,而我们当时引入的更改使之起作用。此外,算术溢出/下溢的问题已经慢慢变得更严重,所以我打赌这个问题在更改后的一段时间内没有出现,所以它不是由于我们所做的任何更改造成的

另外,由于我们(最初)在运行调试器时才看到问题,因此我们认为Visual Studio和/或Delphi有问题

不管怎样,从统计上看,现在一个屏幕上的浏览器在javascript触发下反复上下滚动(显然是触发bug所必需的),那么我已经能够在调用中使用0成功启动应用程序726次,使用其中的两个常量,17次中有5次崩溃

Doc: Does this hurt?

我们先不要讨论是谁做出了这种改变。我肯定罪犯想匿名。。。cough

如果在启动应用程序后附加调试器,是否仍会发生错误?

可以使用信号nan支持编译链接dll的调试版本,请参阅此问题的示例


heisenbug是由未初始化的变量引起的,这里可能有一个链接的dll启用cpu的snan功能,并在返回时忘记禁用它

这很重要的原因是调试器启动的进程使用一个特殊的“调试堆”。再见,多亏了你们,我明天再查。这确实是一个海森堡,而且是随机的,因为我可以在它出现之前进行一些调试周期
Doc: Does this hurt?