Valgrind.
> -----Original Message----- > From: Interest <interest-boun...@qt-project.org> On Behalf Of Ben Haller via > Interest > Sent: Wednesday, September 23, 2020 7:50 AM > To: qt qt <interest@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@qt-project.org > https://lists.qt-project.org/listinfo/interest _______________________________________________ Interest mailing list Interest@qt-project.org https://lists.qt-project.org/listinfo/interest