使用Qt Creator调试QML

7
我有一个使用QML文件的Qt(5.8.0)项目。我想在Qt Creator(4.2.1)中设置QML文件中的断点,以便我能够跟踪流程。但是我无法让它起作用。我已经在qmake构建步骤中启用了“启用QML调试和分析”,并在运行步骤中启用了“启用C ++”和“启用QML”。
虽然C++代码中的断点被命中,但QML中的断点却被忽略。当开始时,我收到以下消息:
QDeclarativeDebugServer: Ignoring 
\"-qmljsdebugger=port:42715,block,services:DebugMessages,QmlDebugger,V8Debugger,QmlInspector\". 
Debugging has not been enabled.

当我尝试使用相同的工具包调试“日历”等演示项目中的QML文件时,它可以正常工作,并命中断点。

有任何想法吗?


我发现自己在这里,然后找出了我的问题:QML调试通过QApplication和调试器之间的协作进行工作,借助于-qmljsdebugger标志,该标志会被QApplication的构造函数所消耗。为了在启动我的应用程序之前解析命令行参数,我创建了一个“虚拟”的QApplication。结果是,第一个QApplication已经消耗了参数,因此“真正的”QApplication从未看到它。 - Ben
3个回答

3
你是否在代码中启用了QML调试器? 我记得在我的代码中加入了类似以下的内容:
对于Qt4:
#include <QtDeclarative/qdeclarativedebug.h>
QDeclarativeDebuggingEnabler qmldbg;

或者在Qt5的情况下:

#include <QQmlDebuggingEnabler>
QQmlDebuggingEnabler enabler;

此外,在执行设置中需要激活QML调试: enter image description here

这似乎修复了“QDeclarativeDebugServer忽略”消息。现在它说“启用了Qml调试。只在安全的环境中使用!”,但是QML中断点仍然没有被触发。 - Frank
1
你能在控制台上看到像“QDeclarativeDebugServer:等待端口3768上的连接…”这样的消息吗? - Jens
当我使用你的“Qt4”解决方案时,确实会收到以下消息:“启用了Qml调试。只在安全环境中使用!QDeclarativeDebugServer:正在等待端口40393上的连接... QDeclarativeDebugServer:连接已建立”。 - Frank
然而,当我尝试Qt5解决方案(并将Qt+ = quick添加到我的项目中)时,我收到了一些令人困惑的消息:“启用了QML调试。只在安全环境中使用此功能。”“QDeclarativeDebugServer:忽略“-qmljsdebugger=port:36014,block,services:DebugMessages,QmlDebugger,V8Debugger,QmlInspector”。调试未启用。” - Frank

2

我需要从我的 .pro 文件中删除一个包:

#CONFIG += qtquickcompiler

这行代码被注释掉后,确认项目的构建步骤:“启用QML调试和分析”已经勾选,断点正常工作。


1
我找到了一个使它工作的方法。看起来我正在使用Qt5的组合,同时使用Declarative包和Qt Quick 1.1。当我删除了Declarative包并改用qml和quick包(Qt+=qml quick),并更新我的软件以使用Qt Quick 2.2时,断点被命中了(还使用了Jens答案中建议的#include)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接