Qt WebEngine 调试和性能分析
控制台日志
Qt WebEngine 内部执行的 JavaScript 可以使用 Chrome 控制台 API 将信息记录到控制台。日志消息将被转发到 Qt 的 js
日志分类。然而,默认情况下只打印警告和致命消息。要更改此设置,您必须为 js
分类设置自定义规则,或者通过重新实现 QWebEnginePage::javaScriptConsoleMessage() 或连接到 WebEngineView::javaScriptConsoleMessage 提供自定义消息处理器。
所有消息也可以通过 Qt WebEngine 开发者工具访问。
Qt WebEngine 开发者工具
Qt WebEngine 模块提供供网页开发者使用的工具,这些工具可以轻松检查和调试任何网页内容的布局和性能问题。
开发者工具是通过使用基于 Chromium 或 Qt WebEngine 的浏览器(如 Chrome 浏览器)访问的本地网页。
要激活开发者工具,请使用命令行参数 --remote-debugging-port=<端口号>
启动使用 Qt WebEngine 的应用程序。
--webEngineArgs --remote-debugging-port=<portnumber>
<端口号>
指的是本地网络端口。然后可以通过在地址 http://localhost:<端口号>
启动浏览器来访问网页开发者工具。
或者,可以设置环境变量 QTWEBENGINE_REMOTE_DEBUGGING。它可以设置为与 --remote-debugging-port
相似的工作方式的端口号或同时提供主机地址和端口号。后者可以用来控制要导出接口的网络接口,因此您可以从远程设备访问开发者工具。
为了防止远程调试期间的 WebSocket 错误,请添加额外的命令行参数 --remote-allow-origins=<源>[,<源>, ...]
,其中 <源>
表示请求源。使用 --remote-allow-origins=*
允许所有来源的连接。如果没有指定,当启用远程调试时,Qt WebEngine 将自动添加 --remote-allow-origins=*
到命令行参数中,从而允许所有来源的请求。
有关开发者工具功能的详细介绍,请参阅 Chrome DevTools 页面。
使用命令行参数
您可以在调试时使用以下命令行参数来提供用于错误报告的输入
--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。但这意味着会失去网络服务的沙盒安全。
或设置环境变量QTWEBENGINE_CHROMIUM_FLAGS。例如,以下值可以设置为在调试名为mybrowser
的应用程序时禁用日志记录。
QTWEBENGINE_CHROMIUM_FLAGS="--disable-logging" mybrowser
QTWEBENGINE_CHROMIUM_FLAGS还可以在应用程序中使用qputenv
设置,前提是在QtWebEngineQuick::initialize()之前调用。
转储WebEngineContext信息
为了转储WebEngineContext信息,可以将环境变量QT_LOGGING_RULES设置为"qt.webenginecontext.debug=true"
。
输出包含有关图形后端以及Qt WebEngine为应用初始化的方式的信息。这对于重现问题尤其有用。
© 2024Qt公司有限公司。本文件包含的文档贡献是各自所有者的版权。本文件提供的文档受自由软件基金会公布的GNU自由文档许可协议版本1.3条款许可。Qt及其相关标志是芬兰和/或其他国家Qt公司的商标。所有其他商标均为各自所有者的财产。