Tracking down QtWebEngine related crashes on Windows?



  • Hi all,

    I am working on a Windows application that uses QtWebEngine to display a webpage and recently, on Windows, I am seeing a number of crashes in Qt. Reproducing them proven to be difficult so I was wondering if anyone has any best practices on how to go about debugging them or if anyone has seen similar crashes before. I am using Qt 5.4.1. I do maintain the webpage so both the webpage source and C++ code are accessible to me should it prove to be an issue with the webpage doing something that QtWebEngine is not able to handle.

    Below are some of the callstacks I am seeing from customer's reports:

    Qt5WebEngineCore.dll!gpu_message_loop() Line 76	C++
    Qt5WebEngineCore.dll!DelegatedFrameNode::preprocess() Line 440	C++
    Qt5Quick.dll!QSGRenderer::preprocess() Line 269	C++
    Qt5Quick.dll!QSGRenderer::renderScene(const QSGBindable & bindable) Line 189	C++
    Qt5Quick.dll!QSGRenderer::renderScene(unsigned int fboId) Line 170	C++
    Qt5WebEngineWidgets.dll!RenderWidgetHostViewQtDelegateWidget::paintGL() Line 262	C++
    Qt5Widgets.dll!QOpenGLWidgetPrivate::invokeUserPaint() Line 734	C++
    Qt5Widgets.dll!QOpenGLWidget::paintEvent(QPaintEvent * e) Line 1038	C++
    Qt5Widgets.dll!QWidget::event(QEvent * event) Line 9085	C++
    Qt5Widgets.dll!QOpenGLWidget::event(QEvent * e) Line 1177	C++
    Qt5Core.dll!QMetaObject::cast(const QObject * obj) Line 333	C++
    Qt5Core.dll!QCoreApplicationPrivate::sendThroughApplicationEventFilters(QObject * receiver, QEvent * event) Line 1012	C++
    Qt5Widgets.dll!QApplicationPrivate::notify_helper(QObject * receiver, QEvent * e) Line 3721	C++
    Qt5Core.dll!QCoreApplication::notifyInternal(QObject * receiver, QEvent * event) Line 935	C++
    Qt5Core.dll!QCoreApplication::sendSpontaneousEvent(QObject * receiver, QEvent * event) Line 231	C++
    [External Code]	
    [Frames below may be incorrect and/or missing]	
    Qt5WebEngineCore.dll!appcache::AppCacheStorageImpl::FindMainResponseTask::FindMainResponseTask(appcache::AppCacheStorageImpl * storage, const GURL & url, const GURL & preferred_manifest_url, const std::map<GURL,appcache::AppCacheGroup *,std::less<GURL>,std::allocator<std::pair<GURL const ,appcache::AppCacheGroup *> > > * groups_in_use) Line 884	C++
    
    Qt5Gui.dll!QOpenGLShaderProgram::bind() Line 987	C++
    Qt5Gui.dll!QOpenGLTextureBlitter::bind() Line 317	C++
    Qt5Gui.dll!QPlatformBackingStore::composeAndFlush(QWindow * window, const QRegion & region, const QPoint & offset, QPlatformTextureList * textures, QOpenGLContext * context, bool translucentBackground) Line 252	C++
    Qt5Widgets.dll!QWidgetBackingStore::qt_flush(QWidget * widget, const QRegion & region, QBackingStore * backingStore, QWidget * tlw, const QPoint & tlwOffset, QPlatformTextureList * widgetTextures, QWidgetBackingStore * widgetBackingStore) Line 115	C++
    Qt5Widgets.dll!QWidgetBackingStore::flush(QWidget * widget) Line 1246	C++
    Qt5Widgets.dll!QWidgetBackingStore::doSync() Line 1234	C++
    Qt5Widgets.dll!QWidgetBackingStore::sync(QWidget * exposedWidget, const QRegion & exposedRegion) Line 960	C++
    Qt5Widgets.dll!QWidgetPrivate::syncBackingStore(const QRegion & region) Line 1897	C++
    Qt5Widgets.dll!QWidgetWindow::event(QEvent * event) Line 255	C++
    Qt5Widgets.dll!QApplicationPrivate::notify_helper(QObject * receiver, QEvent * e) Line 3723	C++
    Qt5Widgets.dll!QApplication::notify(QObject * receiver, QEvent * e) Line 3685	C++
    Qt5Core.dll!QCoreApplication::notifyInternal(QObject * receiver, QEvent * event) Line 935	C++
    Qt5Gui.dll!QGuiApplicationPrivate::processExposeEvent(QWindowSystemInterfacePrivate::ExposeEvent * e) Line 2611	C++
    Qt5Gui.dll!QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent * e) Line 1676	C++
    Qt5Gui.dll!QWindowSystemInterface::sendWindowSystemEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 573	C++
    Qt5Gui.dll!QWindowSystemInterface::flushWindowSystemEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 558	C++
    qwindows.dll!QWindowsWindow::handleWmPaint(HWND__ * hwnd, unsigned int message, unsigned __int64 __formal, __int64 __formal) Line 1496	C++
    qwindows.dll!QWindowsContext::windowsProc(HWND__ * hwnd, unsigned int message, QtWindows::WindowsEventType et, unsigned __int64 wParam, __int64 lParam, __int64 * result) Line 1013	C++
    qwindows.dll!qWindowsWndProc(HWND__ * hwnd, unsigned int message, unsigned __int64 wParam, __int64 lParam) Line 1250	C++
    [External Code]	
    Qt5Core.dll!QEventDispatcherWin32::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 807	C++
    qwindows.dll!QWindowsGuiEventDispatcher::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 74	C++
    Qt5Core.dll!QEventLoop::exec(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 203	C++
    Qt5Core.dll!QCoreApplication::exec() Line 1188	C+
    
    d3dcompiler_47.dll!CInstruction::operator new(unsigned __int64)	Unknown
    d3dcompiler_47.dll!CBaseProgram::AddInstruction(class CInstruction * *,unsigned int,unsigned int,unsigned int)	Unknown
    d3dcompiler_47.dll!CCompiler::EmitInstAll(struct ArSourceLocation const *,unsigned int,class CArgument * *,class CArgument * const *,class CArgument * const *,unsigned __int64,enum ArRangeFlags,enum ArBasicKind) Unknown
    d3dcompiler_47.dll!CCompiler::EmitAssignInsts(struct ArSourceLocation const *,unsigned int,class CArgument * *,class CArgument * *,unsigned int,class CInstruction *,unsigned int)	Unknown
    d3dcompiler_47.dll!CCompiler::EmitExpression(class CNode const *,unsigned int,class CArgument * *,unsigned int,unsigned int)	Unknown
    d3dcompiler_47.dll!CCompiler::EmitVariableInit(class ArSymbolVariable *)	Unknown
    d3dcompiler_47.dll!CCompiler::EmitSymbol(class ArSymbol *,unsigned int,class CPacker *,bool)	Unknown
    d3dcompiler_47.dll!CCompiler::EmitSymbol(class ArSymbol *,unsigned int,class CPacker *,bool)	Unknown
    d3dcompiler_47.dll!CCompiler::EmitSymbols(class ArSymbol *,unsigned int,class CPacker *,bool)	Unknown
    d3dcompiler_47.dll!CCompiler::EmitProgram(unsigned int)	Unknown
    d3dcompiler_47.dll!CCompiler::EmitAndGenerateCode(struct ArParseResult *,char const *,class ArSymbolFunction *,class CNode const *,class CNode const *,unsigned int,struct ID3D10Blob * *)	Unknown
    d3dcompiler_47.dll!CCompiler::CompileInternal(class CPreProcessor *,struct ArParseResult *,char const *,class ArSymbolFunction *,class CNode const *,class CNode const *,bool,char const *,unsigned long,unsigned int,void const *,unsigned __int64,struct ID3D10Blob * *,class CLibraryContext *,char const *,unsigned long)	Unknown
    d3dcompiler_47.dll!D3DCompileShader(void const *,unsigned __int64,char const *,struct _D3D_SHADER_MACRO const *,struct ID3DInclude *,char const *,char const *,unsigned int,unsigned int,unsigned int,void const *,unsigned __int64,struct ID3D10Blob * *,struct ID3D10Blob * *,class CLibraryContext *)	Unknown
    d3dcompiler_47.dll!D3DCompileImpl(void const *,unsigned __int64,char const *,struct _D3D_SHADER_MACRO const *,struct ID3DInclude *,char const *,char const *,unsigned int,unsigned int,unsigned int,void const *,unsigned __int64,struct ID3D10Blob * *,struct ID3D10Blob * *)	Unknown
    d3dcompiler_47.dll!D3DCompileSaveReplay(void const *,unsigned __int64,char const *,struct _D3D_SHADER_MACRO const *,struct ID3DInclude *,char const *,char const *,unsigned int,unsigned int,unsigned int,void const *,unsigned __int64,struct ID3D10Blob * *,struct ID3D10Blob * *)	Unknown
    d3dcompiler_47.dll!D3DCompile2()	Unknown
    d3dcompiler_47.dll!D3DCompile()	Unknown
    >	libGLESv2.dll!rx::HLSLCompiler::compileToBinary(gl::InfoLog & infoLog, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & hlsl, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & profile, const std::vector<rx::CompileConfig,std::allocator<rx::CompileConfig> > & configs, const _D3D_SHADER_MACRO * overrideMacros, ID3D10Blob * * outCompiledBlob, std::basic_string<char,std::char_traits<char>,std::allocator<char> > * outDebugInfo) Line 234	C++
    libGLESv2.dll!rx::Renderer9::compileToExecutable(gl::InfoLog & infoLog, const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & shaderHLSL, rx::ShaderType type, const std::vector<gl::LinkedVarying,std::allocator<gl::LinkedVarying> > & transformFeedbackVaryings, bool separatedOutputBuffers, rx::D3DWorkaroundType workaround, rx::ShaderExecutable * * outExectuable) Line 2974	C++
    libGLESv2.dll!rx::ProgramD3D::getVertexExecutableForInputLayout(const gl::VertexFormat * inputLayout, rx::ShaderExecutable * * outExectuable) Line 900	C++
    libGLESv2.dll!rx::ProgramD3D::compileProgramExecutables(gl::InfoLog & infoLog, gl::Shader * fragmentShader, gl::Shader * vertexShader, int registers) Line 930	C++
    libGLESv2.dll!gl::ProgramBinary::link(const gl::Data & data, gl::InfoLog & infoLog, const gl::AttributeBindings & attributeBindings, gl::Shader * fragmentShader, gl::Shader * vertexShader, const std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > > & transformFeedbackVaryings, unsigned int transformFeedbackBufferMode) Line 549	C++
    libGLESv2.dll!gl::Program::link(const gl::Data & data) Line 256	C++
    libGLESv2.dll!gl::Context::linkProgram(unsigned int program) Line 647	C++
    libGLESv2.dll!glLinkProgram(unsigned int program) Line 3700	C++
    Qt5Gui.dll!QOpenGLShaderProgram::link() Line 930	C++
    Qt5Gui.dll!QOpenGLTextureBlitter::create() Line 259	C++
    Qt5Gui.dll!QPlatformBackingStore::composeAndFlush(QWindow * window, const QRegion & region, const QPoint & offset, QPlatformTextureList * textures, QOpenGLContext * context, bool translucentBackground) Line 250	C++
    Qt5Widgets.dll!QWidgetBackingStore::qt_flush(QWidget * widget, const QRegion & region, QBackingStore * backingStore, QWidget * tlw, const QPoint & tlwOffset, QPlatformTextureList * widgetTextures, QWidgetBackingStore * widgetBackingStore) Line 115	C++
    Qt5Widgets.dll!QWidgetBackingStore::flush(QWidget * widget) Line 1246	C++
    Qt5Widgets.dll!QWidgetBackingStore::doSync() Line 1234	C++
    Qt5Widgets.dll!QWidgetBackingStore::sync(QWidget * exposedWidget, const QRegion & exposedRegion) Line 960	C++
    Qt5Widgets.dll!QWidgetPrivate::syncBackingStore(const QRegion & region) Line 1897	C++
    Qt5Widgets.dll!QWidgetWindow::event(QEvent * event) Line 255	C++
    Qt5Widgets.dll!QApplicationPrivate::notify_helper(QObject * receiver, QEvent * e) Line 3723	C++
    Qt5Widgets.dll!QApplication::notify(QObject * receiver, QEvent * e) Line 3685	C++
    Qt5Core.dll!QCoreApplication::notifyInternal(QObject * receiver, QEvent * event) Line 935	C++
    Qt5Gui.dll!QGuiApplicationPrivate::processExposeEvent(QWindowSystemInterfacePrivate::ExposeEvent * e) Line 2611	C++
    Qt5Gui.dll!QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent * e) Line 1676	C++
    Qt5Gui.dll!QWindowSystemInterface::sendWindowSystemEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 573	C++
    Qt5Gui.dll!QWindowSystemInterface::flushWindowSystemEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 558	C++
    qwindows.dll!QWindowsWindow::handleWmPaint(HWND__ * hwnd, unsigned int message, unsigned __int64 __formal, __int64 __formal) Line 1496	C++
    qwindows.dll!QWindowsContext::windowsProc(HWND__ * hwnd, unsigned int message, QtWindows::WindowsEventType et, unsigned __int64 wParam, __int64 lParam, __int64 * result) Line 1013	C++
    qwindows.dll!qWindowsWndProc(HWND__ * hwnd, unsigned int message, unsigned __int64 wParam, __int64 lParam) Line 1250	C++
    


  • WebEngine is too buggy to be useful. I don't understand what do Qt developers think; they deprecated WebKit, but they didn't create any alternative; WebEngine is not alternative, because it doesn't work 60% of times.


  • Lifetime Qt Champion

    Hi,

    @Thuan_Firelight I'd recommend posting that question on the QtWebEngine mailing list. You'll find there QtWebEngine developers/maintainers.

    @Good-Guy Please stop posting such useless comments, they are not useful nor helping @Thuan_Firelight. The reasons for why QtWebKit has been deprecated have already been explained. Since you're not happy with that, then you should take a look at @Konstantin-Tokarev QtWebKit reboot.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.