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++
-
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.