适配v_noabi命名空间:如何在mongocxx C++库中使用mongodb.natvis
解决思路
你看到的v_noabi命名空间是vcpkg的默认配置导致的——mongo-cxx-driver在vcpkg中默认启用ABI v2版本,该版本会把所有API符号放到mongo::v_noabi命名空间下,这不是你编译时漏了步骤,是正常的默认行为。
下面给两种可行的解决办法:
方案1:修改natvis文件适配v_noabi
不用重新编译库,直接调整mongodb.natvis就能用:
- 打开natvis文件,把所有写着
mongo::的类型(比如mongo::BSONObj)改成mongo::v_noabi::BSONObj; - 嫌逐个改麻烦的话,直接在文件根节点
<AutoVisualizer>下面加一行全局命名空间声明:
这样调试器会自动在这个命名空间下找对应类型,原有的规则就能正常工作。<Namespace Name="mongo::v_noabi" />
方案2:重新编译库去掉v_noabi
如果不想碰natvis文件,可以在vcpkg安装时指定用ABI v1版本(这个版本不带v_noabi命名空间):
- 执行安装命令时加上特性参数,比如针对x64-windows平台:
vcpkg install mongo-cxx-driver:x64-windows --no-default-features --features abi-v1 - 重新编译你的项目,链接这个新编译的库,原mongodb.natvis就能直接识别变量了。
内容的提问来源于stack exchange,提问作者Jabu
相关产品推荐
相关产品推荐

