平台崩溃之operator new异常(十九)-2010-8-5

今天中午12:40分左右接到客服保障,平台无响应。平台从7-28日以控制台方式启动。
远程上去观察现场:
屏幕上最后一条日志为:12:42分,待处理请求数0,总请求数:3015717
日志文件最后一条为:
 .[2010-08-04 12:42:36:575](线程10380)客户通:客户通添加合作机构扫描线程--开始;(???可互通线程没有退出来)
 日志里面没有异常现象。
crashlog日志:从7-28号以来,每天都有。

处理过程:
(1)利用Microsoft Windbg分析crash dump文件.
 分析失败,原因是平台经过一次迁移,pdb文件不一致(d盘有个备份,但是不对).

(2)发现另一处可疑代码片断如下:
 NativeLogItem *item = new NativeLogItem;
 item->flag = lo;
 item->sev = sev;
 item->msg = LogMsg("[%d-%02d-%02d %02d:%02d:%02d:%03d](线程%d)",
  now.wYear,now.wMonth,now.wDay,now.wHour, now.wMinute,
  now.wSecond, now.wMilliseconds,ACE_Thread::self());
 va_list ap;
 va_start(ap, format);
 item->msg += LogMsg(format,ap);
 
 以上代码调用了2次LogMsg,第一次调用是传入的变参,第二次调用传入的是变参列表对象va_list ap.
 LogMsg函数的2个函数原形如下:
 string LogMsg(const char *format,va_list args)
 string LogMsg(const char *format,...)
 照理来说,这两个函数参数不同,应该可以重载,并在运行时能够调到正确的函数.
 
 将string LogMsg(const char *format,va_list args)函数注释掉,程序还能编译正常,程序连接到了string LogMsg(const char *format,...)函数中
 而将va_list ap参数传给变参函数,从现象上看是出现乱码,但可能引发深层次问题.
 
 如果两个原形同时存在,效果会是怎样?所以,我将2.5.11的log.cpp的LogMsg函数名称为LogMsgXX.

(3)重新编译2.5.11的平台所有代码,晚上替换程序.这样一来,可以解决pdb不一致问题,又可以更新LogMsg问题.

晚上于8:15分重起平台.
 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值