2012-11-30 11 views
5

मेरे पास एक बहु-प्रक्रिया प्रोग्राम है जिसे एमआईपीएस सीपीयू पर यूक्लिब के साथ चलाया गया है और इसे जीसीसी 4.5.3 के साथ संकलित किया गया है। प्रक्रिया में से एक (यह नाम "टीवी" है) को एक साझा लाइब्रेरी (libtest.so) से जुड़ा होना आवश्यक है जो मेरे द्वारा भी लिखा गया है। "टीवी" प्रक्रिया सी ++ में लिखी गई है और libtest.so सीसाझा लाइब्रेरी लोडिंग डीबग कैसे करें

मैंने libtest.so से elf हेडर को भी डंप किया है, इसमें पीआईसी और सीपीआईसी ध्वज सेट दोनों हैं, इसलिए मुझे लगता है कि लाइब्रेरी का निर्माण ठीक है।

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

मैं निम्नलिखित

  1. की कोशिश की है, तो मैं इस प्रक्रिया को जोड़ने से libtest.so हटाने, और libtest.so के लिए किसी भी संदर्भ निकालें, "टीवी" प्रक्रिया किसी भी मुद्दे के बिना चला सकते हैं।

  2. यदि मैं libtest.so के किसी भी संदर्भ को हटा देता हूं लेकिन कृपया libtest.so को जोड़ने की प्रक्रिया में रखें, तो "टीवी" प्रक्रिया अभी भी नहीं चलती है।

  3. मैंने एलडी_डीईबीयूजी = सभी को डीबग करने के लिए उपयोग करने का प्रयास किया है, लेकिन यह मेरे बोर्ड में काम नहीं करता है क्योंकि कोई वैध आउटपुट नहीं है।

तो मुझे लगता है कि ld libestest लोड करने का प्रयास करते समय कुछ गलत हो गया था। इसलिए जब "टीवी" प्रक्रिया शुरू हो रही है। लेकिन मुझे नहीं पता कि कैसे डिबग करना है? मुझे यह कैसे पता लगाना चाहिए कि libtest.so का कौन सा हिस्सा समस्या पैदा कर रहा है?

कोई भी सुझाव स्वागत है। अग्रिम में धन्यवाद।

+1

क्या आपने 'स्ट्रेस' का प्रयास किया था? – mattn

+2

हम्म, बहुत ही रोचक सवाल। आपको लगता है कि आप libtest को नियंत्रित करते हैं, तो आप एक बड़ा फायदा उठाने लगते हैं - इसलिए आप समस्या को एक साधारण प्रक्रिया (टीवी नहीं) के साथ पुन: पेश करने का प्रयास कर सकते हैं, फिर समस्या को गायब होने तक धीरे-धीरे सबकुछ हटा दें, फिर जब तक आप कर सकें तब तक पुनः जोड़ें समस्या को इंगित करें (बाइनरी खोज शैली)। जब तक समस्या पुन: उत्पन्न नहीं हो जाती है * केवल * टीवी के साथ और एक unmodified libtest.so, किस मामले में, शुभकामनाएं? – Cameron

+0

@ मैटन मैंने स्ट्रेस का उपयोग किया है और पता लगाया है कि मुझे सिगबस मिल रहा है। अब मैं यह जानने का प्रयास करने जा रहा हूं कि इसका कारण क्या है। सुझाव के लिए बहुत बहुत धन्यवाद। – SSC

उत्तर

0

सुनिश्चित करें कि यह आपके एपीआई के लिए बाहरी सी घोषणा पर लापता होने से संबंधित नहीं है जिसे सी कार्यों के रूप में बुलाया जाना है।

+0

मुझे यकीन है कि यह अनुपलब्ध बाहरी "सी" घोषणा के कारण नहीं है, क्योंकि लिंकर लिंक नहीं करेगा क्योंकि फ़ंक्शन नाम C++ कंपाइलर द्वारा बदला जाएगा। – SSC

+0

आपका libtest.so सी संकलक के साथ संकलित है, इसलिए फ़ंक्शन नामों को उलझाया नहीं जाएगा।मैं सोच रहा हूं कि जब आप अपने टीवी एप्लिकेशन को संकलित करते हैं तो सी ++ कंपाइलर कैसा व्यवहार करेगा यदि आपकी हेडर फ़ाइल libtest.so एपीआई को निर्यात करती है तो बाहरी "सी" घोषणा नहीं होती है। [संदर्भ] (http://dsc.sun.com/solaris/articles/mixing.html#c_from_cpp) –

0

आपको लोड प्रक्रिया में त्रुटि है। तो सबसे सरल एप्लिकेशन लिखें जो आपकी लाइब्रेरी को लोड करता है और इसे तुरंत अनलोड करता है और इसे डीबग करता है।

संबंधित मुद्दे