2026/4/18 12:04:21
网站建设
项目流程
什么是网站集约化建设,微信商城是正规的吗,河南省工程建设业协会网站,做推广的公司一般都叫什么公众号#xff1a;cpp手艺人
Qt5 QWebEngine 调试最佳实践指南
最近在项目中遇到很多关于QWebEngine的疑难杂症#xff0c;越发的发现调试手段的重要性。所以我这里做了一次总结。
总结来说三种#xff1a;日志输出信息和自带的dev tools#xff0c;以及远程调试。
1、开启…公众号cpp手艺人Qt5 QWebEngine 调试最佳实践指南最近在项目中遇到很多关于QWebEngine的疑难杂症越发的发现调试手段的重要性。所以我这里做了一次总结。总结来说三种日志输出信息和自带的dev tools以及远程调试。1、开启日志调试1、Chromium 日志可以帮助排查GPU崩溃渲染进程异常退出JS 引擎 V8 崩溃网络加载失败资源加载路径错误渲染降级从 GPU → 软件渲染2、操作方法1、代码配置#include QApplication #include QWebEngineView int main(int argc, char *argv[]) { // 输出日志到 stderr 和 文件 qputenv(QTWEBENGINE_CHROMIUM_FLAGS, --enable-loggingstderr --v2 --vmodulegpu*2,renderer*2,v8*2); QApplication app(argc, argv); QWebEngineView view; view.resize(1200, 800); view.load(QUrl(https://www.example.com)); view.show(); return app.exec(); }2. 参数说明参数作用--enable-loggingstderr输出到控制台--v2推荐的详细日志等级--vmodulegpu*2打印 GPU 子系统日志排查 WebGL、黑屏最关键renderer*2打印渲染进程日志v8*2打印 JS 引擎日志3、问题但是这个方案有个问题就是日志是在控制台看的不能保存文件中。执行下面的命令就可以将日志重定向到文件中。可以将命令写到bat文件中即可。my_qwebengine_app.exe D:\logs\qweb_log.txt 212、开启DevTools调试1、DevTools 功能DevTools Chrome 的 F12 面板可以用来调试JS 错误DOM 结构网络请求Network页面性能Performance内存泄漏MemoryGPU 渲染监控Rendering2、代码配置重写keypressEvent函数即可在里面监听F12消息voidMainWindow::keyPressEvent(QKeyEvent*event){// 检测是否按下F12键if(event-key()Qt::Key_F12){qDebug()Key_F12;QWebEngineView*devToolsView01newQWebEngineView();m_devToolDlgQPointerQWidget(newQWidget);m_devToolDlg-setWindowFlags(Qt::Tool|Qt::X11BypassWindowManagerHint);autolayoutnewQHBoxLayout;layout-setContentsMargins(0,0,0,0);m_devToolDlg-setLayout(layout);m_devToolDlg-setWindowFlag(Qt::WindowMinMaxButtonsHint);m_devToolDlg-setWindowFlag(Qt::WindowStaysOnTopHint);autoptmapToGlobal(pos());m_devToolDlg-setGeometry(pt.x(),pt.y(),width(),height());m_devToolDlg-setAttribute(Qt::WA_DeleteOnClose);devToolsView01newQWebEngineView(m_devToolDlg);layout-addWidget(devToolsView01);autosourcedevToolsView01-page();webView-page()-setDevToolsPage(source);webView-page()-triggerAction(QWebEnginePage::InspectElement);m_devToolDlg-show();}// 传递其他按键事件给父类处理QMainWindow::keyPressEvent(event);}3、开启远程调试(最简单的方案)在你的main函数代码中最开始加入一行代码即可这是最简单的方案调试。此时使用浏览器访问端口即可http://127.0.0.1:92224、使用release版调试在调试过程我们发现Debug的调试速度非常的慢所以我们切换到release版调试速度就会非常的快。但是没有在编译的时候还是需要生成pdb文件。否则很多东西被优化看不到值。的调试速度非常的慢所以我们切换到release版调试速度就会非常的快。但是没有在编译的时候还是需要生成pdb文件。否则很多东西被优化看不到值。[外链图片转存中…(img-Kx1764Ma-1765794589616)]