NDK中如果发生错误,从logcat里很难直观的看出问题出在哪里.比如经常是像下面这样的错误信息:
2020-12-22 13:53:33.208 26890-26914/com.sy.hap_android_sdk A/libc: Fatal signal 8 (SIGFPE), code 1, fault addr 0x8b09ad32 in tid 26914 (pool-1-thread-1)
面对这样的错误信息,完全不知道是C/C++代码里的什么问题导致安卓应用发生问题.
不过android studio提供了adb和ndk-stack命令,可以帮助分析so文件里的堆栈信息,并明确告诉bug发生的具体地方,精确到了方法.
1.将SDK的相关命令加入到windows的环境变量中
比如我的本机上将如下两个文件夹目录加入到了path路径
$Android\Sdk\platform-tools
$Android\Sdk\ndk\21.3.6528147
2.分析并显示堆栈错误信息
采用如下命令
adb logcat | ndk-stack -sym $app路径\build\intermediates\cmake\debug\obj\armeabi-v7a\
显示错误信息如下(红框中即为c代码中bug产生的方法)