2011-02-11 11 views
20

क्या कोई मुझे बता सकता है कि ndk-gdbgdb-mode का उपयोग कर emacs के भीतर से कैसे चल सकता है? मैं वर्तमान में इसे खोल बफर में चला रहा हूं। जब मैं ब्रेक या कदम करता हूं तो जीडीबी में वर्तमान पीसी के साथ एक स्रोत फ़ाइल बफर को स्वचालित रूप से सिंक करने का एक तरीका है। कुछ भी, स्रोत से ब्रेक सेट करने की तरह, बफर जो gdb स्थानीय आदि दिखाते हैं, और gdb कमांड के लिए कुंजी शॉर्टकट ग्रेवी होंगे।emacs के साथ एंड्रॉइड एनएनडीके के एनडीके-जीडीबी का एकीकरण?

पृष्ठभूमि: मैं एंड्रॉइड मोड के साथ एंड्रॉइड मोड के साथ ओएसएक्स 10.6.6 पर 2010-12-15 के जीएनयू एमएक्स 23.1.90.1 (i386-apple-darwin10.5.0, एनएस सेब-एपकिट -1038.35) में विकास कर रहा हूं, एंड्रॉइड मोड का उपयोग कर एंड्रॉइड लक्ष्य के लिए -ndk-r5b और मिश्रित जावा/सी/सी ++ कोड।

ईमैक्स के भीतर एंड्रॉइड मोड और खोल (चल ​​रहा ndk-gdb) मुझे बस मुझे जो कुछ चाहिए, उसे देखने की अनुमति देता है, लेकिन अगर मैं डीबगर के साथ सिंक करने के लिए स्रोत बफर प्राप्त कर सकता हूं, या मेरा सेटअप अधिक सुविधाजनक होगा EmacsWiki here में वर्णित के बराबर।

एफवाईआई, मैं वर्तमान में जावा साइड डिबगिंग और विकास के लिए ग्रहण का उपयोग कर रहा हूं, लेकिन sequoyah की उपलब्धता के बावजूद इसे मूल कार्य के लिए स्थापित करने में अस्थिर और मुश्किल लग रहा है, और इसके अलावा, ग्रहण कोई इमैक नहीं है। NDK-gdb gdb कमान के रूप में साथ

[संलग्न]

रनिंग एमएक्स gdb (देखें नीचे) एक बफर gud एक modeline कहने के साथ कहा जाता है में परिणाम "(डीबगर: चलाने [आरंभ ...]) "। बफर gdb आदेशों को स्वीकार नहीं करता, न ही यह Emacs gdb आदेशों को स्वीकार करता है - (सुश्री, MN आदि परिणाम में <>

आउटपुट:

 
Current directory is /Users/jpschelter/ 
Android NDK installation path: /Developer/android-ndk-r5b 
Using specific adb command: /Developer/android-sdk-mac_x86/platform-tools/adb 
... 
... ... 
... 
(no debugging symbols found) 
warning: Unable to find dynamic linker breakpoint function. 
GDB will be unable to debug shared library initializers 
and track explicitly loaded dynamic code. 
0xafd0e21c in nanosleep() from /Developer/Projects/ECS/DIGG/Projects/droid/obj/local/armeabi/libc.so 
(gdb) Undefined command: "1-inferior-tty-set". Try "help". 
(gdb) Undefined command: "2-gdb-set". Try "help". 
(gdb) Undefined command: "3-gdb-set". Try "help". 
(gdb) Undefined command: "4-file-list-exec-source-files". Try "help". 
(gdb) Undefined command: "5-file-list-exec-source-file". Try "help". 
(gdb) Undefined command: "6-gdb-show". Try "help". 
(gdb) Undefined command: "7-stack-info-frame". Try "help". 
(gdb) Undefined command: "8-thread-info". Try "help". 
(gdb) Undefined command: "9-break-list". Try "help". 

बफ़र, कहा जाता *threads of*, *input/output of* और *breakpoints of* भी बनाई गई हैं, लेकिन खाली हैं।

मेरी Emacs की gdb-mi.el स्रोत के माध्यम से ब्राउज़िंग, और की तुलना में gdb-डिबग-लॉग इन करें उत्पादन, यह gdb मील की तरह दिखता है एक gdb निष्पादन के लिए ये पैरामीटर भेजने की कोशिश कर रहा है, लेकिन जीडीबी सर्वर जवाब नहीं दे रहा है अपेक्षित आदेशों में प्रवेश करना?

ध्यान दें कि ndk-gdb के लिए कमांड लाइन के साथ एमएक्स गड-जीडीबी चलाना परिणामस्वरूप शेल के भीतर ndk-gdb चलाने के बराबर होता है, इसलिए यह मुद्दा emacs में gdb-mode के कॉन्फ़िगरेशन के भीतर होता है ।

+0

तो मेरी व्याख्या यहां है कि ndk-gdb सही ढंग से चलाया जाता है, लेकिन यह emacs '** gdb-mode ** कमांड की व्याख्या कर रहा है और ** gdb-server ** के साथ सही ढंग से संचार नहीं कर रहा है, जो कि होस्ट-साइड है डिबगिंग कनेक्शन। – forksandhope

उत्तर

3

क्या आपने यह कोशिश की है?

एंड्रॉइड-एसडीके-मैक_एक्स 86/प्लेटफार्म-टूल्स और एंड्रॉइड-एनडीके-आर 5 बी पाथ पर्यावरण में जोड़ें। इसके बाद, gdb मोड को ndk-gdb स्क्रिप्ट के साथ शुरू करें।

M-x gdb 
Run gdb (like this): ndk-gdb --verbose --start --project=your_NDK_project_dir 
+0

अच्छी तरह से, अजीब रूप से मेरे पैथ पर्यावरण चर को emacs-gdb द्वारा नहीं उठाया जा रहा है .. मुझे यह 'डेवलपर/एंड्रॉइड-एनडीके-आर 5 बी/एनडीके-जीडीबी --verbose --start --adb =/डेवलपर करना है सही ढंग से चलाने के लिए ndk-gdb प्राप्त करने के लिए/android-sdk-mac_x86/प्लेटफ़ॉर्म-टूल/adb --project =/डेवलपर/प्रोजेक्ट/testproj '। – forksandhope

+0

जैसा कि आप उपरोक्त मेरे संपादन में देखेंगे, हां, मैंने इस तरह जीडीबी चलाने की कोशिश की है, और इसके परिणामस्वरूप emacs और gdb-server निष्पादन योग्य के बीच एक उपयोगी कनेक्शन नहीं है जो ndk-gdb चलता है। ** क्या यह आपके लिए काम करता है? ** यदि हां, तो क्या आपने इसे काम करने के लिए कोई विशिष्ट कॉन्फ़िगरेशन किया है? – forksandhope

+0

मैंने कई Emacs संस्करणों की कोशिश की, संस्करण 23.2 (9.0) काम करता है, लेकिन संस्करण 24.0.50 (9.0) आपकी स्थिति के समान काम नहीं करता है (अपरिभाषित कमांड: "1-अवरक्त-tty-set")। मेरे पास कोई .emacs फ़ाइलें नहीं हैं, मुझे यकीन नहीं है कि अंतर। –

4

एमएक्स के तहत जीडीबी चलाने के दौरान मुझे वही समस्या थी: * gud * विंडो कमांड का जवाब नहीं दे रही थी। हालांकि, ndk-gdb एक खोल में अच्छी तरह से काम कर रहा था। इसे emacs gud UI के तहत काम करने के लिए, मुझे ndk-gdb स्क्रिप्ट को थोड़ा सा संशोधित करना पड़ा।

GDB (अंतिम पंक्ति) के लिए कॉल पर, ऐसा करते हैं:

$GDBCLIENT --annotate=3 -x `native_path $GDBSETUP` 

--annotate = 3 विकल्प gud इंटरफेस, यह इसके बिना काम नहीं कर सकते हैं (यही कारण है कि * gud * नहीं था है Emacs के लिए अनिवार्य है जवाब)।

लेकिन आप आधा रास्ते हैं। अब यह काम करेगा, लेकिन केवल अगर आप प्रोजेक्ट की रूट (जैसे AndroidManifest.xml) पर फ़ाइल से बफर में रहते हैं तो ndk-gdb का आह्वान करते हैं। चूंकि यह अधिकतर समय की संभावना नहीं है क्योंकि आप सी/सी ++ प्रोग्रामर हैं और जिन स्रोतों पर आप काम कर रहे हैं वे जेनी निर्देशिका या गहरे हैं, आपको थोड़ा और करने की आवश्यकता है। Ndk-gdb स्क्रिप्ट थोड़ी छोटी गाड़ी है और यह आपको खुशी से इस पर भ्रमित कर देगी (और जीडीबी स्वयं भी बहुत मदद नहीं करेगा)।

"PROJECT = $ OPTION_PROJECT" के लिए स्क्रिप्ट खोजें। आप लंबे समय तक होंगे ... और ... फाई क्लॉज जो परियोजना की जड़ को खोजने का प्रभारी है (यदि इसे - प्रोजेक्ट विकल्प के साथ नहीं दिया गया है, हालांकि ऐसा करने से समस्या हल नहीं होगी I के बारे में बात करो, नीचे देखें)। फाई के बाद, इस लाइन को जोड़ें:

cd $PROJECT 

कुछ अस्पष्ट कारणों से, स्क्रिप्ट परियोजना रूट निर्देशिका में सीडी नहीं करता है। Gdb.setup फ़ाइल से निपटने पर यह बहुत गलत व्यवहार होता है जहां स्क्रिप्ट प्रोजेक्ट रूट पर मानी जाती है। इस लाइन को जोड़ना इसे ठीक करेगा।

सुनिश्चित करें कि आप हमेशा की तरह कमांड के साथ Emacs के भीतर NDK-gdb को कॉल करते हैं:

(gdb "ndk-gdb ...") 

नहीं उपयोग gud-gdb (अजीब तरह से करते हैं, इस gdb का उपयोग करने का वर्ष Emacs तरीका है और साथ कोई संबंध नहीं है अच्छा यूआई जिसे आप खोज रहे हैं)। बदलें ... अपने तर्कों के साथ, (concat ...) या आप चाहते हैं कि कुछ भी। मैं दृढ़ता से - प्रोजेक्ट विकल्प का उपयोग करने की सलाह देता हूं। यदि आप नहीं करते हैं और आप प्रोजेक्ट से बाहर की गई फ़ाइल के लिए बफर में हैं, तो स्क्रिप्ट रूट नहीं मिलेगी। इससे भी बदतर, अगर आप किसी अन्य एंड्रॉइड प्रोजेक्ट में फ़ाइल में हैं, तो उसे उस परियोजना की जड़ मिल जाएगी (शायद gdb.setup की प्रतिलिपि बनाना और gdb सत्र में विफल होने से पहले इसमें सामान)। तो उस लानत - प्रोजेक्ट विकल्प दें। आप Emacs डेस्कटॉप कमांड सेट का उपयोग कर रहे हैं, तो ऐसा करते हैं:

(gdb (concat "ndk-gdb --project=" desktop-dirname ...)) 

(अपने .emacs.desktop संभालने ज़ाहिर है, परियोजना की जड़ में है)।

अब आप अंततः गड़बड़ी यूआई के साथ डीबग कर सकते हैं, स्रोत स्तर पर ब्रेकपॉइंट्स सेट कर सकते हैं। ध्यान दें कि मैं emacs 23.3.1 (gdb-ui.el) का उपयोग करता हूं, इसलिए इसके लिए काम करने के लिए 24 होने की आवश्यकता नहीं है।

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