You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS2019 NDK项目调试.so共享库时断点不命中 如何加载缺失符号

Visual Studio 2019 NDK共享库断点不命中解决方案

核心问题定位

你遇到的问题确实是共享库调试信息被剥离导致的,以下是Visual Studio场景下的完整修复步骤:


步骤1:禁用共享库的Strip操作

对应Android Studio的donotstrip配置,操作如下:

  • 右键共享库项目,点击「属性」,切换到配置属性 > 常规页,确认当前配置为「Debug」、平台匹配目标Android架构(如ARM64、ARM32)
  • 进入配置属性 > C/C++ > 常规页,设置「调试信息格式」为完整调试信息(-g)
  • 进入配置属性 > 链接器 > 常规页,找到「剥离调试信息」选项,设置为「否」
  • 如果你使用手动编写的编译脚本:
    • Android.mk 中添加:LOCAL_STRIP_MODULE := false
    • CMakeLists.txt 中添加:
      set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g")
      set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g")
      set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} -Wl,--build-id")
      

步骤2:确认符号搜索路径配置

  • 启动调试触发android_main断点后,点击菜单栏调试 > 窗口 > 模块
  • 在模块列表中找到对应的.so项,右键选择「符号加载信息」,确认搜索路径包含共享库项目的Debug输出目录
  • 若路径缺失,右键该模块选择「始终自动加载符号」,或手动指定本地未strip的.so文件路径

步骤3:验证部署的.so为未strip版本

注意:Visual Studio默认可能部署strip后的.so到设备,即使本地编译保留了调试信息

  • 查看共享库Debug输出目录下的.so文件大小,未strip的版本通常比strip后的版本大3~10倍
  • 右键主启动项目(含android_main的项目),进入配置属性 > 部署页,确认「附加依赖项」中添加的是上述未strip的.so文件,而非编译中间目录下的strip版本

补充验证操作

如果修改配置后仍不生效,可以在共享库的初始化逻辑中加入__debugbreak()编译指令,运行触发中断后再设置断点,可排除断点设置时机早于.so加载导致的异常。


内容的提问来源于stack exchange,提问作者hundolin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 03:57:04