怪事,调试模式下运行正常,直接执行EXE报错 ( 积分: 100 )

  • 主题发起人 主题发起人 zwwhb
  • 开始时间 开始时间
Z

zwwhb

Unregistered / Unconfirmed
GUEST, unregistred user!
做新项目,修改了别人的一个程序,在调试模式下运行很正常,直接执行EXE时报ntdll.dll的内存地址错误。直接运行新的EXE程序连接以前老项目的数据库时也运行正常,找了一天也没找出原因(因为调试是正常的),开始以为是VCLSKIN的原因,将这个删除了同样也报错,真是怪事了。顺便说一下,这个程序主要是基于SOCKET通讯
 
Ctr+F9 重新编译生成一个exe 再直接运行看看有没有问题
 
试了,没有用。难道说调试运行的过程中内存资源会自动释放?而直接运行就无法释放占用的资源?
 
能说详细点吗?我现在也在做socket相关的程序,调试时数据传输较慢,直接运行时数据传输较快,我估计你应该是接收缓冲区太小,以至于造成内存溢出.关于数据通讯的用调试模式和直接运行,差异是非常大的.
 
是不是用了多线程?
 
报错的地方不只是数据传输的地方,我用SOCKET传输图象文件时(tif多页文件,分页传输),有时候遇到传过来的图象文件在屏幕上显示是全黑的,然后就报错了。起初以为是有对象没有释放,造成内存泄露,后来我把所有的create和new语句都查出来了,没释放的对象都释放了,但还是报错。
 
bulid all下,试试看,还有,文件路径是不是有问题,还有,你把SOCKET注册一下,用REGSVR32 注册一下哪个什么.OCX文件
 
我碰到过一个类似的问题。
是“把Word中的某些内容拷贝到粘贴板上再读入自己程序的TRichEdit中”,调试时运行正常,但运行.exe文件就出问题。后来发现在运行“拷到粘贴板”命令后不能马上读取,而应该延时半秒钟。
不知你的问题是否类似、
 
我的估计不是,因为我虽然是打开了delphi运行的程序,但是却没选择断点调试,是跟正常的运行一样的
 
你的问题是变量(内存)初始化(赋值)的问题;
在Delphi IDE中运行, Delphi为你的变量自动赋的初始值与外部环境运行时变量的初始值(可能时随机的)不一样;
你可以查查相关的变量
 
在Delphi IDE中运行,不论是否设置断点,其速度都比直接运行.exe文件慢。
你可以把大家提供的思路都拿来试试,死马当活马医呗。

继续关注此问题
 
我以前经常与到这个问题,原因出在控件上,如infoprower控件
 
去看雪论坛下一个OD(OllyDbg)吧,不需要安装,F7步入/F8步过方式跟踪,看走到哪个函数时调用了ntdll.dll中的 ZwRaiseException , 按'-'号可以往回查
 
后退
顶部