2011-12-29 26 views
5

मैंने सी ++ में एक एप्लीकेशन लिखा है जो क्यूटी 4.7.4 का उपयोग करता है। शुरू होने पर, यह कुछ स्वयं लिखित गतिशील पुस्तकालयों को लोड करता है जो क्यूटी का उपयोग भी करते हैं (यदि यह एक तरह से उपयोगी हो सकता है)।जब कभी बंद हो जाता है तो मेरा एप्लिकेशन कभी-कभी SIGSEGV के साथ क्रैश क्यों होता है?

जब अनुप्रयोग को बंद, कभी कभी यह और एक SIGSEGV साथ दुर्घटनाओं निम्नलिखित पश्व-अनुरेखन:

#0 malloc_consolidate (av=0x7ffff58b21c0) at malloc.c:5155 
#1 0x00007ffff5591659 in malloc_consolidate (av=0x7ffff58b21c0) at malloc.c:5115 
#2 _int_free (av=0x7ffff58b21c0, p=<optimized out>) at malloc.c:5034 
#3 0x00007ffff5594d7c in __GI___libc_free (mem=<optimized out>) at malloc.c:3738 
#4 0x00007ffff5e9e0ac in QString::free (d=0xdb0290) at tools/qstring.cpp:1186 
#5 0x00007fffe60b3d83 in ~QString (this=0xba0328, __in_chrg=<optimized out>) at ../../include/QtCore/../../src/corelib/tools/qstring.h:883 
#6 node_destruct (to=0xba0328, from=0xba0328, this=<optimized out>) at ../../include/QtCore/../../src/corelib/tools/qlist.h:420 
#7 QList<QString>::free (data=0xba0310, this=<optimized out>) at ../../include/QtCore/../../src/corelib/tools/qlist.h:744 
#8 0x00007fffe60c2b49 in ~QList (this=0xba0388, __in_chrg=<optimized out>) at ../../include/QtCore/../../src/corelib/tools/qlist.h:719 
#9 ~QStringList (this=0xba0388, __in_chrg=<optimized out>) at ../../include/QtCore/../../src/corelib/tools/qstringlist.h:66 
#10 ~SignalHook (this=0xba0358, __in_chrg=<optimized out>) at qdbusconnection_p.h:121 
#11 ~QHashNode (this=0xba0340, __in_chrg=<optimized out>) at ../../include/QtCore/../../src/corelib/tools/qhash.h:216 
#12 QHash<QString, QDBusConnectionPrivate::SignalHook>::deleteNode2 (node=0xba0340) at ../../include/QtCore/../../src/corelib/tools/qhash.h:519 
#13 0x00007ffff5e754da in QHashData::free_helper (this=0xd8aec0, node_delete=0x7fffe60c2ae0 <QHash<QString, QDBusConnectionPrivate::SignalHook>::deleteNode2(QHashData::Node*)>) at tools/qhash.cpp:271 
#14 0x00007fffe60ba733 in freeData (x=<optimized out>, this=<optimized out>) at ../../include/QtCore/../../src/corelib/tools/qhash.h:568 
#15 ~QHash (this=<optimized out>, __in_chrg=<optimized out>) at ../../include/QtCore/../../src/corelib/tools/qhash.h:284 
#16 ~QMultiHash (this=0xba3498, __in_chrg=<optimized out>) at ../../include/QtCore/../../src/corelib/tools/qhash.h:922 
#17 ~QMultiHash (this=0xba3498, __in_chrg=<optimized out>) at qdbusintegrator.cpp:998 
#18 QDBusConnectionPrivate::~QDBusConnectionPrivate (this=0xba33f0, __in_chrg=<optimized out>) at qdbusintegrator.cpp:998 
#19 0x00007fffe60ba939 in QDBusConnectionPrivate::~QDBusConnectionPrivate (this=0xba33f0, __in_chrg=<optimized out>) at qdbusintegrator.cpp:1016 
#20 0x00007fffe60afe43 in ~QDBusDefaultConnection (this=0xba55a0, __in_chrg=<optimized out>) at qdbusconnection.cpp:993 
#21 QGlobalStaticDeleter<QDBusDefaultConnection>::~QGlobalStaticDeleter (this=0x7fffe63102f8, __in_chrg=<optimized out>) at ../../include/QtCore/../../src/corelib/global/qglobal.h:1825 
#22 0x00007ffff5553821 in __run_exit_handlers (status=0, listp=0x7ffff58b05a8, run_list_atexit=true) at exit.c:78 
#23 0x00007ffff55538a5 in __GI_exit (status=<optimized out>) at exit.c:100 
#24 0x00007ffff5539314 in __libc_start_main (main=0x493935 <main(int, char**)>, argc=1, ubp_av=0x7fffffffde58, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffde48) at libc-start.c:258 
#25 0x0000000000421a99 in _start() 

और कभी कभी यह एक

#0 malloc_consolidate (av=0x7ffff58b21c0) at malloc.c:5155 
#1 0x00007ffff5591659 in malloc_consolidate (av=0x7ffff58b21c0) at malloc.c:5115 
#2 _int_free (av=0x7ffff58b21c0, p=<optimized out>) at malloc.c:5034 
#3 0x00007ffff5594d7c in __GI___libc_free (mem=<optimized out>) at malloc.c:3738 
#4 0x00007ffff5f4d5a9 in ~QVector (this=0x767c40, __in_chrg=<optimized out>) at ../../include/QtCore/../../src/corelib/tools/qvector.h:119 
#5 QGlobalStaticDeleter<QVector<QCustomTypeInfo> >::~QGlobalStaticDeleter (this=0x7ffff6274898, __in_chrg=<optimized out>) at ../../include/QtCore/../../src/corelib/global/qglobal.h:1825 
#6 0x00007ffff5553c3d in __cxa_finalize (d=0x7ffff6273d20) at cxa_finalize.c:56 
#7 0x00007ffff5e3e0a6 in __do_global_dtors_aux() from /usr/lib/x86_64-linux-gnu/libQtCore.so.4 
#8 0x00007fffffffd7c0 in ??() 
#9 0x00007fffffffdd30 in ??() 
#10 0x00007ffff5f9e5a1 in _fini() from /usr/lib/x86_64-linux-gnu/libQtCore.so.4 
#11 0x000000000000009f in ??() 
#12 0x00007ffff7deb105 in ??() from /lib64/ld-linux-x86-64.so.2 

या यह एक

#0 malloc_consolidate (av=0x7ffff58b21c0) at malloc.c:5155 
#1 0x00007ffff5591659 in malloc_consolidate (av=0x7ffff58b21c0) at malloc.c:5115 
#2 _int_free (av=0x7ffff58b21c0, p=<optimized out>) at malloc.c:5034 
#3 0x00007ffff5594d7c in __GI___libc_free (mem=<optimized out>) at malloc.c:3738 
#4 0x00007ffff5e86bbe in freeData (x=<optimized out>, this=<optimized out>) at ../../include/QtCore/../../src/corelib/tools/qmap.h:654 
#5 ~QMap (this=0x10af198, __in_chrg=<optimized out>) at ../../include/QtCore/../../src/corelib/tools/qmap.h:187 
#6 ~QMap (this=0x10af198, __in_chrg=<optimized out>) at tools/qvector.h:430 
#7 ~QRegExpAutomatonState (this=0x10af180, __in_chrg=<optimized out>) at tools/qregexp.cpp:947 
#8 QVector<QRegExpAutomatonState>::free (x=0x10af0f0, this=<optimized out>) at tools/qvector.h:438 
#9 0x00007ffff5e969a9 in clear (this=<optimized out>) at tools/qcache.h:139 
#10 ~QCache (this=<optimized out>, __in_chrg=<optimized out>) at tools/qcache.h:103 
#11 QGlobalStaticDeleter<QCache<QRegExpEngineKey, QRegExpEngine> >::~QGlobalStaticDeleter (this=0x7ffff6274368, __in_chrg=<optimized out>) at ../../include/QtCore/../../src/corelib/global/qglobal.h:1825 
#12 0x00007ffff5553821 in __run_exit_handlers (status=0, listp=0x7ffff58b05a8, run_list_atexit=true) at exit.c:78 
#13 0x00007ffff55538a5 in __GI_exit (status=<optimized out>) at exit.c:100 
#14 0x00007ffff5539314 in __libc_start_main (main=0x493935 <main(int, char**)>, argc=1, ubp_av=0x7fffffffde58, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffde48) at libc-start.c:258 
#15 0x0000000000421a99 in _start() 

और वहाँ कुछ और हैं ...

मुझे लगता है कि वे सभी संबंधित हैं लेकिन मैं वास्तव में यह नहीं समझ सकता कि यह कैसे और क्यों होता है (ध्यान दें कि मेरे किसी भी कोड को सूचीबद्ध नहीं किया गया है)।

कुछ संकेतों के लिए आपको बहुत बहुत धन्यवाद, यह क्यों हो सकता है या मुझे कहां खोजना शुरू करना चाहिए।

उत्तर

6

मुझे मेरी समस्या का समाधान मिला: मैंने अपने मुख्य एप्लिकेशन और मेरे गतिशील पुस्तकालयों में एक स्थिर पुस्तकालय को जोड़ा। यह स्थैतिक पुस्तकालय क्यूटी का उपयोग कर रहा था जो वैश्विक चर का उपयोग करता है। आवेदन बंद करने पर गतिशील पुस्तकालयों को मेरे आवेदन से अनलोड किया गया था। इसके परिणामस्वरूप क्यूटी के वैश्विक चर को हटा दिया गया। लेकिन आवेदन के बंद होने के परिणामस्वरूप एसआईजीएसईजीवी में समाप्त होने के बाद एक ही वैश्विक वैरिएबल को हटा दिया गया।

समाधान स्थिर पुस्तकालय को गतिशील में बदलना था। अब वैश्विक चर केवल एक बार हटा दिए जाते हैं, क्योंकि सभी साझा पुस्तकालय और मुख्य अनुप्रयोग "समान" क्यूटी कोड का उपयोग कर रहे हैं।

2

कॉर्डम्प्स के ढेर फ्रेम से ऐसा लगता है कि आपने कहीं ढेर को दूषित कर दिया है या अमान्य पॉइंटर्स को खाली कर रहे हैं।

ऐसी समस्याओं को डीबग करने का सबसे अच्छा तरीका है वाल्ग्रिंड या तर्कसंगत शुद्धता प्लस जैसे मेमोरी प्रोफाइलिंग टूल के साथ अपना कोड प्रोफाइल करना (ऐसे कई टूल हैं जो Google खोज में मदद करनी चाहिए)। ये प्रोफाइलिंग टूल समस्या के मूल कारण को इंगित करेंगे।