Qt WebEngine 调试和剖析

控制台日志记录

Qt WebEngine 中执行的 JavaScript 可使用Chrome 控制台 API将信息记录到控制台。日志信息会被转发到js logging category 中的 Qt XML 日志工具。不过,默认情况下只打印警告和致命信息。要改变这种情况,要么为js 类别设置自定义规则,要么通过重新实现QWebEnginePage::javaScriptConsoleMessage() 或连接WebEngineView::javaScriptConsoleMessage() 来提供自定义消息处理程序。

还可以通过Qt WebEngine 开发人员工具访问所有消息。

Qt WebEngine 开发人员工具

Qt WebEngine 模块提供了网络开发工具,可以轻松检查和调试任何网络内容的布局和性能问题。

开发者工具可以通过基于 Chromium 或Qt WebEngine 的浏览器(如 Chrome 浏览器)以本地网页的形式访问。

要激活开发者工具,请使用--remote-debugging-port=<portnumber> 命令行参数启动使用Qt WebEngine 的应用程序。

注意: 任何WebEngine 命令行选项都应在--webEngineArgs 选项之后指定,该选项用于将用户的应用程序特定选项与WebEngine 选项分开。

--webEngineArgs --remote-debugging-port=<portnumber>

其中<port_number> 指的是本地网络端口。然后,就可以通过在http://localhost:<port_number> 上启动浏览器来访问网络开发工具。

此外,还可以设置环境变量 QTWEBENGINE_REMOTE_DEBUGGING。它既可以设置为与--remote-debugging-port 类似的端口,也可以同时设置为主机地址和端口。后者可用于控制在哪个网络接口上输出接口,以便从远程设备访问开发工具。

为避免远程调试时出现 WebSocket 错误,请添加一个额外的命令行参数--remote-allow-origins=<origin>[,<origin>, ...] ,其中<origin> 指的是请求源。使用--remote-allow-origins=* 允许来自所有来源的连接。如果未指定任何参数,当启用远程调试时,Qt WebEngine 会在命令行参数中添加--remote-allow-origins=* ,从而允许来自所有来源的请求。

有关开发工具功能的详细说明,请参阅Chrome 浏览器开发工具页面。

使用命令行参数

调试时可以使用以下命令行参数为错误报告提供输入:

  • --disable-gpu 禁用 GPU 硬件加速。这在诊断 OpenGL 问题时非常有用。
  • --disable-logging 禁用控制台日志记录,这可能对调试构建有用。
  • --enable-logging --log-level=0 启用控制台日志记录,并将日志记录级别设置为 0,这意味着严重性 及以上的信息都会记录在日志中。这是调试构建的默认设置。其他可能的日志级别为: (警告)、 (错误)和 (致命错误)。info 1 2 3
  • --v=1 提高日志记录级别,使其超过 所能达到的级别,并使调试信息日志记录的冗长程度达到 。数字越大,冗余度越高,但可能导致记录的信息数量过多。默认值为 (无调试信息)。--log-level 1 0
  • --no-sandbox 禁用渲染器和插件进程的沙箱。请注意,禁用沙箱可能会带来安全风险。
  • --single-process 在与浏览器相同的进程中运行呈现器和插件。这有助于获取渲染器崩溃时的堆栈跟踪。
  • --enable-features=NetworkServiceInProcess 在主进程中运行网络。这可能有助于防火墙管理,因为只有应用程序可执行文件需要列入白名单,而不是 QtWebEngineProcess。不过,这意味着网络服务将失去沙盒的安全性。

任何WebEngine 命令行选项都应在--webEngineArgs 选项之后指定,该选项用于将用户的应用程序特定选项与WebEngine 的选项分开。

--webEngineArgs [WebEngine specific options]

或者,也可以设置环境变量 QTWEBENGINE_CHROMIUM_FLAGS。例如,可以设置以下值,以便在调试名为mybrowser 的应用程序时禁用日志记录:

QTWEBENGINE_CHROMIUM_FLAGS="--disable-logging" mybrowser

如果在 QtWebEngineQuick::initialize() 之前调用,也可以在应用程序中使用qputenv 设置 QTWEBENGINE_CHROMIUM_FLAGS。

转储 WebEngineContext 信息

要转储 WebEngineContext 信息,可将QT_LOGGING_RULES 环境变量设置为"qt.webenginecontext.debug=true"

输出结果包含有关图形后端的信息,以及Qt WebEngine 是如何为应用程序初始化的。这对重现问题特别有用。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.