2012-05-31 21 views
5

के बाद जेनेरिक त्रुटि मैं एआरएम बोर्ड पर ओपनएम्बेड आधारित लिनक्स चला रहा हूं, जहां मेरा एप्लिकेशन चल रहा है। मैं कर्नेल 2.6.35, जीडीबी 6.8 और जीसीसी 4.3 चलाने के लिए प्रयोग किया जाता था। हाल ही में मैंने सिस्टम को कर्नेल 2.6.37, जीडीबी 7.4 (7.3 की भी कोशिश की) और जीसीसी 4.6 में अद्यतन किया है।gdb: नए धागे नहीं मिल पा रहे हैं: सिस्टम अपडेट

अब, मेरे आवेदन को अब डीडीजी नहीं किया जा सकता है (एआरएम बोर्ड पर), हर बार जब मैं इसे जीडीबी में चलाने की कोशिश करता हूं तो मुझे त्रुटि मिलती है "gdb: नए धागे नहीं मिल सकते हैं: जेनेरिक त्रुटि"। एप्लिकेशन pthreads का उपयोग करता है और pthreads के खिलाफ लिंक करता है (readelf libpthread.so.0 निर्भरता के रूप में सूचीबद्ध करता है)। मैंने सुझाए गए सुझाए गए समाधान अब तक जो कुछ भी कर रहे हैं, उसे जोड़ने के लिए अनुशंसा करते हैं। मुझे मिली दूसरी सिफारिश LD_PRELOAD =/lib/libpthread.so.0 का उपयोग करना था जो मेरे लिए कोई फर्क नहीं पड़ता।

किसी भी समस्या के बिना अनुप्रयोग के x86 बिल्डों को डिबग करना।

संपादित करें: पहले उत्तर में दिए गए सवालों के जवाब देने के लिए, मैं लक्ष्य (एआरएम) पर जीडीबी का उपयोग कर रहा हूं, यानी कोई क्रॉस-जीडीबी नहीं। मैंने libpthread.so.0 को भी नहीं हटाया है (/lib/libpthread-2.9.so: ईएलएफ 32-बिट एलएसबी साझा ऑब्जेक्ट, एआरएम, संस्करण 1 (एसवाईएसवी), गतिशील रूप से लिंक (साझा libs का उपयोग करता है), जीएनयू/लिनक्स 2.6 के लिए। 16, छीन नहीं)। glibc संस्करण 2.9 पर बने रहे, और अद्यतन पूरे linux छवि recompiling शामिल

EDIT2: निकाला जा रहा है/lib/libthread-db * (फलस्वरूप चेतावनी के साथ और स्पष्ट रूप से कुछ सुविधाओं को काम नहीं करेगा) डिबगिंग की अनुमति देता है

EDIT3: का उपयोग करना सेट डिबग libthread-db 1 मैं:

Starting program: /home/root/app 
Trying host libthread_db library: libthread_db.so.1. 
Host libthread_db.so.1 resolved to: /lib/libthread_db.so.1. 
td_ta_new failed: application not linked with libthread 
thread_db_load_search returning 0 
Trying host libthread_db library: libthread_db.so.1. 
Host libthread_db.so.1 resolved to: /lib/libthread_db.so.1. 
[Thread debugging using libthread_db enabled] 
Using host libthread_db library "/lib/libthread_db.so.1". 
warning: Unable to set global thread event mask: generic error 
Warning: find_new_threads_once: find_new_threads_callback: cannot get thread info: generic error 
Found 0 new threads in iteration 0. 
Warning: find_new_threads_once: find_new_threads_callback: cannot get thread info: generic error 
Found 0 new threads in iteration 1. 
Warning: find_new_threads_once: find_new_threads_callback: cannot get thread info: generic error 
Found 0 new threads in iteration 2. 
Warning: find_new_threads_once: find_new_threads_callback: cannot get thread info: generic error 
Found 0 new threads in iteration 3. 
thread_db_load_search returning 1 
Warning: find_new_threads_once: find_new_threads_callback: cannot get thread info: generic error 
Found 0 new threads in iteration 0. 
Cannot find new threads: generic error 
(gdb) Write failed: Broken pipe 
+0

क्या आपके पास मिलान करने वाला libthread-db है? –

+0

@Guy: मैंने पूरी छवि को दोबारा बनाया है और यह सिर्फ सभी मैच होना चाहिए। अन्यथा, मैं कैसे जांचूं कि यह मेल खाता है या नहीं? – dseifert

उत्तर

6

इस त्रुटि के दो सामान्य कारण हैं:

  1. आप libpthread.so.0 एक के बीच एक गलत मैच nd libthread_db.so.1
  2. आप छीन है libpthread.so.0

आपका संदेश पूरी तरह स्पष्ट नहीं है:

  1. आप पार GDB का उपयोग कर रहे आवेदन एक x86 मेजबान से एआरएम पर चल डिबग करने के लिए? libthread_dbनहीं को इसकी आवश्यकता है हटाया जा -
  2. आप को अद्यतन किया है (या फिर से बनाया) glibc कर्नेल को अद्यतन करने के अलावा, आदि

आप libpthread.so.0 छीन, तो कि नहीं करते ।

यदि आप क्रॉस-डीबगिंग कर रहे हैं, तो libthread_db.so.1 को होस्ट पर glibc से मिलान करने के लिए मेजबान पर पुनर्निर्माण करना सुनिश्चित करें।

अद्यतन:

not cross-debugging
did not strip libpthread

तो, अपने GDB या glibc में कुछ टूटी हुई किया गया है प्रतीत होता है।आप को देखने के लिए द्वारा

  1. कि क्या है वापस रख हटाया libthread_db कोशिश कर सकते हैं, और
  2. (gdb) set debug libthread-db 1
  3. (gdb) run

अद्यतन 2:

warning: Unable to set global thread event mask: generic error

इसका मतलब है कि GDB था libthr में td_ta_set_event फ़ंक्शन को देखने में सक्षम ead_db, और इसे कहा जाता है, लेकिन फ़ंक्शन ने एक त्रुटि लौटा दी। ऐसा होने का एक तरीका यह है कि यदि जीडीबी में __nptl_threads_events फ़ंक्शन नहीं ढूंढ पा रहा था। क्या इस आदेश का उत्पादन करता है: उदाहरण के लिए:

nm /lib/libpthread.so.0 | grep __nptl_threads_events 

कि आदेश उत्पादन का उत्पादन करते हैं, तो .:

000000000021c294 b __nptl_threads_events 

तो मुझे यकीन है कि और क्या विफल हो रहा है नहीं कर रहा हूँ। क्या हो रहा है यह जानने के लिए आपको शायद जीडीबी को डीबग करना होगा।

यदि दूसरी तरफ grep उपरोक्त उत्पादन नहीं करता है, तो यह आपके टूलचैन के साथ एक समस्या है: आपको यह पता लगाना होगा कि यह चर आपके libpthread.so.0 में क्यों नहीं दिखता है।

+0

मुझे नहीं पता कि एक गलत मिलान कैसे हुआ होगा, पूरी प्रणाली (संस्करण 2.9 पर रहने वाले glibc) को स्क्रैच से पुनः संकलित किया गया था और मैच करना चाहिए। मैंने libpthread को भी नहीं छोड़ा और मैं क्रॉस-डीबगिंग नहीं कर रहा हूं। – dseifert

+0

@dseifert यह: '/lib/libpthread-2.9.so: ईएलएफ 32-बिट एलएसबी साझा ऑब्जेक्ट, एआरएम, संस्करण 1 (एसवाईएसवी), गतिशील रूप से लिंक (साझा libs का उपयोग करता है), जीएनयू/लिनक्स 2.6.16 के लिए, छीन नहीं ' इसका मतलब यह नहीं है कि आपका 'libpthread' छीन लिया नहीं गया है। 'nm /lib/libpthread-2.9.so से आउटपुट क्या है। grep _version $ '? –

+0

यह कहता है 0001181c r nptl_version – dseifert