(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

Reply via email to