(To be more clear: my hardware, a “Late 2019” MacBook Pro, can’t even run macOS 10.13 – or 10.14, for that matter. 10.15 is required on my hardware, so Valgrind is out of the question, at least on this machine. If I can find hardware that can run 10.13, then I can see whether Valgrind’s “preliminary” support will work on it, I guess. But if there is another debugging technique that doesn’t depend on Valgrind, it would make my life much easier...)
Cheers, -B. Benjamin C. Haller Messer Lab Cornell University > On Sep 23, 2020, at 8:08 AM, Ben Haller via Interest > <interest@qt-project.org> wrote: > > Thanks for the suggestion. However, this problem is only on macOS, and > Valgrind doesn’t appear to run on any macOS later than 10.12 (“preliminary” > support for 10.13, according to their website; I’m not sure what that means). > I’m on macOS 10.15.6, and I’m using Qt 5.14.2 which has a minimum macOS > version of 10.13, so Valgrind seems to be a no-go for at least one reason, > perhaps two reasons (depending on “preliminary”). > > Are there other approaches? > > Cheers, > -B. > > Benjamin C. Haller > Messer Lab > Cornell University > > >> On Sep 23, 2020, at 7:55 AM, Crocker, William <william.croc...@analog.com> >> wrote: >> >> 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 _______________________________________________ Interest mailing list Interest@qt-project.org https://lists.qt-project.org/listinfo/interest