无法找到NDK-STACK.html、ndk-stack.cmd无响应,求助排查SIGSEGV错误
首先得说,你遇到的情况大概率是NDK版本或者路径的问题——毕竟现在新版NDK的结构和旧版ndk-bundle已经有不少变化了,一步步来解决:
第一步:确认你的NDK实际安装路径
很多人还以为NDK在ndk-bundle里,但其实从NDK r19开始,Android Studio默认用Side by side的方式安装NDK,也就是每个版本单独放在Sdk/ndk/<具体版本号>文件夹下,比如Sdk/ndk/25.2.9519653,而ndk-bundle只是旧版的兼容目录,可能是空的或者版本很老。
你可以打开Android Studio的SDK Manager→SDK Tools,看看NDK (Side by side)选项下安装的版本,然后找到对应的路径。
第二步:找到ndk-stack工具的正确位置
不管是新版NDK还是旧版ndk-bundle,ndk-stack都在prebuilt/windows-x86_64/bin子目录里:
- 新版NDK路径示例:
Sdk/ndk/25.2.9519653/prebuilt/windows-x86_64/bin/ndk-stack.exe - 旧版
ndk-bundle路径:Sdk/ndk-bundle/prebuilt/windows-x86_64/bin/ndk-stack.cmd
至于运行无反应的问题:ndk-stack本身不带参数运行时就是静默等待输入的,不会输出任何内容,你得给它指定符号表路径,或者输入logcat日志才行。
第三步:正确运行ndk-stack排查SIGSEGV崩溃
要解析你的Fatal signal 11错误,按这个步骤来:
- 先从logcat里复制包含崩溃信息的完整日志(从崩溃前几行到崩溃结束的内容都要)。
- 打开命令提示符(CMD),cd到ndk-stack所在的文件夹,比如:
cd D:\Android\Sdk\ndk\25.2.9519653\prebuilt\windows-x86_64\bin - 运行命令指定你的so文件符号表路径(必须是带符号的debug版so,release版会剥离符号,解析不了):
ndk-stack -sym D:\YourProject\app\build\intermediates\cmake\debug\obj\armeabi-v7a - 把刚才复制的logcat日志粘贴到CMD里,按回车,ndk-stack就会自动解析出崩溃对应的代码文件和行号了。
关于找不到NDK-STACK.html的问题
新版NDK已经不再提供单独的NDK-STACK.html文档了,相关用法要么整合到Android Studio的帮助文档里(可以通过Help→Find Action搜索NDK Stack),要么在NDK安装目录的docs文件夹里找markdown格式的说明。如果确实需要旧版的html文档,可以下载NDK r21及更早的版本,这些版本里还保留了单独的html文档。
另外,如果你嫌每次cd路径麻烦,可以把ndk-stack所在的bin目录加到系统环境变量PATH里,这样在任何目录都能直接调用ndk-stack命令。
内容的提问来源于stack exchange,提问作者batsheva

