DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: szliyu112358
今日帖子: 53
在线用户: 18
导航: 论坛 -> 数据库专区 斑竹: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都复制过来,毕竟这个是文本的,应该不会有问题, 窗体上的控件全部重新拉过。会不会就没问题了。
有没有人碰过这样的情况,求提点一下。给我一点灵感吧。万分感谢!!!
----------------------------------------------
-
作者:
男 iamdream (银河恒久远,梦想无止境!) ★☆☆☆☆ -
大贡献会员
2020/6/25 11:33:09
1楼: DataSet有没有挂AfterOpen/BeforeOpen/AfterScroll/BeforeScroll之类的事件?如果用了很久都没有问题,忽然出问题了,那么想想你最近有什么变动吗?慢慢缩小范围吧。
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
作者:
男 szyourname (szyourname) ★☆☆☆☆ -
盒子活跃会员
2020/6/25 11:49:38
2楼: 被三体人智子锁死了
----------------------------------------------
-
作者:
女 hecongzhen (令狐**) ★☆☆☆☆ -
普通会员
2020/6/26 13:50:41
3楼: 像这种问题比较难以排查,但是 根据我的经验,不要怀疑是 框架或者delphi的问题。
大部分还是自己的程序有隐藏的bug,在特定的环境下会出现报错。
1 如果程序有多线程操作,请闭上眼睛想一想数据流程,有没可能有同步的地方没有同步到,这个很难查,(需要你对多线程有很深的理解)
2 操作系统的环境是否稳定,这个你可以重装系统试试
3 网络问题 网络是否稳定,加载数据量比较大的时候,网络不稳定也有可能出现bug
4 把一些杀毒软件,防火墙等的影响考虑进去

总之:这种问题很费脑子,不然怎么体现一个人的技术水平高低呢?
----------------------------------------------
-
作者:
男 nevergrief (孤独骑士) ★☆☆☆☆ -
盒子活跃会员
2020/6/27 0:07:44
4楼: 使用MadExcept可以报错具体行数,根本不用动脑筋,先学会如何使用他吧
----------------------------------------------
只有偏执狂才能生存!
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
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上的控件都重新拉。函数过程事件再一个一个的复制过去。现在看上去还行。不报错了。
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行62.5毫秒 RSS