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")
- Android.mk 中添加:
步骤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
相关产品推荐
相关产品推荐

