Android的native可执行程序段错误跟踪和解决

本文介绍了一个Android应用程序中出现的段错误问题及解决过程。通过分析系统输出的错误信息,定位到问题是由于memcpy函数使用不当引起的,并给出了正确的实现方式。

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

周末碰到一个问题,Android可执行程序段错误,如何定位呢。仔细查看段错误如下


...

1-07 06:10:29.240: I/DEBUG(2319): backtrace:
01-07 06:10:29.240: I/DEBUG(2319):     #00  pc 0001ce38  /system/lib/libc.so (memcpy+112)
01-07 06:10:29.240: I/DEBUG(2319):     #01  pc 00001ef7  /system/lib/KDrvService
01-07 06:10:29.240: I/DEBUG(2319):     #02  pc 0000166b  /system/lib/KDrvService
01-07 06:10:29.240: I/DEBUG(2319):     #03  pc 0000ca78  /system/lib/libc.so (__thread_entry+72)
01-07 06:10:29.240: I/DEBUG(2319):     #04  pc 0000cbf4  /system/lib/libc.so (pthread_create+208)

...


对照函数MAP文件发现是某函数中的memcpy导致的问题。

基本断定是memcpy导致的段错误,浏览代码发现如下错误:

memcpy(buf+offset, length, length);

修改为:

memcpy(buf+offset, buffer, length);

解决问题。


解决问题的思路有多种:

1. 代码审查,对于出现问题前,可以通过代码审,减少BUG数量。

2. 调试跟踪,开发过程中通过调试跟踪,能更快定位问题所在。

3. 依赖系统输出的错误信息定位问题,对于发布的程序i问题,通过系统输出的错误信息,能更准确的定位问题。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值