2010-09-09 10 views
7

के साथ मैंने एंड्रॉइड एनडीके आर 4 से "ndk-gdb" के डीबग टूल के बारे में सीखा। अब मैं हैलो-जेनी नमूना डीबग करना शुरू कर सकता हूं (हालांकि कुछ समस्या मौजूद है)।ndk-gdb एकाधिक इतने libs

लेकिन, मेरे अपने एंड्रॉइड अनुप्रयोगों के लिए, मेरे पास उपयोग करने के लिए कई libs हैं, बड़ी संख्या में c/C++ फ़ाइलों से निर्मित हैं। मैं इन फ़ाइलों को ndk-build के साथ बनाने के लिए उपयोग करता था, और फिर इन फ़ाइलों को $ PROJECT/libs निर्देशिका के अंतर्गत कॉपी करता हूं, और यह डिबगिंग के बिना ठीक काम करता है। लेकिन अब मैं ndk-gdb के साथ एक बहुत lib को डीबग करना चाहता हूं। जब मैंने ndk-gdb शुरू किया, तो यह शिकायत करता है कि कोई प्रतीक तालिका लोड नहीं होती है।

मैं इन सभी फ़ाइलों को $ PROJECT/bin/ndk/local/armeabi में भी कॉपी करता हूं (डिफ़ॉल्ट निर्देशिका की तरह लगता है जहां gdb प्रतीक तालिका लोड करने का प्रयास करता है)। और फिर भी, यह काम नहीं करता है।

शायद ndk-gdb मेरी कॉपी करने के बाद मेरी फ़ाइलों को ट्रैक नहीं कर सकता है? या फिर यह किसी भी प्रतीक सारणी को लोड क्यों नहीं कर सकता है, भले ही मैं उन्हें $ PROJECT/bin/ndk/local/armeabi के अंतर्गत कॉपी करता हूं?

क्या कोई इस मुद्दे से पहले मिल गया है?

बहुत बहुत धन्यवाद!

उत्तर

10

मुझे लगता है कि आप उन्हें गलत फ़ोल्डर में कॉपी कर रहे हैं। पुरानी एनडीके ने बिन फ़ोल्डर में फ़ाइलों की प्रतिलिपि बनाई; नया एक उन्हें ओबीजे फ़ोल्डर में कॉपी करता है, और यही वह जगह है जहां यह प्रतीकों की तलाश करने के लिए जीडीबी को इंगित करता है।

साथ ही, सुनिश्चित करें कि आप प्री-स्ट्रिपेड .so फ़ाइलों को ओबीजे फ़ोल्डर में कॉपी करते हैं, और वही फ़ाइलें नहीं जिन्हें आप libs फ़ोल्डर में कॉपी करते हैं: बिल्ड प्रक्रिया के हिस्से के रूप में, libs फ़ोल्डर में फ़ाइलों के पास है प्रतीकों और डीबगिंग जानकारी से छीन लिया गया है। तो आप अपनी प्रत्येक की दो प्रतियां भी रखना चाहेंगे। इसलिए फाइलें: एंड्रॉइड डिवाइस पर स्थापित करने के लिए libs फ़ोल्डर में से एक, और ओबीजे फ़ोल्डर से एक को जीडीबी के लिए इंस्टॉल करने के लिए इंस्टॉल करने के लिए।

आप डीबग फ़ाइलों को अपने ऐप पेड़ में ओबीजे फ़ोल्डर में कॉपी करने के बजाय, अन्य बिल्ड निर्देशिका obj/फ़ोल्डर्स को gdb के प्रतीक खोज पथ में जोड़ सकते हैं। ndk-build एक फ़ाइल, gdb.setup सेट करता है, जिसमें से शुरू होने वाली एक पंक्ति शामिल होती है जो solib-search-path सेट करती है। आप उस रेखा पर एक कोलन से अलग पथ डाल सकते हैं जिसमें आपके सभी लक्ष्य obj/local/जो भी फ़ोल्डर्स शामिल हैं, और फिर gdb प्रतीक पाएंगे।

+0

आपके उत्तर के लिए बहुत बहुत धन्यवाद! मैं कल आपके समाधान का प्रयास करूंगा। और, क्या आप एनडीके की आंतरिक निर्माण प्रक्रिया के बारे में अधिक दस्तावेज दे सकते हैं? कुछ "छीन लिया" की तरह, मैंने कभी इसके बारे में नहीं सुना। – MaratSafinWang

+1

यूनिक्स कमांड "स्ट्रिप" देखें: http://unixhelp.ed.ac.uk/CGI/man-cgi?strip - अगर आप काम पर Google में "मैन स्ट्रिप" टाइप करते हैं तो बस सावधान रहें। पहले लिंक पर आश्चर्यचकित था। :) – SomeCallMeTim

+0

बिल्ड प्रक्रिया के अन्य चरणों के लिए, यह एनडीके पैकेज में दस्तावेज़/ओवरव्यू.टी.टी.टी. में प्रलेखित है: "अंतिम चरण की प्रतिलिपि, सफलता के मामले में, आपके आवेदन के रूट प्रोजेक्ट को आपके आवेदन की आवश्यकता है निर्देशिका।" – SomeCallMeTim

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