首页 > 解决方案 > Visual Studio + CMake + Qt Quick:如何调试 QML 文件?

问题描述

我的项目正在使用 CMake 构建。Visual Studio可以直接打开CMakeLists.txt,不用生成vcxproj,这个很方便。

我的项目也使用 Qt 和 QML。如果您打开 vcxproj,那么 Visual Studio - Qt VS Tool 的插件允许您在设置中连接 QML 文件的调试器。如果你打开 CMakeLists.txt,那么 Qt VS Tools 就不起作用了,你必须手动连接调试器。但是,官方文档非常简洁 - 关于连接调试器只有一小段,并且包含不正确的信息。从本文档中,完全不清楚如何实际连接调试器以调试 QML。

我试着像 Qt VS Tools 那样做。它将命令行选项传递给调试文件。我尝试传递相同的参数。在 Visual Studio 中,launch.vs.json 文件负责在 CMake 中构建的项目的调试器下启动设置。我得到它是这样的:

{
  "version": "0.2.1",
  "defaults": {},
  "configurations": [
    {
      "type": "default",
      "project": "CMakeLists.txt",
      "projectTarget": "MyApp.exe (MyProj\\MyApp.exe)",
      "name": "MyApp.exe (MyProj\\MyApp.exe)",
      "env": "PATH = C:\\Qt\\5.13.0\\msvc2017_64\\bin; ${env.PATH}",
      "args": ["-qmljsdebugger=file:MyApp.exe,block"]
    }
  ]
}

实际上,“args”行负责连接 QML 调试:["-qmljsdebugger = file: MyApp.exe, block"]. 这一行是从 Qt VS Tools 中生成的行复制而来的。Qt VS 工具仅将项目的 GUID 传递给那里,而不是文件名。它的行如下所示:-qmljsdebugger = file: {7A883E87-2CB8-3EB7-9DE4-156F3850167A}, block. CMakeLists.txt 没有任何 guid,因此不清楚应该在文件参数中传递什么。该文档声称是一个文件名。目前尚不清楚为什么 Qt VS Tools 会在那里传递 GUID。

并且在 CMake 中使用此类设置构建的文件在启动时挂起,等待调试器连接到它。目前尚不清楚如何将调试器连接到它,因为调试器已经连接到进程。

如何正确连接 Visual Studio 调试器以处理调试 QML 文件?

标签: qtcmakeqmlvisual-studio-2019qtquick2

解决方案


我刚刚花了一周时间调查这个问题,但我得到了坏消息。负责 QML 调试的是 Qt VS 工具:您还会在扩展的安装文件夹中找到一个名为 vsqml.dll 的库。该工具仅支持 Visual Studio 项目,因此目前不支持通过打开文件夹而不生成 .sln 解决方案和/或 .vcxproj 项目对原始 CMake 项目运行 QML 调试。

请参阅此 Qt 博客文章的评论部分中的详细信息。


推荐阅读