Skip to content

NPC 在 Android 虚拟机(光速虚拟机)中启动立即 SIGSEGV(退出码 139) #4

@ZHFlys

Description

@ZHFlys

问题描述
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。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions