【问题标题】:How to debug QML with a CMake project如何使用 CMake 项目调试 QML
【发布时间】:2016-02-09 16:20:08
【问题描述】:

我已经设置了标志 -DQT_QML_DEBUG 并在“构建并运行 > 运行 > 调试器设置”(我的翻译)中选中了“启用 QML”,但我仍然无法使用调试器。指令指针根本没有显示,文本视图不跟随指令指针。另外,我在开始时收到此警告:

Warning: "QML Debugger: Invalid argument 'services:DebugMessages' detected. Ignoring the same."
Warning: "QML Debugger: Invalid argument 'QmlDebugger' detected. Ignoring the same."
Warning: "QML Debugger: Invalid argument 'V8Debugger' detected. Ignoring the same."
Warning: "QML Debugger: Invalid argument 'QmlInspector' detected. Ignoring the same."
QML Debugger: Waiting for connection on port 39750...

编辑:环境是archlinux,因此是最新版本。

【问题讨论】:

  • 对于 2021 年登陆这里的任何人,QTCreator (bugreports.qt.io/browse/QTCREATORBUG-23541) 中存在一个已“解决”的错误,但在 4.14.0 中仍然出现。对我来说,我做了以下工作:添加 QT_QML_DEBUG 定义并取消选中“启用 QML”切换,然后重新编译所有,然后启用“启用 QML”,然后再次重新编译所有。

标签: c++ qt debugging cmake qml


【解决方案1】:

编译qml文件需要禁用调试。

FIND_PACKAGE(Qt5QuickCompiler QUIET)
IF(Qt5QuickCompiler_FOUND AND NOT CMAKE_BUILD_TYPE MATCHES Debug AND NOT CMAKE_BUILD_TYPE MATCHES RelWithDebInfo)
  QTQUICK_COMPILER_ADD_RESOURCES(RESOURCES qml.qrc)
ELSE()
  SET(RESOURCES qml.qrc)
ENDIF()

ADD_EXECUTABLE(my_target_name
  ...
  ${RESOURCES}
)

而且目标需要用QT_QML_DEBUG构建

TARGET_COMPILE_DEFINITIONS(my_target_name
  PRIVATE $<$<OR:$<CONFIG:Debug>,$<CONFIG:RelWithDebInfo>>:QT_QML_DEBUG>)

这应该可以在不玩QQmlDebuggingEnabler的情况下工作

【讨论】:

    【解决方案2】:

    除了你的前两个步骤添加

    #include <QQmlDebuggingEnabler>
    
    ...
    
    QQmlDebuggingEnabler enabler;
    

    到您项目的 main.cpp。

    这对我有帮助,虽然我没有看到你的确切警告信息。

    【讨论】:

    • 它对我不起作用,使用 Qt 5.1...另外,如果我理解正确,该类型的实例已经在 qqmldebug.h 中创建,printWarning param true。跨度>
    • 这帮助我完成了基于 Qt 5.9 和 CMake 的项目,其中包含 QQuickWidget
    【解决方案3】:

    从项目 > 运行 > 调试器设置 取消选择并重新选择启用 C++ 和启用 QML

    这在 manjaro 上对我有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-25
      • 2016-06-19
      • 2020-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多