迁移至QBS后QML调试失效,寻求解决方案
我之前也碰到过类似的QBS迁移后QML调试罢工的情况,结合你已经做的排查步骤,给你几个更深入的方向试试:
确认QBS属性的添加位置正确
你手动配置的Qt.declarative.qmlDebugging:true和Qt.quick.qmlDebugging:true,要确保是加在Product节点下,而不是项目根节点。全局添加的话可能不会被目标应用继承,导致调试开关没真正生效。示例配置如下:Product { name: "YourApplication" type: "application" // 把调试属性放在这里 Qt.declarative.qmlDebugging: true Qt.quick.qmlDebugging: true // 其他项目配置... }手动注入QML调试启动参数
QML调试需要程序启动时携带特定参数,有时候Qt Creator和QBS的联动可能没自动加上。你可以去Qt Creator的「Run」配置里,手动添加命令行参数:-qmljsdebugger=port:12345,block端口选一个未被占用的即可,
block参数会让程序启动时等待调试器连接,方便你提前设置断点。检查调试器类型是否同时启用C++和QML
切换到「Run」配置的「Debugger」标签页,确认「Debugger type」选择的是「Auto」,或者手动勾选「Enable QML debugging」和「Enable C++ debugging」。有时候更换构建系统后,这个配置会被重置为仅启用C++调试。强制添加QML调试编译宏
QML调试需要编译时定义QT_QML_DEBUG宏,虽然理论上qmlDebugging属性会自动添加这个宏,但手动兜底可以排除属性未生效的问题:Product { // ...其他配置 cpp.defines: base.concat(["QT_QML_DEBUG"]) }尝试升级QBS版本(可选)
QBS 1.10.1是比较老旧的版本了,旧版本和Qt 5.10.1可能存在调试联动的兼容性bug。如果前面的方法都没用,可以试试升级QBS到1.15以上的版本,或许能解决这类适配问题。
另外,你可以启动程序后看看Qt Creator的「Debug」输出面板,有没有类似「QML Debugger: Waiting for connection on port xxxx」的日志——如果没有,说明程序根本没启动QML调试服务,得回到前面的配置重新检查。
内容的提问来源于stack exchange,提问作者Ivan Fateev

