Clion+Qt+msvc的配置使用,调试器显示Qt特有类型变量的值(如QString等)
使用Clion进行Qt编程时,对于Qt库特有的变量(如QString、QPoint等)无法在调试器中显示,只能看到其地址。例如如下情况:
jetbrians 对此的解释如下:
可以看到这里他推荐使用Windows MSVC作为编译器,也就是在调试器的工具链中选择visual studio。
这里他还提到了一个重要的文件 qt5.natvis .这个文件可以定义一个类的对象在调试窗口时显示。你可以在GitHub上下载到它:qt5.natvis。
预先准备
- Qt5组件下载(MSVC)
- Visual Studio下载
- natvis 下载(链接在上文中)
- 添加环境变量
Qt5组件下载
在Qt官网下载安装包,按一般步骤进行安装。在选择组件部分:
务必选择MSVC组件 其他根据需要选择
Visual Studio下载
安装Visual Studio Community 社区版本,在单个组件选项页面搜索msvc,找到MSVC vxxx - VS xxxx C++ X64/x86生成工具,打勾安装即可。
额外提一句:本文默认已安装Clion最新版本(2021)
添加环境变量(必须先添加变量后打开clion)
在 我的电脑 > 属性 > 高级系统设置 > 环境变量 > 系统环境变量 中
找到path变量,点击编辑,将刚才qt安装目录下的**…\msvc2017_64\bin** 路径添加到环境变量:
当你的环境变量中有多个msvc\bin 目录时,将你想用的那个(qt的)放在第一行。
在Clion中配置
- 新建项目时的配置
- 在设置中的配置
- 在cmakelist中的配置
新建项目时的配置
按下图所示进行配置,必须添加Qt CMake 前缀路径,该路径是之前安装Qt组件时MSVC组件的路径
在设置中的配置
按下图所示配置工具链
点击加号添加visual studio;点击上箭头将visual studio设为默认;在toolset中选择vs的安装路径;架构选择__64位架构__。
保证CMake的设置与下图一致:
在调试器 > 数据视图 > C/C++ 选项中,按下图进行配置
确认勾选 为LLDB启用NatVis渲染器 ,并在诊断选项中选择 verbose。
点击确定,设置部分配置完成。
在CMakeLists中设置
首先将下载的 qt5.natvis 复制到项目的根目录中
打开CMakeLists.txt
确认path是否如下图所示
修改下方的add custom command
原先:
if (EXISTS "${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll")
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory
"$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/platforms/")
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll"
"$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/platforms/")
endif ()
将plugin目录删去(否则无法识别platforms文件夹,不知道为啥),变为:
if (EXISTS "${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll")
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory
"$<TARGET_FILE_DIR:${PROJECT_NAME}>/platforms/")
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll"
"$<TARGET_FILE_DIR:${PROJECT_NAME}>/platforms/")
endif ()
至此所有配置全部完成,运行效果如下:
可以看到字符串成功显示出来了。