|
|
导航: |
论坛 -> 数据库专区
斑竹:liumazi,waterstone |
|
作者: |
fk_kof (beginner) |
★☆☆☆☆ |
-
|
普通会员 |
|
2020/6/25 8:04:10 |
标题: |
执行稳定的程式突然报内存地址错误,灾难性失败。求提点 |
浏览:1665 |
|
加入我的收藏 |
楼主: |
我可能被三体人诅咒了。颠覆了认识的常识。 我有一个执行了很久的window程式,一直都正常,前天突然报内存错误。一碰就死。找不出原因。 输出文件:win32 DLL 开发系统:win10 数据库驱动:dbexpress + devart 数据库:mssql2014 数据感知控件:infopower 问题描述: 1.我在主窗体弹了一个子窗体,里面有5个dblookupdlg控件。其中2个只要点...弹框就报内存地址错误。然后整个程式就挂了。另外3个怎么点都没有问题。 2.另外一个子窗体,有用simpledataset执行一个复杂的存储过程,返回一个表。debug追到只要open就报错。一直试到因为挂了dbgrid显示,如果去掉dbgrid就没有问题。 上面两点看上去是infopower控件有问题。可是我重新开一个工程,新的form去做上面的动作,又没有问题。 3.我在子form有操作主form的控件和函数。其中有个函数一直报灾难性失败。调试发现是有个函数在dataset.open的时候报错。大概是下面这样的 with dataset do begin close; 给SQL open; 赋值 close; 给SQL open;-------这里挂掉 赋值 end 这个我试到最后,发现如果不在子窗体调用,就不报错。只有子窗体调用这个函数的时候才会出错。 4.还有一些其他的Dataset.open,不是每一次都报错,调试很多次,是不是的来一次灾难性失败。 这种都不一定报错的,感觉是数据库驱动有问题,可是用新工程,新form怎么做都不报错。
而且上面说的情况10次有9次有问题,还有一次可能过的去。直到业务执行完毕,数据全部存档完毕,也没报错。但是就在我开心的时候, 下一次又挂了。
各位大佬,请给点灵感。我该怀疑哪里有问题? 我有几百个这样的程式,只有这一个报错。这里面的写法其他程式都用了很多,现在都没有问题。只有这个。 要说是infopower有问题,为什么其他程式没有问题,而且单独开新的工程也没问题。 要说是数据库驱动dbexpress+devart有问题,那么为什么不定的dataset.open的时候有问题,还有大部分的Dataset没有问题。 要说是MSSQL有问题,可是数据能取出,其他的程式也没有报错。最近数据库也没更新啥的。
这一切都快颠覆了我的认知。平时一直做的,而且一直平稳运行的,突然就不行了。 我都搞了2天了,一点头绪都没有,我在想如果我开一个新的工程,把code都复制过来,毕竟这个是文本的,应该不会有问题, 窗体上的控件全部重新拉过。会不会就没问题了。 有没有人碰过这样的情况,求提点一下。给我一点灵感吧。万分感谢!!!
----------------------------------------------
- |
作者: |
|
2020/6/25 11:33:09 |
1楼: |
DataSet有没有挂AfterOpen/BeforeOpen/AfterScroll/BeforeScroll之类的事件?如果用了很久都没有问题,忽然出问题了,那么想想你最近有什么变动吗?慢慢缩小范围吧。
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
|
作者: |
|
2020/6/25 11:49:38 |
2楼: |
被三体人智子锁死了
----------------------------------------------
-
|
作者: |
|
2020/6/26 13:50:41 |
3楼: |
像这种问题比较难以排查,但是 根据我的经验,不要怀疑是 框架或者delphi的问题。 大部分还是自己的程序有隐藏的bug,在特定的环境下会出现报错。 1 如果程序有多线程操作,请闭上眼睛想一想数据流程,有没可能有同步的地方没有同步到,这个很难查,(需要你对多线程有很深的理解) 2 操作系统的环境是否稳定,这个你可以重装系统试试 3 网络问题 网络是否稳定,加载数据量比较大的时候,网络不稳定也有可能出现bug 4 把一些杀毒软件,防火墙等的影响考虑进去
总之:这种问题很费脑子,不然怎么体现一个人的技术水平高低呢?
----------------------------------------------
-
|
作者: |
|
2020/6/27 0:07:44 |
4楼: |
使用MadExcept可以报错具体行数,根本不用动脑筋,先学会如何使用他吧
----------------------------------------------
只有偏执狂才能生存!
|
作者: |
|
2020/6/28 10:31:32 |
5楼: |
楼上的 工具很强大 但是 带源码 DEBUG 的时候,CALLSTACK 也可以定位到行。 如果 无源码可以定位,就去看看你的 DELPHI 是不是没打补丁。
----------------------------------------------
(C)(P)Flying Wang
|
作者: |
fk_kof (beginner) |
★☆☆☆☆ |
-
|
普通会员 |
|
2020/6/29 13:19:50 |
6楼: |
这些第三方控件都没有源码,能定位的到?
我做了件挫事,重新建了个工程,所有form上的控件都重新拉。函数过程事件再一个一个的复制过去。现在看上去还行。不报错了。
----------------------------------------------
-
|
|