2010-11-18 9 views
10

मैं थोड़ी देर के लिए एंड्रॉयड एमुलेटर को jdb कनेक्ट करने का प्रयास किया गया है पर एंड्रॉयड एमुलेटर को jdb जोड़ने, और साथ बार-बार पूरा किया गया है:"दूरस्थ वी एम से संलग्न करने में विफल" विंडोज

jdb -sourcepath ./src -attach localhost:8700 

java.io.IOException: shmemBase_attach failed: The system cannot find the file specified 
     at com.sun.tools.jdi.SharedMemoryTransportService.attach0(Native Method) 
     at com.sun.tools.jdi.SharedMemoryTransportService.attach(SharedMemoryTransportService.java:90) 
     at com.sun.tools.jdi.GenericAttachingConnector.attach(GenericAttachingConnector.java:98) 
     at com.sun.tools.jdi.SharedMemoryAttachingConnector.attach(SharedMemoryAttachingConnector.java:45) 
     at com.sun.tools.example.debug.tty.VMConnection.attachTarget(VMConnection.java:358) 
     at com.sun.tools.example.debug.tty.VMConnection.open(VMConnection.java:168) 
     at com.sun.tools.example.debug.tty.Env.init(Env.java:64) 
     at com.sun.tools.example.debug.tty.TTY.main(TTY.java:1010) 

Fatal error: 
Unable to attach to target VM. 

इतना अच्छा नहीं है। इस दौर को पाने का सबसे अच्छा तरीका क्या है? मैं विंडोज 7 64 बिट पर चल रहा हूँ।

+0

क्या आप डीबगर के माध्यम से कनेक्ट कर सकते हैं? [यहां मेरा उत्तर देखें] (http://stackoverflow.com/questions/4199323/android-app-not-launching-on-emulator/4199575#4199575) –

+0

एचएम, मेरी मेजबान फ़ाइल में प्रविष्टियों की तरह दिखता है सभी टिप्पणी की गई हैं बाहर, कह रहा है: # लोकहोस्ट नाम संकल्प DNS के भीतर ही संभाला जाता है। # \t 127.0.0.1 लोकलहोस्ट # \t :: 1 लोकलहोस्ट –

+2

मिला * एक * उत्तर। कुछ गूगलिंग से ऐसा लगता है कि विंडोज़ पर जेडीबी रिमोट वीएम (http://www.herongyang.com/jtool/jdb_3.html) के साथ साझा मेमोरी कनेक्शन पर डिफ़ॉल्ट है। > jdb -connect com.sun.jdi.SocketAttach: होस्ट नाम = स्थानीय होस्ट, पोर्ट = 8700 सेट ध्यान में न आया java.lang.Throwable सेट टाल ध्यान में न आया java.lang.Throwable पता चला है हम एक अलग कनेक्शन प्रकार निर्दिष्ट कर सकते हैं जेडीबी शुरू करना ... > कम से कम कनेक्ट होने लगता है। –

उत्तर

11

वर्तमान में यह मेरे लिए काम कर रहा है - साझा स्मृति कनेक्शन की बजाय सॉकेट बनाना।

> jdb -sourcepath \ src -connect com.sun.jdi.SocketAttach: होस्ट नाम = स्थानीय होस्ट, पोर्ट = 8700

पहले से आप कुछ सेटअप करने की जरूरत है - उदाहरण के लिए, useful details on setting up a non-eclipse debugger के इस सेट को देखते हैं।। यह अपने प्रारंभिक ब्रेकप्वाइंट स्थापित करने के लिए एक अच्छा टिप शामिल हैं - सामग्री के साथ बना सकते हैं या अपने घर निर्देशिका में jdb.ini फ़ाइल को संपादित, जैसे:

stop at com.mine.of.package.some.AClassIn:14

और वे भरी हुई और कनेक्शन जब तक स्थगित कर दिया जाएगा।

संपादित करें: Herong Yang's page संदर्भित करने के लिए भूल गए।

+0

+1! –

+0

डाउनवोट के लिए कोई स्पष्टीकरण? –

0

उत्तर # 1: अपनी मेजबान फ़ाइल में स्थानीयहोस्ट मानचित्र करें, जैसा कि मैंने पहले लिंक किया था। बस तसल्ली के लिए।

उत्तर # 2: यदि आप साझा स्मृति का उपयोग कर रहे हैं, तो बिट आकार आसानी से एक मुद्दा बन सकता है। सुनिश्चित करें आप हर जगह एक ही शब्द चौड़ाई का उपयोग कर रहे हैं।

+0

धन्यवाद मार्क - मैं स्पष्ट रूप से साझा मेमोरी का उपयोग नहीं कर रहा हूं - कम से कम मुझे लगता है कि अगर मैं सही ढंग से समझता हूं तो मुझे पता लगाना होगा कि एंड्रॉइड एमुलेटर क्या उपयोग कर रहा है। तथ्य यह है कि मैं सॉकेट कनेक्शन से कनेक्ट कर सकता हूं यह सुझाव देता है कि यह नहीं है।Herong के पृष्ठ से मदद से जोड़ने के लिए –

0

एंड्रॉइड स्टूडियो छोड़ने का प्रयास करें।

एडीबी डिमन पहले से चल रहे मैक पर मुझे एक ही समस्या थी। एक बार जब आप किसी भी चल डेमॉन छोड़ने के बाद आपको उत्पादन निम्न के समान देखना चाहिए:

$ adb -d jdwp 
28462 
1939 
^C 
$ adb -d forward tcp:7777 jdwp:1939 
$ jdb -attach localhost:7777 -sourcepath ./src 
Set uncaught java.lang.Throwable 
Set deferred uncaught java.lang.Throwable 
Initializing jdb ... 
> 

अधिक जानकारी और कैसे शुरू करने के लिए/डेमॉन को रोकने के लिए एक समान प्रश्न के my other answer देखें।

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