一个数据类型不匹配引发的coredump“血案”

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前段在开发中遇到了测试组报过来的程序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 生成反汇编代码&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值