[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