-
使用c++开发Android应用程序需要Android ndk编译。本篇文章使用android-ndk-r23b版本介绍关于程序运行异常crash后捕获生成的coredump解析。
-
系统环境介绍:
开发环境使用Ubuntu系统;
运行环境Android armv64-8a系统。 -
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;
} -
使用android-ndk-r23b编译为arm64-v8a架构程序,并copy到相应系统运行,报错生成coredump:
-
复制出coredump文件(这里是core)到程序编译环境放到可执行程序目录(这里是test_crash相同目录),使用android-ndk-r23b调试:
-
通过gdb调试找到问题点修复掉。
-
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
-
备注:如果有用的其他引用库也需要调试,release版本使用7步生成符号表文件,gdb调试时solib-search-path配置一下: 样例 set solib-search-path ./ 加载当前路径符号表数据。
-
结束,ths。
linux环境使用android-ndk(gdb)调试coredump
于 2023-12-01 16:17:52 首次发布