[Interest] Debugging a double dealloc
Crocker, William
William.Crocker at analog.com
Wed Sep 23 13:55:05 CEST 2020
Valgrind.
> -----Original Message-----
> From: Interest <interest-bounces at qt-project.org> On Behalf Of Ben Haller via
> Interest
> Sent: Wednesday, September 23, 2020 7:50 AM
> To: qt qt <interest at qt-project.org>
> Subject: [Interest] Debugging a double dealloc
>
> [External]
>
> Hi all. I’m trying to figure out what appears to be a double dealloc problem of some
> sort. I’m sure the actual bug is in my code (I’m trying to get a window with complex
> subsidiary windows, etc., to disassemble and free the things it owns, without freeing
> itself), but the backtrace at the point that the crash happens doesn’t have any of my
> code in it at all. I’ve appended the full backtrace below my signature, in case it is
> informative; maybe somebody has seen this pattern before and knows what I’m
> likely to be doing wrong. My code does not use QFontCache or QScopedPointer at
> all, so it’s hard to guess where my bug might be.
>
> My question, though, is bigger: how would folks here recommend debugging a
> double dealloc in a Qt-based app, running under Qt Creator? I’m coming from the
> Cocoa/Xcode world, and in that world there’s a very nice tool called NSZombie: you
> set a flag, and then whenever an object would be deallocated, it instead turns into an
> NSZombie object that produces nice console logs if anybody ever tries to use that
> memory as an object again. But that’s for NSObject. Is there something similar in
> the Qt world, such that I could get a console log or a break in the debugger at the
> point where a C++/Qt object that has been dealloced gets touched again? Or if not,
> how would you recommend approaching this? Thanks for any help.
>
> Cheers,
> -B.
>
> Benjamin C. Haller
> Messer Lab
> Cornell University
>
>
> 1 QScopedPointer<QObjectData,
> QScopedPointerDeleter<QObjectData>>::operator->() const
> qscopedpointer.h 118 0x10201b594
> 2 decltype(fp.operator->()) qGetPtrHelper<QScopedPointer<QObjectData,
> QScopedPointerDeleter<QObjectData>> const>(QScopedPointer<QObjectData,
> QScopedPointerDeleter<QObjectData>> const&)
> qglobal.h 1133 0x10201b594
> 3 QObject::d_func() const
> qobject.h 132 0x10201b594
> 4 QObject::thread() const
> qobject.cpp 1512 0x10201b594
> 5 QOpenGLVertexArrayObjectPrivate::destroy()
> qopenglvertexarrayobject.cpp 212 0x101b21481
> 6 QOpenGLVertexArrayObject::destroy()
> qopenglvertexarrayobject.cpp 424 0x101b217cc
> 7 QOpenGLVertexArrayObject::~QOpenGLVertexArrayObject()
> qopenglvertexarrayobject.cpp 392 0x101b217c3
> 8 QOpenGLVertexArrayObject::~QOpenGLVertexArrayObject()
> qopenglvertexarrayobject.cpp 391 0x101b217b9
> 9 QOpenGLTextureGlyphCache::~QOpenGLTextureGlyphCache()
> qopengltextureglyphcache.cpp 93 0x101b1cacd
> 10 QOpenGLTextureGlyphCache::~QOpenGLTextureGlyphCache()
> qopengltextureglyphcache.cpp 88 0x101b1cbce
> 11 QOpenGLTextureGlyphCache::~QOpenGLTextureGlyphCache()
> qopengltextureglyphcache.cpp 88 0x101b1cbc9
> 12
> QExplicitlySharedDataPointer<QFontEngineGlyphCache>::~QExplicitlySharedData
> Pointer()
> qshareddata.h 184 0x101883c92
> 13
> QExplicitlySharedDataPointer<QFontEngineGlyphCache>::~QExplicitlySharedData
> Pointer()
> qshareddata.h 184 0x101883c74
> 14 QFontEngine::GlyphCacheEntry::~GlyphCacheEntry()
> qfontengine.cpp 1570 0x101883c74
> 15 QFontEngine::GlyphCacheEntry::~GlyphCacheEntry()
> qfontengine.cpp 1569 0x101883c74
> 16 void
> std::allocator_traits<std::allocator<std::__list_node<QFontEngine::GlyphCacheEntry
> , void
> *>>>::__destroy<QFontEngine::GlyphCacheEntry>(std::integral_constant<bool,
> false>, std::allocator<std::__list_node<QFontEngine::GlyphCacheEntry, void *>>&,
> QFontEngine::GlyphCacheEntry *) memory 1732 0x101883c74
> 17 void
> std::allocator_traits<std::allocator<std::__list_node<QFontEngine::GlyphCacheEntry
> , void
> *>>>::destroy<QFontEngine::GlyphCacheEntry>(std::allocator<std::__list_node<QF
> ontEngine::GlyphCacheEntry, void *>>&, QFontEngine::GlyphCacheEntry *)
> memory 1595 0x101883c74
> 18 std::__list_imp<QFontEngine::GlyphCacheEntry,
> std::allocator<QFontEngine::GlyphCacheEntry>>::clear()
> list 733 0x101883c74
> 19 std::__list_imp<QFontEngine::GlyphCacheEntry,
> std::allocator<QFontEngine::GlyphCacheEntry>>::~__list_imp()
> list 712 0x101883c24
> 20 std::list<QFontEngine::GlyphCacheEntry>::~list()
> list 805 0x101883c24
> 21 std::list<QFontEngine::GlyphCacheEntry>::~list()
> list 805 0x101883c24
> 22 QHashNode<void const *,
> std::list<QFontEngine::GlyphCacheEntry>>::~QHashNode()
> qhash.h 147 0x101883c24
> 23 QHashNode<void const *,
> std::list<QFontEngine::GlyphCacheEntry>>::~QHashNode()
> qhash.h 147 0x101883c24
> 24 QHash<void const *,
> std::list<QFontEngine::GlyphCacheEntry>>::deleteNode2(QHashData::Node *)
> qhash.h 563 0x101883c24
> 25 QHashData::free_helper(void ( *)(QHashData::Node *))
> qhash.cpp 572 0x101e5db39
> 26 QHash<void const *,
> std::list<QFontEngine::GlyphCacheEntry>>::freeData(QHashData *)
> qhash.h 603 0x10187a47b
> 27 QHash<void const *, std::list<QFontEngine::GlyphCacheEntry>>::~QHash()
> qhash.h 250 0x10187a46f
> 28 QHash<void const *, std::list<QFontEngine::GlyphCacheEntry>>::~QHash()
> qhash.h 250 0x10187a44f
> 29 QFontEngine::~QFontEngine()
> qfontengine.cpp 277 0x10187a44f
> 30 QCoreTextFontEngine::~QCoreTextFontEngine()
> qfontengine_coretext.mm 215 0x105b7cf8e
> 31 QCoreTextFontEngine::~QCoreTextFontEngine()
> qfontengine_coretext.mm 215 0x105b7cf89
> 32 QFontEngineMulti::~QFontEngineMulti()
> qfontengine.cpp 1782 0x101880039
> 33 QFontEngineMulti::~QFontEngineMulti()
> qfontengine.cpp 1778 0x10188012e
> 34 QFontEngineMulti::~QFontEngineMulti()
> qfontengine.cpp 1778 0x101880129
> 35 QFontCache::clear()
> qfont.cpp 2861 0x1018762eb
> 36 QFontCache::~QFontCache()
> qfont.cpp 2817 0x10187603c
> 37 QFontCache::~QFontCache()
> qfont.cpp 2816 0x1018763ee
> 38 QFontCache::~QFontCache()
> qfont.cpp 2816 0x1018763e9
> 39 QThreadStorageData::set(void *)
> qthreadstorage.cpp 162 0x101e25777
> 40 QGuiApplicationPrivate::~QGuiApplicationPrivate()
> qguiapplication.cpp 1694 0x1017ca490
> 41 QApplicationPrivate::~QApplicationPrivate()
> qapplication.cpp 184 0x10116f81e
> 42 QApplicationPrivate::~QApplicationPrivate()
> qapplication.cpp 184 0x10116f819
> 43 QScopedPointerDeleter<QObjectData>::cleanup(QObjectData *)
> qscopedpointer.h 60 0x10201c06c
> 44 QScopedPointer<QObjectData,
> QScopedPointerDeleter<QObjectData>>::~QScopedPointer()
> qscopedpointer.h 107 0x10201c061
> 45 QScopedPointer<QObjectData,
> QScopedPointerDeleter<QObjectData>>::~QScopedPointer()
> qscopedpointer.h 105 0x10201c05d
> 46 QObject::~QObject()
> qobject.cpp 1119 0x10201c05d
> 47 QApplication::~QApplication()
> qapplication.cpp 837 0x101171b3d
> 48 main
> main.cpp 246 0x100012256
> 49 start
> (x86_64) /usr/lib/system/libdyld.dylib 0x7fff6b461cc9
>
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> https://lists.qt-project.org/listinfo/interest
More information about the Interest
mailing list