编了一个软件,VC6中用了CDocument的OnCloseDocument()函数,软件写好以后其实也用了一段时间,然后别人告诉我说软件会莫名的死机,报一个错误对话框,按确认后整个程序就退出了。我最近对这个软件进了跟踪测试,发现在软件开启后一段时间(有时一个多小时,有时一两天)确实会在某一不确定时会报错退出。最后跟踪到代码是在运行到OnCloseDocument()函数时退出了。我考虑了很久,实在没有搞明白。在整个程序运行中除了打开一个窗口进行显示外别的都不打开。而且这个软件用在服务器上基本属于无人操作让其自动运行的。
现在将该故障贴出,希望熟悉这方面编程的朋友看了以后能否给我一点启示,为何软件运行到OnCloseDocument()函数死机的启示。谢谢了!

解决方案 »

  1.   

    查看一下callstack等,理一下出错的调用顺序
      

  2.   

    今天也很巧合,我打开操作系统的“任务管理器”,看着这个软件的内存变化情况,突然我看到这个软件的内存使用下降的很厉害,再就软件退出运行。我知道我看到的内存使用下降是程序代码在执行OnCloseDocument()函数这段产生的,因为调用这个函数关闭了许多通过内存写入的东西,释放了内存。由于OnCloseDocument()函数是MFC自带的函数,我也不知道如何跟踪这个函数,在这个函数中用TRACE();好像没有用。
    我对程序的调用顺序用TRACE();函数来执行,现在看每次出错都在运行到OnCloseDocument();进了这个函数就没有出来,真的很郁闷!
      

  3.   

    在你的document类中,重写OnCloseDocument();
    你可以调用基类的版本,用于跟踪,也可以自己写个完全控制的版本