VS调试CMake构建的Qt项目时报函数无地址无法求值如何解决
解决方案
1. 确认安装对应版本的Qt Debug库
绝大多数情况下该报错是因为你链接的Qt官方预编译库为Release版本,库内函数默认已做优化,即使你自己的项目代码关闭了优化,也无法对Qt库内的方法求值。
- 打开Qt Maintenance Tool,在对应使用的编译器组件(例如MSVC 2022 64-bit)下,勾选「Debug Libraries」选项安装Debug版Qt库
- 安装完成后重新生成项目,确认Debug模式下CMake自动链接了后缀带
d的Qt库(例如Qt6Cored.dll、Qt6Widgetsd.dll)
2. 修正CMake Qt链接配置
如果已经安装了Qt Debug库但仍链接到Release版Qt库,需检查CMake配置:
- 不要手动硬编码Qt库路径,使用标准CMake Qt链接语法:
# 按实际使用的Qt版本和组件调整 find_package(Qt6 REQUIRED COMPONENTS Core Widgets) target_link_libraries(你的项目名称 PRIVATE Qt6::Core Qt6::Widgets)
- 可在CMakeLists中添加以下配置,强制Debug模式优先匹配Debug版导入库:
set(CMAKE_MAP_IMPORTED_CONFIG_DEBUG Debug Release)
3. 调整VS调试器设置
打开VS的「工具」->「选项」->「调试」->「常规」页面,修改以下配置:
- 关闭「启用仅我的代码」
- 开启「启用属性求值和其他隐式函数调用」
- 开启「允许在函数求值时运行其他线程」
修改后重启VS重新调试即可。
4. 无需Qt Debug库的替代方案:使用Qt Natvis可视化文件
如果你不需要调试Qt库内部代码,仅需要查看Qt对象的属性值,可以直接使用Qt官方提供的natvis调试可视化文件,无需调用Qt函数即可直接解析内存显示属性:
- 在Qt安装目录下搜索对应版本的natvis文件(例如
qt6.natvis,一般路径为Qt版本号\编译器版本\qml\QtQml\debugger\或者Qt版本号\Src\qtbase\src\corelib\) - 将找到的natvis文件复制到
%USERPROFILE%\Documents\Visual Studio 20xx\Visualizers目录下(没有Visualizers文件夹则手动创建) - 重启VS后调试,即可直接查看所有Qt常用对象的属性值,不会触发函数求值报错。
内容的提问来源于stack exchange,提问作者Nikita Kobzev
相关产品推荐
相关产品推荐

