Qt WebEngine调试版本崩溃

6

我的项目使用Qt WebEngine。发行版运行良好,但调试版本在浏览tumblr.com时很快崩溃。错误消息如下所示。我想知道这条消息的含义,以及如何修复它。

版本:

Qt 5.9.4 - msvc2015-32bit
windows 10

错误输出:

[16056:14736:0128/180851.894:WARNING:sqlite_channel_id_store.cc(262)] Server bound cert database is too new.
[16056:14736:0128/180851.894:WARNING:sqlite_channel_id_store.cc(262)] Server bound cert database is too new.
[16056:14736:0128/180851.894:FATAL:sqlite_channel_id_store.cc(203)] Check failed: false. Unable to open cert DB.
Backtrace:
    GetHandleVerifier [0x112471F7+262887]
    QWebEngineUrlSchemeHandler::_q_destroyedUrlSchemeHandler [0x1118256B+3003]
    IsSandboxedProcess [0x12D7FBD5+9233173]
    IsSandboxedProcess [0x1496E3C7+38521607]
    QtWebEngineCore::JavaScriptDialogController::qt_static_metacall [0x1091BA15+7234709]
    IsSandboxedProcess [0x143ABE13+32482643]
    IsSandboxedProcess [0x143AEE24+32494948]
    QtWebEngineCore::ColorChooserController::reject [0x101A8DBE+48654]
    GetHandleVerifier [0x112538F4+313828]
    IsSandboxedProcess [0x131BF2E2+13687330]
    QtWebEngineCore::JavaScriptDialogController::qt_static_metacall [0x10242484+52996]
    QtWebEngineCore::JavaScriptDialogController::qt_static_metacall [0x1024259B+53275]
    QtWebEngineCore::JavaScriptDialogController::qt_static_metacall [0x10243EF4+59764]
    QtWebEngineCore::ColorChooserController::reject [0x101A8DBE+48654]
    QWebEngineUrlSchemeHandler::_q_destroyedUrlSchemeHandler [0x111CD7C7+310807]
    QWebEngineUrlSchemeHandler::_q_destroyedUrlSchemeHandler [0x111CCC83+307923]
    QWebEngineUrlSchemeHandler::_q_destroyedUrlSchemeHandler [0x11200659+519337]
    QWebEngineUrlSchemeHandler::_q_destroyedUrlSchemeHandler [0x111909EC+61500]
    BaseThreadInitThunk [0x76678654+36]
    RtlGetAppContainerNamedObjectPath [0x77834A77+311]
    RtlGetAppContainerNamedObjectPath [0x77834A47+263]

[16056:14736:0128/180851.894:FATAL:sqlite_channel_id_store.cc(203)] Check failed: false. Unable to open cert DB.
Backtrace:
    GetHandleVerifier [0x112471F7+262887]
    QWebEngineUrlSchemeHandler::_q_destroyedUrlSchemeHandler [0x1118256B+3003]
    IsSandboxedProcess [0x12D7FBD5+9233173]
    IsSandboxedProcess [0x1496E3C7+38521607]
    QtWebEngineCore::JavaScriptDialogController::qt_static_metacall [0x1091BA15+7234709]
    IsSandboxedProcess [0x143ABE13+32482643]
    IsSandboxedProcess [0x143AEE24+32494948]
    QtWebEngineCore::ColorChooserController::reject [0x101A8DBE+48654]
    GetHandleVerifier [0x112538F4+313828]
    IsSandboxedProcess [0x131BF2E2+13687330]
    QtWebEngineCore::JavaScriptDialogController::qt_static_metacall [0x10242484+52996]
    QtWebEngineCore::JavaScriptDialogController::qt_static_metacall [0x1024259B+53275]
    QtWebEngineCore::JavaScriptDialogController::qt_static_metacall [0x10243EF4+59764]
    QtWebEngineCore::ColorChooserController::reject [0x101A8DBE+48654]
    QWebEngineUrlSchemeHandler::_q_destroyedUrlSchemeHandler [0x111CD7C7+310807]
    QWebEngineUrlSchemeHandler::_q_destroyedUrlSchemeHandler [0x111CCC83+307923]
    QWebEngineUrlSchemeHandler::_q_destroyedUrlSchemeHandler [0x11200659+519337]
    QWebEngineUrlSchemeHandler::_q_destroyedUrlSchemeHandler [0x111909EC+61500]
    BaseThreadInitThunk [0x76678654+36]
    RtlGetAppContainerNamedObjectPath [0x77834A77+311]
    RtlGetAppContainerNamedObjectPath [0x77834A47+263]

The program has unexpectedly finished.
The process was ended forcefully.

WebView初始化:

view_ = new WebView(widget_);
QWebEnginePage *page = new QWebEnginePage(view_);
view_->setPage(page);

page->settings()->setAttribute(QWebEngineSettings::AutoLoadImages, true);
page->settings()->setAttribute(QWebEngineSettings::JavascriptEnabled, true);
page->settings()->setAttribute(QWebEngineSettings::JavascriptCanOpenWindows, true);
page->settings()->setAttribute(QWebEngineSettings::JavascriptCanAccessClipboard, true);
page->settings()->setAttribute(QWebEngineSettings::LinksIncludedInFocusChain, true);
page->settings()->setAttribute(QWebEngineSettings::LocalStorageEnabled, true);
page->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls, true);
page->settings()->setAttribute(QWebEngineSettings::XSSAuditingEnabled, true);
page->settings()->setAttribute(QWebEngineSettings::SpatialNavigationEnabled, true);
page->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls, true);
page->settings()->setAttribute(QWebEngineSettings::HyperlinkAuditingEnabled, true);
page->settings()->setAttribute(QWebEngineSettings::ScrollAnimatorEnabled, true);
page->settings()->setAttribute(QWebEngineSettings::ErrorPageEnabled, true);
page->settings()->setAttribute(QWebEngineSettings::PluginsEnabled, true);
page->settings()->setAttribute(QWebEngineSettings::FullScreenSupportEnabled, true);
page->settings()->setAttribute(QWebEngineSettings::ScreenCaptureEnabled, true);
page->settings()->setAttribute(QWebEngineSettings::WebGLEnabled, true);
page->settings()->setAttribute(QWebEngineSettings::Accelerated2dCanvasEnabled, true);
page->settings()->setAttribute(QWebEngineSettings::HyperlinkAuditingEnabled, true);
page->settings()->setAttribute(QWebEngineSettings::AutoLoadIconsForPage, true);
page->settings()->setAttribute(QWebEngineSettings::TouchIconsEnabled, true);

cookie_ = new CookieJar(this); // for cookie sync

page->profile()->setPersistentStoragePath(gVar.getCachePath());
page->profile()->setCachePath(gVar.getCachePath());
page->profile()->setHttpCacheMaximumSize(100 * 1024 * 1024);
page->profile()->setHttpCacheType(QWebEngineProfile::DiskHttpCache);
page->profile()->setHttpUserAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36");
page->profile()->setPersistentCookiesPolicy(QWebEngineProfile::ForcePersistentCookies);

connect(view_->page(), SIGNAL(loadFinished(bool)),
        SLOT(pageLoadFinished()), Qt::QueuedConnection);

QUrl url = QUrl::fromUserInput(kMainPageUrl);
view_->setUrl(url);

WebView是一个代理类,本身不做任何事情:

class WebView : public QWebEngineView
{
    Q_OBJECT
public:
    explicit WebView(QWidget *parent = 0);
};

崩溃的方式是怎样的?有什么信号(如果有的话)?堆栈跟踪看起来像什么?错误信息是什么?调试器告诉你什么?除了“不崩溃”之外,预期的行为是什么?请提供更多细节。另外,您能否创建一个我们可以自己测试的 [mcve]? - Jesper Juhl
我使用cdb.exe调试程序。程序在加载URL后很快崩溃,然后就退出了,并留下一些堆栈跟踪错误消息,我已经在帖子中贴出来了。调试器没有在任何语句上中断。我希望调试版本的工作方式像发布版本一样正常。发布版本不会崩溃。你说得对。我应该创建一个MCVE项目。这将会有所帮助。 - James Feng
1个回答

10
  1. 运行 cmd.exe
  2. cd %AppData%/../Local/qwebengine
  3. rmdir /s QtWebEngine

2
欢迎来到 Stack Overflow!通常情况下,如果答案包含代码意图的解释以及为什么这样做可以解决问题而不会引入其他问题,那么它们会更有帮助。感谢您提高答案的参考价值并使其更易于理解! - Tim Diekmann
太好了!感谢您的解决方案。当我将我的项目升级到使用较新的Qt 5.12版本并回退时,它对我有用。错误消息“数据库太新。”实际上给出了提示,但我不知道。 - ZHANG Zikai
这是为了清除应用程序特定的临时文件,这些文件是由新版本编写的,旧版本无法读取。在从Qt 5.12回到5.9.7后,我不得不删除以下位置找到的应用程序特定的WebEngine临时文件:%AppData%\local\OurCompanyName\OurAppName\QtWebEngine(答案基于此评论:[QtBug-69473-CommentID=412267](https://bugreports.qt.io/browse/QTBUG-69473?focusedCommentId=412267&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-412267) - SteveS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接