M系统在客户现场运行一段时间后,反应不再运行,dump之一
M系统曾经在客户现场,出现运行至某处代码,偶发性会卡住,日志也不再打印。
观察最后一行日志,与下一行日志(未打印、也就是未运行的下一处)之间,并无任何理由会卡住。这就让我费解了!
中间只有一行CString的format,感觉不应该。(其实最后发现就是这个format,当时实在太粗心)
但这中间还有另外一个问题,主线程打印了某处的代码后停止了运行,但其他线程的日志照样打印。
后来找到问题所在:
主线程走到format这一句后,str.format(%s,str);format了str本身,这是不允许的,偶发性会导致线程崩溃。
主线程崩溃后,已经弹出了dump弹出框,提示buffer too small,但由于现场客户操作人员一直没注意到,其余线程还是自己在跑,导致出现了主线程挂掉,其余线程一直打印日志的奇怪现象。
哥一时间被此现场搞得晕头转向。后来是通过几处问题,总结在一起,才找到了原因所在。
总结:
1.format自身就是很愚蠢的做法,CString感觉是有很多坑。
2.怪自己写法不规范
3.分析问题,综合了多个表象,最后才找到原因。
遇到问题,别放弃,第一次找不到,就多打点日志,等待下一次机会,综合所有看到的问题表象,突破问题
浙公网安备 33010602011771号