linux环境使用android-ndk(gdb)调试coredump

  1. 使用c++开发Android应用程序需要Android ndk编译。本篇文章使用android-ndk-r23b版本介绍关于程序运行异常crash后捕获生成的coredump解析。

  2. 系统环境介绍:
    开发环境使用Ubuntu系统;
    运行环境Android armv64-8a系统。

  3. crash 样例:
    int main(int argc, char** argv)
    {
    std::cout << “start …” << std::endl;
    int *p = nullptr;
    int test_i = 5;
    *p = test_i;
    std::cout << “p address:” << p << " , p value:" << *p << std::endl;
    }

  4. 使用android-ndk-r23b编译为arm64-v8a架构程序,并copy到相应系统运行,报错生成coredump:
    在这里插入图片描述

  5. 复制出coredump文件(这里是core)到程序编译环境放到可执行程序目录(这里是test_crash相同目录),使用android-ndk-r23b调试:
    在这里插入图片描述

  6. 通过gdb调试找到问题点修复掉。

  7. release版本需要加载符号表调试介绍:
    有时release版本程序没有符号调试信息,此时就需要objcopy生成符号表使用符号表调试,
    生成符号表:android-ndk-r23b/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-objcopy --only-keep-debug test_crash test_crash.symbols
    在这里插入图片描述

    调试符号表:android-ndk-r23b/prebuilt/linux-x86_64/bin/gdb --symbols=test_crash.symbols ./test_crash core
    在这里插入图片描述

  8. 备注:如果有用的其他引用库也需要调试,release版本使用7步生成符号表文件,gdb调试时solib-search-path配置一下: 样例 set solib-search-path ./ 加载当前路径符号表数据。

  9. 结束,ths。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值