问题描述
NPC 客户端在 Android 虚拟机环境(光速虚拟机)中启动后立即崩溃,退出码为 139(SIGSEGV),无任何日志输出。在真实物理设备上运行正常。
复现步骤
在光速虚拟机中安装包含 libnpc.so (v0.34.7) 的 APK
启动 NPC 连接,参数示例:
-server=x.x.x.x:8024 -vkey=xxxxx -type=tcp -debug=false -log=stdout -log_color=false
进程立即退出,无任何 stdout/stderr 输出
错误日志
启动命令: /data/app/com.example.app/lib/arm64/libnpc.so
-server=x.x.x.x:8024 -vkey=xxxxx -type=tcp -debug=false -log=stdout -log_color=false
NPC 进程退出,代码: 139
进程在 Go 运行时初始化阶段即发生 SIGSEGV,没有任何业务日志输出。
环境信息
NPC 版本: 0.34.7
Go 版本: go1.26.1(从二进制中提取)
设备: Xiaomi M2011K2C(虚拟机模拟)
ABI: arm64-v8a
Android 版本: Android 10 (API 29)
运行环境: 光速虚拟机
物理设备是否正常: 是,物理设备运行正常
已尝试的排查
✅ 确认 libnpc.so 文件存在且大小正确(arm64-v8a: 19,278,944 bytes)
✅ 从 nativeLibraryDir 和 filesDir 两个路径执行,均 SIGSEGV
✅ 设置 TMPDIR、HOME 环境变量,无效
✅ 设置 GODEBUG=asyncpreemptoff=1,madvdontneed=1,无效
✅ 四种架构(arm64-v8a/armeabi-v7a/x86/x86_64)的 libnpc.so 均已包含在 APK 中
可能的原因
虚拟机环境的 CPU 特性模拟不完整,导致 Go 运行时在初始化阶段访问了不支持的 CPU 指令或内存映射方式,触发段错误。可能与以下因素有关:
虚拟机对 VDSO 的支持不完整
seccomp-bpf 过滤器阻止了 Go 运行时需要的系统调用
虚拟化环境中特定 ARM 指令集扩展不被支持
期望行为
NPC 应能在 Android 虚拟机环境中正常启动并建立连接,或在不支持的环境中给出明确的错误提示而非直接 SIGSEGV。
问题描述
NPC 客户端在 Android 虚拟机环境(光速虚拟机)中启动后立即崩溃,退出码为 139(SIGSEGV),无任何日志输出。在真实物理设备上运行正常。
复现步骤
在光速虚拟机中安装包含 libnpc.so (v0.34.7) 的 APK
启动 NPC 连接,参数示例:
-server=x.x.x.x:8024 -vkey=xxxxx -type=tcp -debug=false -log=stdout -log_color=false
进程立即退出,无任何 stdout/stderr 输出
错误日志
启动命令: /data/app/com.example.app/lib/arm64/libnpc.so
-server=x.x.x.x:8024 -vkey=xxxxx -type=tcp -debug=false -log=stdout -log_color=false
NPC 进程退出,代码: 139
进程在 Go 运行时初始化阶段即发生 SIGSEGV,没有任何业务日志输出。
环境信息
NPC 版本: 0.34.7
Go 版本: go1.26.1(从二进制中提取)
设备: Xiaomi M2011K2C(虚拟机模拟)
ABI: arm64-v8a
Android 版本: Android 10 (API 29)
运行环境: 光速虚拟机
物理设备是否正常: 是,物理设备运行正常
已尝试的排查
✅ 确认 libnpc.so 文件存在且大小正确(arm64-v8a: 19,278,944 bytes)
✅ 从 nativeLibraryDir 和 filesDir 两个路径执行,均 SIGSEGV
✅ 设置 TMPDIR、HOME 环境变量,无效
✅ 设置 GODEBUG=asyncpreemptoff=1,madvdontneed=1,无效
✅ 四种架构(arm64-v8a/armeabi-v7a/x86/x86_64)的 libnpc.so 均已包含在 APK 中
可能的原因
虚拟机环境的 CPU 特性模拟不完整,导致 Go 运行时在初始化阶段访问了不支持的 CPU 指令或内存映射方式,触发段错误。可能与以下因素有关:
虚拟机对 VDSO 的支持不完整
seccomp-bpf 过滤器阻止了 Go 运行时需要的系统调用
虚拟化环境中特定 ARM 指令集扩展不被支持
期望行为
NPC 应能在 Android 虚拟机环境中正常启动并建立连接,或在不支持的环境中给出明确的错误提示而非直接 SIGSEGV。