2015-05-25 9 views
5

के साथ शुद्ध सी प्रोग्राम की रिमोट डीबगिंग मैं एंड्रॉइड डिवाइस पर एक शुद्ध C प्रोग्राम को दूरस्थ रूप से डीबग करने का प्रयास कर रहा हूं। एंड्रॉइड डिवाइस (लक्ष्य) यूएसबी के माध्यम से मेजबान मशीन से जुड़ा हुआ है।जीडीबी

मैं क्या किया था: लक्ष्य से कॉपी किया गया निम्न फ़ाइलें: /system/lib, /vendor/lib, /system/bin/app_process, और /system/bin/linker

लक्ष्य:

  • लक्ष्य डिवाइस
  • भेजा exe कि मैं ./gdbserver :5039 exec
    • इस मूल रूप से कार्यान्वित का उपयोग कर
    • लक्ष्य पर runned gdb सर्वर डिबग करने के लिए चाहते हैं NDK से कॉपी किया गया gdbserver प्रक्रिया, और pid

मेजबान:

  • बंदरगाह सक्षम adb forward tcp:5039 tcp:5039
  • runned: arm-eabi-gcc exec
  • gdb में फिर
  • :
    • set solib-search-path ..., पुस्तकालयों है कि मैं लक्ष्य
    • target remote :5039

arm-eabi-gcc दूरस्थ प्रक्रिया से कनेक्ट कर सकते से पहले खींच लिया साथ, और यहां तक ​​जारी रखने के लिए (c) निष्पादन। हालांकि, मैं ब्रेकपॉइंट्स सेट नहीं कर सकता। यदि मैं करता हूं, तो मुझे निम्न त्रुटि मिलती है: Cannot access memory at address xxx

क्या मुझे यहां कुछ याद आ रही है?

धन्यवाद।

+1

संबंधित: [डीबग देशी एंड्रॉइड एप्लिकेशन] (http://stackoverflow.com/q/18143331), [ndk-gdb का उपयोग करके देशी कोड को डीबग कैसे करें] (http://stackoverflow.com/q/17593284), [मूल ऐप डीबग करते समय Gdbserver अजीब त्रुटि] (http://stackoverflow.com/q/26317509), [एंड्रॉइड एनडीके देशी ऐप्स डिबगिंग] (http://stackoverflow.com/q/8934575), [एंड्रॉइड में डीबग मूल कोड लाइब्रेरी] (http://stackoverflow.com/q/12638849), आदि – jww

उत्तर

0

तो, पर, जीडीबी खोल में, रिमोट के लक्षित बंदरगाह को निर्दिष्ट करने से पहले, मुझे shared टाइप करना चाहिए। यह आदेश साझा प्रतीकों को लोड करता है।

इसके अलावा, संकलन के लिए, मैंने -ggdb का उपयोग किया।

+0

मुझे विश्वास नहीं है कि '-ggdb' का असर है। जीडीबी लोगों ने मुझे कुछ साल पहले अपनी मेलिंग सूची में बताया था। वह बदल गया हो सकता है। – jww

+0

emm, तो gdb डीबगिंग प्रोग्राम के प्रतीक लोड कर सकते हैं! – Paschalis