我有个程序(vc6+sp5,运行在win2003,sp2上),接收到服务器通过tcp/ip发送过来的信息,然后存储到数据库(sql 2005 express,写数据库部分在线程里面执行)中,同时根据接收到信息的内容通过TCPIP转发到各个客户端,该程序运行7到8天就会崩溃一次,有时候2,3天,有时候10多天,以下我给出drwtsn32记录的简单信息,我也有dmp文件和log,但不知道怎么去分析它,网上google了半天也没找到有效的信息,如果您有兴趣,给我留言,我可以把他发给你。The application, C:\Program Files\sgl\SGL.exe, generated an application error The error occurred on 08/17/2008 @ 06:39:08.741 The exception generated was c0000005 at address 488933BB (ODBC32!MpHeapFree)For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.====================================================
ODBC32!MpHeapFree?是不是意味着数据库访问方面出的问题,如果是,可能是什么问题呢,但我仔细查看过数据库访问的代码,没有问题啊,只是简单的insert数据操作,我是在每次需要访问数据库的时候打开数据库,insert提交完就close掉。希望高手指点下,以上问题可能的原因,或者,如何去分析dump文件,在此先行谢过!
ODBC32!MpHeapFree?是不是意味着数据库访问方面出的问题,如果是,可能是什么问题呢,但我仔细查看过数据库访问的代码,没有问题啊,只是简单的insert数据操作,我是在每次需要访问数据库的时候打开数据库,insert提交完就close掉。希望高手指点下,以上问题可能的原因,或者,如何去分析dump文件,在此先行谢过!
查错的方法有三种:
1、写日志的方法:你现在已经确定是在数据库操作时出的错,这样你可以对数据库操作的地方加上详细的日志,每执行一句就写日志。如果出错程序退出,你就从日志文件反向扫描,这样就可以找到具体出错的代码行。
2、再一个就是用drwtsn32来调试了,在程序编译选择中选择生成Map文件,程序出错后将drwtsn32的dump文件vc2003环境下调用,这样出错后就可以通过内存地址和map文件一起就可以查到是哪一行代码出错了。
3、再一种办法就是直接在调试状态下一直运行程序,这种得等好几天可能才会出错。不过这种方法是最有效的,我好多的服务器程序都是通过这种方法解决了不少bug.
我没办法在调试状态下运行程序,公司不容许把代码放到客户的机子上跑