vc编写了一个数据采集的程序,程序编译运行没有问题,可运行了一段时间后,发生崩溃,程序退出,如何才能找出崩溃的位置呢?

解决方案 »

  1.   

    以debug方式运行。当出现错误的时候,重试就可以查看到运行的错误代码处。甚至可以看到错误的变量。也可以通过查看调用堆栈窗口查看错误所在处
      

  2.   

    release编译,生成pdb文件,用windbg运行程序
      

  3.   

    查看被windows捕获到的崩溃地址和模块
      

  4.   

    http://blog.csdn.net/guo_wei/archive/2007/09/29/1805978.aspx
    看看这个吧,不知道对你的问题有没有帮助,希望有
      

  5.   

    如果只有一个exe文件,这个问题好办。如果加了DLL,就难办了
      

  6.   

    首先看一下程序的内存占用情况,是否一直在增加?尤其是临近崩溃时。
    检查使用的资源是否恰当释放了,比如申请的内存块、各种句柄等。
    此外,可以添加一下Log,记录函数调用过程,以便出错时分析。
      

  7.   

    1。 可以使用记录的方式,如环形记录的方式(就是说采用一个链表最大能接收500个数据,这个值可以随便设置,当大于这个值得时候,删除前100条,继续记录)
    2。 在release条件下生成*.pdb,然后再运行。
    3。看内存使用情况,资源使用情况等是否在一直增加,如果是这样,则有内存泄露,资源未释放,如果出现这种情况最好还是换成debug环境,也可以使用boundchecker,purity等内存检测工具,或者可以使用visual leaker doctor等工具来检测内存泄露的地方和资源泄露的地方。
    4。如果出现违规操作,则可以出现指针没有初始化,或者使用野指针的情况(就是delete了,但没有置为NULL)
    5。 如果可以换成debug,则更能逮住问题。
    在这种情况下可以使用一下办法:
    1)生成*.pdb,当出现异常时,选择继续,然后调试,查看调用堆栈,分析问题的原因。
    2)可以生成make文件,根据崩溃地址,来查找错误的原因。
    3)结合debug的调试输出功能,使用viaual leaker doctor等,以及调用堆栈功能,输出相应的信息。
    4) 使用trace语句输出信息。
    以上四个方法都可以在没有调试环境的条件下进行。