前段在开发中遇到了测试组报过来的程序coredump 问题,stack如下: (Linux X86-64位系统,RHEL6,隐去程序名字更名为APP)
Stack: [0x0000000030074000,0x0000000030a75000], sp=0x0000000030a73830, free space=10238k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [APP+0x4b6768] ACRManager::getLastFailOverEventTS(std::vector<PreACRRec*, std::allocator<PreACRRec*> >&, PreACRRec*)+0x2ae
C [APP+0xacefe9] INCACRSessionData::INCACRSessionData(std::vector<PreACRRec*, std::allocator<PreACRRec*> >&, PreACRRec*, int, int, std::string)+0x369
C [APP+0xad193c] INCACRSessionDataMap::INCACRSessionDataMap(std::vector<PreACRRec*, std::allocator<PreACRRec*> >&, PreACRRec*, int, std::string)+0xd4
C [APP+0x4b52e6] ACRManager::generateINCfile(std::vector<PreACRRec*, std::allocator<PreACRRec*> >&, PreACRRec*, int, std::string)+0x162
C [APP+0x5002b6] Audit::closeACR(std::string const&, std::vector<PreACRRec*, std::allocator<PreACRRec*> >, DBConn*, int, int)+0x3c8
C [APP+0x4ffbd5] Audit::processACR(std::string const&, int)+0x55b
C [APP+0x4ff4b2] Audit::acr_audit_process()+0x338
C [APP+0x4fcf65] Audit::acrStart()+0xcf
C [APP+0x50195f] acr_thread_run+0x54
程序 没有加入-g选项,看不到对应的行号。只能使用objdump -Cd 生成反汇编代码,然后对着看。
红色标出的就是coredump对应的那行的汇编语言
00000000008b64ba<ACRManager::getLastFailOverEventTS(std::vector<PreACRRec*,std::allocator<PreACRRec*> >&, PreACRRec*)>:
8b6

本文讲述了在Linux环境下,由于C++代码中数据类型不匹配,导致的程序coredump问题。通过分析coredump和汇编代码,发现一处涉及unsigned long与int类型的比较错误,当特定条件触发时,程序尝试访问非法内存地址,从而引发崩溃。解决方案包括确保数据类型匹配、编译时加入-g选项以及熟悉汇编语言。
最低0.47元/天 解锁文章
1913

被折叠的 条评论
为什么被折叠?



