-
使用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 首次发布
本文详细介绍了如何使用C++通过AndroidNDK在arm64-v8a环境中开发应用,处理运行时crash并解析coredump。涉及gdb调试、release版本的符号表生成及调试配置。
2539

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



