我的软件在编译和调试的时候也没什么错误,有时候运行几个小时,有时候运行一个晚上,有时候运行一天或者几天以后,程序就会自动退出,因为我的程序需要的是连续不断的全天工作,与设计初衷相去甚远,我自己也在关键的地方写了些工作日志以期记录下退出的地方,结果还是检测不到在那里退出,也不是内存泄露的问题,内存的也没有涨。虽然用了第三方的SDK,但是用其他语言(VC)做出来没有问题。我用的是DELPHI。也深入的和开发第三方的SDK的人员交流过,SDK也没有问题,因为这个第三方的SDK用的很广。
请大家指点一下!或者告诉我一些比较有效的工具。谢谢!

解决方案 »

  1.   

    我用过boundschecker等。也还没找到退出的地方。
    准备用codeside,但是在装codesite的DPK的时候,总是装不进去。
    网上下载下来的都不行,如果那位朋友有可以装的起的可以给我一份。谢谢。
    我自己写了一个类似codesite的东西,因为这个东西不可能在系统里面每个地方都加,
    只能在一些关键的地方加,结果还是找不到程序在那里退出的。所以很忧闷。
      

  2.   

    设置程序使用debug的dcu,并设置编译时包含调试信息,然后用boundcheck检查。用Boundcheck会找到delphi的程序有一大堆内存泄漏的,要找真正有用的信息比较吃力。
    也可以用log文件,或是去除部分可疑功能后再运行程序来检查。
    另,对于需要不断申请、释放内存的操作,建议自己预先分配一定量的内存,今后就直接使用这些内存进行操作,即自己管理部分内存,避免有可能产生的内存碎片。。我当时写的一个程序,客户使用后报告说平均每使用一个月就死机一次(用的是win98),他们还以为是我故意做的陷阱呢,查了好久,最后终于发现是在一个地方CreateProcess后没有释放handle造成的,胸闷啊。。
      

  3.   

    这个是我用bandschecker测试的时候,软件退出是留下的东西。
    我现在估计错误和线程有关系。但是我找不到是那一个线程。又不能全部屏蔽完。
    这都是我已经屏蔽了一些线程以后的提示了。我找不到原代码在那里有问题。
    希望高手提示。用delphi的调试系统调试的时候,自动退出的时候去看CPU,就已经到了
    NTDLL。DLL里面的触发异常了。
    CREATE_PROCESS: 00400000
    LOAD_DLL  base:77F80000  ntdll.dll
    LOAD_DLL  base:77E60000  KERNEL32.dll
    LOAD_DLL  base:77DF0000  USER32.dll
    LOAD_DLL  base:77F40000  GDI32.dll
    LOAD_DLL  base:796D0000  ADVAPI32.dll
    LOAD_DLL  base:786F0000  RPCRT4.dll
    LOAD_DLL  base:77990000  OLEAUT32.dll
    LOAD_DLL  base:77A30000  ole32.dll
    LOAD_DLL  base:79A90000  MPR.dll
    LOAD_DLL  base:777E0000  VERSION.dll
    LOAD_DLL  base:75950000  LZ32.dll
    LOAD_DLL  base:77B30000  COMCTL32.dll
    LOAD_DLL  base:777C0000  WINSPOOL.DRV
    LOAD_DLL  base:78F90000  SHELL32.dll
    LOAD_DLL  base:63180000  SHLWAPI.dll
    LOAD_DLL  base:76AF0000  comdlg32.dll
    LOAD_DLL  base:78000000  MSVCRT.dll
    LOAD_DLL  base:77530000  WINMM.dll
    LOAD_DLL  base:10000000  tmSDK.dll
    LOAD_DLL  base:00230000  tmman32.dll
    LOAD_DLL  base:74FD0000  WSOCK32.dll
    LOAD_DLL  base:74FB0000  WS2_32.dll
    LOAD_DLL  base:74FA0000  WS2HELP.dll
    LOAD_DLL  base:75100000  NETAPI32.dll
    LOAD_DLL  base:797B0000  Secur32.dll
    LOAD_DLL  base:75150000  NETRAP.dll
    LOAD_DLL  base:750E0000  SAMLIB.dll
    LOAD_DLL  base:77930000  WLDAP32.dll
    LOAD_DLL  base:77960000  DNSAPI.dll
    LOAD_DLL  base:00630000  hie_mp4play.dll
    LOAD_DLL  base:6A1A0000  MSVFW32.dll
    LOAD_DLL  base:72760000  DDRAW.dll
    LOAD_DLL  base:72800000  DCIMAN32.dll
    LOAD_DLL  base:75540000  DSOUND.dll
    LOAD_DLL  base:02640000  G729Dll.dll
    LOAD_DLL  base:75E00000  IMM32.dll
    LOAD_DLL  base:0C000000  BCCORE.DLL
    LOAD_DLL  base:5B3F0000  SYMENGNT.dll
    LOAD_DLL  base:5B2A0000  bckproj.dll
    LOAD_DLL  base:5B260000  BCKMOD.dll
    LOAD_DLL  base:5B250000  BCKLog.dll
    Username: Administrator
    Machine: DSOFT
    Date: 12/31/03 14:23:03
    LOAD_DLL  base:6C330000  LPK.dll
    LOAD_DLL  base:65D20000  USP10.dll
    LOAD_DLL  base:75960000  MMDRV.dll
    UNLOAD_DLL (MMDRV.dll) base: 75960000
    OutDbStr: 
    tmman32:Version[5.2.0]
    OutDbStr: tmman32:DLLInitialize:GetVersionEx:Maj[5]:Min[0]:Bld[893]:PID[2]
    CREATE_THREAD
    CREATE_THREAD
    LOAD_DLL  base:6DD30000  ShellHook.dll
    LOAD_DLL  base:68E90000  OLEPRO32.DLL
    CREATE_THREAD
    CREATE_THREAD
    CREATE_THREAD
    CREATE_THREAD
    CREATE_THREAD
    CREATE_THREAD
    CREATE_THREAD
    CREATE_THREAD
    CREATE_THREAD
    CREATE_THREAD
    CREATE_THREAD
    CREATE_THREAD
    CREATE_THREAD
    CREATE_THREAD
    CREATE_THREAD
    CREATE_THREAD
    CREATE_THREAD
    CREATE_THREAD
    CREATE_THREAD
    LOAD_DLL  base:77800000  RNR20.dll
    LOAD_DLL  base:77300000  iphlpapi.dll
    LOAD_DLL  base:774E0000  ICMP.dll
    LOAD_DLL  base:772E0000  MPRAPI.dll
    LOAD_DLL  base:77370000  ACTIVEDS.dll
    LOAD_DLL  base:77340000  adsldpc.dll
    LOAD_DLL  base:777F0000  rtutils.dll
    LOAD_DLL  base:6D990000  SETUPAPI.dll
    LOAD_DLL  base:794D0000  USERENV.dll
    LOAD_DLL  base:774A0000  RASAPI32.dll
    LOAD_DLL  base:77480000  rasman.dll
    LOAD_DLL  base:774F0000  TAPI32.dll
    LOAD_DLL  base:77320000  DHCPCSVC.DLL
    CREATE_THREAD
    LOAD_DLL  base:777A0000  WINRNR.dll
    LOAD_DLL  base:777B0000  rasadhlp.dll
    LOAD_DLL  base:74F50000  MSAFD.dll
    LOAD_DLL  base:74F90000  WSHTCPIP.dll
    CREATE_THREAD
    CREATE_THREAD
    CREATE_THREAD
    CREATE_THREAD
    CREATE_THREAD
    EXIT_THREAD
    CREATE_THREAD
    EXIT_THREAD
    LOAD_DLL  base:77520000  WDMAUD.dll
    UNLOAD_DLL (WDMAUD.dll) base: 77520000
    LOAD_DLL  base:77520000  WDMAUD.dll
    CREATE_THREAD
    UNLOAD_DLL (WDMAUD.dll) base: 77520000
    LOAD_DLL  base:77520000  WDMAUD.dll
    UNLOAD_DLL (WDMAUD.dll) base: 77520000
    LOAD_DLL  base:77520000  WDMAUD.dll
    UNLOAD_DLL (WDMAUD.dll) base: 77520000
    LOAD_DLL  base:77520000  WDMAUD.dll
    UNLOAD_DLL (WDMAUD.dll) base: 77520000
    LOAD_DLL  base:77520000  WDMAUD.dll
    UNLOAD_DLL (WDMAUD.dll) base: 77520000
    LOAD_DLL  base:77520000  WDMAUD.dllEXIT_THREAD
    CREATE_THREAD
    EXIT_THREAD
    EXCEPTION(2nd Chance) Exception:  Access Violation
    code: C0000005  addr:00000000
    Unknown_Module-00000000 (00000000)
    invalid read from 00000000
    EAX:000310DC EBX:0012FC60 ECX:00000000
    EDX:77F951B6 ESI:00031104 EDI:00000001
    ESP:00031044 EBP:00031064 EIP:00000000
    EFLAGS:00010246
    CS:001B DS:0023 ES:0023
    SS:0023 FS:003B GS:0000
    Stack dump
    77F8EB70:00031104:0012FC60:00031120
    Call stack
    Exception:  Access Violation
    EXIT_THREAD
    EXIT_THREAD
    EXIT_THREAD
    EXIT_THREAD
    EXIT_THREAD
    EXIT_THREAD
    EXIT_THREAD
    EXIT_THREAD
    EXIT_THREAD
    EXIT_THREAD
    EXIT_THREAD
    EXIT_THREAD
    EXIT_THREAD
    EXIT_THREAD
    EXIT_THREAD
    EXIT_THREAD
    EXIT_THREAD
    EXIT_THREAD
    EXIT_THREAD
    EXIT_THREAD
    EXIT_THREAD
    EXIT_THREAD
    EXIT_THREAD
    EXIT_THREAD
    EXIT_THREAD
    EXIT_THREAD
    EXIT_THREAD
    EXIT_PROCESS
      

  4.   

    你的THREAD里的异常处理是不是有问题;