算溢,或者溢出异常在调试
-
09-06-2019 - |
题
这是怪异的行为。
我们有一个Win32项目作出有德尔斐2007年,它的主机。净运行,并呼吁。净展现新的形式,作为一个过渡时期。
最近,我们已经开始在经历的异常看似随机的位置和我们的代码:算术溢出或下溢。
堆跟踪的一些看起来是这样的:
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
在Visual Studio解决方案,一个最为类库(ie。拉在所有参考文献,它可以),设置一个具体调试程序,有针对性的特尔斐项目的输出。这使我们能够调试。净的代码的视觉工作室,即便在主要大量的程序写入德尔福。
该问题只有发生当运行调试器,不如果我们运行的文件直接(无论是通过资源管理器、快捷方式,或者甚至 Ctrl+F5 内部Visual Studio)。
还有,显然没有间谍软件在机器(因为暗示过 此).
任何其他事情我们可以检查?
编辑: 它看起来像的。净调试器是使这SNaN标志,以及德尔斐调试器,不。我们必须调查这一步,但是现在我接受 @Lorenzo Boccaccia's的答案。
显然解决的
好吧,它看起来像我们最后钉这个问题。这个问题开始发生的,而不具有附加调试器,因为我们的测试,所以我们不得不优先考虑问题的方式。
最后,我们发现一个共同的问题与计算机有问题,他们都是Dell Lattitude D620笔记本电脑有一个更Quadro NVS110米,有一个老司机从系统图像用于提供笔记本电脑,从早在2006年。
我找到一个职位上网,但我失去了url当我入侵了更新所显示的驱动程序,就有一个。网服务崩溃,主要是时机是繁忙的做某事在屏幕上。一种方式再现他的问题是打开一个命令提示C:\和做 DIR /S
只是力大量的画面更新,这将触发的崩溃。
他也有一个选视频卡。
问题在我的机器出现大约每隔2至4创业公司的我们的程序,但在更新后的视频司机我有123成功的创业没有任何问题。(顺便说一句我可以推荐 AutoHotKey 对于这样的东西).
因此它看起来像我们找到的罪魁祸首,旧/车更驱动程序。
更新这个问题,因此,也许有人在将来可以节省一些时间。
现在,如果你能原谅我,我去哭一个角落。
这个诅咒链!
我肯定是这个诅咒链。不早了,我发表上述更新于一位同事的笔记本电脑故障,更新后的视频驱动程序。
不过,我敢肯定这是问题之外,我们应用程序现在,所以它只是仍然要找出哪些特定事情更新。
进一步的更新:Ok,我的机器现在显然是固定的,不是这样的我的同事们的机器。到目前为止,我们已经更新BIOS,芯片驱动程序,目前SP3XP是它的方式。
一个烧伤中的试验将是完成今晚,那里的应用程序,将留下过夜开始,因为该问题出现了要么启动期间,或在第一时间某些它.净码的执行。这个应用程序主要是德尔福Win32程序,但它的主机。净运行时,问题似乎是相关的。净码。当我们"引导"。净运行时,问题可能会出现,或者当我们第一次。净窗口从Win32然后,它也可以出现。
统计学上我准备好了释放这个代码。过夜的应用程序已经开始3051次没有错误,而在此之前我最新的视频司机坠毁,每2至4倍。
促使和找到(!/?)
这个错误-固定的磨难感觉就像去看医生,下面的谈话随之而来的:
Doc: Does this hurt?
Me: No...
Doc: What about now?
我已经刺了戳应用程序和最后,我想我已经找到的东西我们介绍了这个问题。
在我们的程序,我们的主机。净运行时间,从德尔福2007年Win32应用程序,并在我们的胶码我们有以下行(现在):
rc := CorBindToRuntimeEx('v2.0.50727', 'wks',
STARTUP_LOADER_OPTIMIZATION_MULTI_DOMAIN or STARTUP_CONCURRENT_GC,
@clsid, @iid, UnkRuntimeEngine);
两个常量中有最初只是一个0,意思 挑选默认值.这种变化介绍了几个月前该问题已经慢慢爬上我们在此之后。改变是为了鼓励蚂蚁分析器来载我们的Win32应用程序+托管。净运行时为了做到的性能分析,并改变我们介绍了然后回来做这项工作。此外,该问题的算术溢/溢已经慢慢变得更糟,所以我的赌注的问题并没有出现一段时间后的变化,所以它不是归因于任何改变我们做到了。
此外,因为我们只(最初)所看到的问题时,通过运行调试器,我们认为什么是错Visual Studio和/或Delphi。
无论如何,在统计学上现在有一浏览器上的一个画面做重复的滚动向上和向下触发的javascript(显然是需要的,以便触发的错误),然后我已经能够成功地启动应用程序726次0的话,它崩溃5 17次与两个常量存在。
Doc: Does this hurt?
并且不让我们获得成为谁做,改变在第一位。我是肯定的罪魁祸首想留匿名的... 咳嗽
解决方案
一个调试版本连接dll可以汇编与信南的支持,看到 http://blogs.msdn.com/oldnewthing/archive/2008/07/02/8679191.aspx 对于一个这样的例子的问题。
那编造成的初始化的变量,这里可能有一个联dll使snan特征的cpu和忘记,禁止它在返回
其他提示
做了错误的发生,仍会发生,如果你将调试程序启动后的应用程序?