我在用那个可以代替Winsock控件的CSocketMaster类编写一个程序,好不容易解决了支持中文和支持外网的问题,结果又出现一个头疼的问题:在VB的IDE中调试时完全正常,但是编译为exe运行时出现错误被windows的数据执行保护(DEP)关闭--先是弹出DEP的窗口,点确定后我的应用程序弹出那个著名的“遇到问题需要关闭”的窗口,点确定后程序退出,没有更详细的错误信息,估计是对限制的内存执行了写操作。由于调试时正常,所以我现在连什么地方出错的都不知道,我尝试在运行时把可能出错的过程名称写入log文件以供分析,但是根本写不进去,可能是这些过程之间的执行时间间隔太小的原因。大家给想想办法,这样的错误应该怎么来调试啊?
解决方案 »
- 如何让VB产生6位随机数,每位都是A-Z,0-9并排开O,I
- 请教关于MsFlexGrid的使用方法
- 求救用ADO如何添加记录到DataGrid控件中...
- richtext问题之二
- 怎样能够监测网络的流量
- 急!!!哪位有关于ado链接远程sqlserver数据库的资料能不能给小弟一份,在此先谢了!
- 请教一个简单的问题!
- 帮忙看看这是什么??多方打问无结果,怪哦。。
- 寻求兼职PDA开发高手,开发无线点菜系统,后台数据库MS SQLSERVER 2000,PDA操作系统pocket pc 2003..
- 紧急求教高手中的高手,请指教!!!!
- Hook NtQuerySystemInformation
- 高手帮帮忙!!!!
那个类模块太长了,看起来都很吃力,调试就更没有头绪了,现在我正把执行到的类中每个sub和function都print到窗体上,看看到底能执行到哪一步再说,唉!这可是个体力活啊-_-!!
现在已经知道是在调用完类的connect方法以后马上出现了这个错误,应该就是这个connect的问题,因为我是在一个timer中调用connect的,调用完以后一段时间内根本没有其他操作,但是通过我print出来的东西来看,这个connect已经执行完了,不知道具体是那个语句导致了这个错误。
我当前的DEP设置就是"仅为基本windows程序和服务启用DEP”,而且今早晨我又在办公室的机子上试验了一下,完全相同的系统版本和DEP设置,连杀毒软件也是相同的,竟然不出现错误了,这两台机子最明显的差别就是配置,我家里内存是2G的,而办公室的是256M的,难道是这个原因?
00172CD2 jae 00172CCE
00172CD5 xchg eax,ebx
00172CD6 jae 00172C93
00172CD9 nop
00172CDA jae 00172CCA
00172CDD jbe 00172D43
00172CDF jae 00172C65
00172CE1 cwde
00172CE2 jae 00172CF0
00172CE5 xchg eax,ecx
00172CE6 jae 00172CF4
00172CE9 xchg eax,ecx
00172CEA jae 00172C87
00172CED xchg eax,esp
00172CEE jae 00172CE3
00172CF1 xchg eax,esp
00172CF2 jae 00172D4D
00172CF5 xchg eax,esp
00172CF6 jae 00172CF9
00172CF9 add byte ptr [eax],al
00172CFB add byte ptr [ebx],dh
00172CFD xchg eax,ebp
00172CFE jae 00172CB1
00172D01 xchg eax,edx
00172D02 jae 00172CEE
00172D05 xchg eax,esi
00172D06 jae 00172D2B
00172D09 xchg eax,edi
00172D0A jae 00172D12
00172D0D xchg eax,ebx
00172D0E jae 00172D29
00172D11 add byte ptr [esi],dl
00172D13 add byte ptr [ecx+eax],ah
00172D16 or al,byte ptr [eax]
00172D18 pop eax
00172D19 push eax
00172D1A push eax
00172D1B push ebp
00172D1C mov ebp,esp
00172D1E push edi
00172D1F push ebx
00172D20 push ecx
00172D21 push edx
00172D22 xor eax,eax
00172D24 jmp 00172D34
00172D26 call 01172D2B
00172D2B cmp eax,2
00172D2E je 00172D52
,谢谢老马!
你说的用冰刃查看内存,我看不懂啊-_-!!
不过既然我那个简单的测试程序编译后没问题,说明这个类模块本身应该没什么问题,但是可以肯定问题就出在这个类模块身上,因为换成winsock控件后问题就没有了,所以最大的可能是这个类模块跟我的应用程序中的某些东西有冲突,我再用排除法一点点减少代码试试看。
虽然找到了原因,但是打死我也弄不明白这跟那个执行connect方法造成内存写错误有什么联系,VB6真TMD会捉弄人,简直不按路来啊!
谢谢大家的关注和帮助,结贴!