如何在Visual Studio跨平台CMake项目的调试器中可视化自定义类
解决方案
Visual Studio 全目标(Windows/WSL/远程Linux)natvis配置方法
你可以直接通过以下步骤配置,适配你提到的所有编译目标,VS 2019及以上版本原生支持该方案:
- 将你编写好的
.natvis文件放到对应模块的目录下,例如给dbe_lib用的可视化文件放到_dbe_lib目录下,命名为dbe_custom.natvis。 - 修改
_dbe_lib/CMakeLists.txt,将natvis文件加入目标配置:
cmake_minimum_required (VERSION 3.8) # 直接将natvis文件加入源文件列表即可,VS会自动识别该类文件 add_library(dbe_lib STATIC "dbe_lib.cpp" "dbe_lib.h" "dbe_custom.natvis") target_include_directories(dbe_lib PUBLIC "<include directories>") # 若使用CMake 3.18及以上版本,可以额外添加以下配置明确指定natvis属性,兼容性更好 if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.18") set_target_properties(dbe_lib PROPERTIES VS_NATVIS_FILES ${CMAKE_CURRENT_SOURCE_DIR}/dbe_custom.natvis) endif()
- 针对WSL、SSH远程RPi这类Linux目标,确保VS开启了跨平台natvis支持:打开
工具 -> 选项 -> 跨平台 -> 调试,勾选在调试Linux项目时使用Natvis(该选项在VS 2019 16.9及以上版本默认开启)。
配置完成后重新生成CMake缓存,调试时自定义类的可视化规则就会自动生效,所有链接了dbe_lib的目标(比如你的dbe_test)都可以直接复用该可视化配置。
纯Linux环境跨平台调试扩展方案
如果你后续需要在非VS的Linux环境下直接调试(比如终端直接运行GDB/LLDB),可以对应编写调试器适配的可视化规则,和natvis配合实现全场景支持:
- GDB使用基于Python的Pretty Printer实现自定义类型可视化
- LLDB使用自定义Formatter脚本实现可视化,也可直接导入natvis格式的配置
STL的全平台调试可视化效果就是通过同时适配natvis、GDB Pretty Printer、LLDB Formatter三类规则实现的。
内容的提问来源于stack exchange,提问作者Dehim
相关产品推荐
相关产品推荐

