Valgrind डीबग त्रुटि करता है


18

मैं लर्निंग सी द हार्ड वे के लिए ऑनलाइन ट्यूटोरियल का पालन करने की कोशिश कर रहा हूं ।

हालाँकि, वेलग्रिंड स्थापित करने के बाद (मैंने अन्य लिंक का अनुसरण किया, जो ubuntu 12.04 पर वेलग्रिंड स्थापित करने में मदद करता है), जब मैं c निष्पादन योग्य डीबग करने का प्रयास करता हूं, तो मुझे निम्नलिखित त्रुटियां मिलती हैं।

ayusman@ayusman-ubuntu:~/lcthw$ valgrind ./ex4
==1984== Memcheck, a memory error detector
==1984== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==1984== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==1984== Command: ./ex4
==1984== 

valgrind:  Fatal error at startup: a function redirection
valgrind:  which is mandatory for this platform-tool combination
valgrind:  cannot be set up.  Details of the redirection are:
valgrind:  
valgrind:  A must-be-redirected function
valgrind:  whose name matches the pattern:      strlen
valgrind:  in an object with soname matching:   ld-linux-x86-64.so.2
valgrind:  was not found whilst processing
valgrind:  symbols from the object with soname: ld-linux-x86-64.so.2
valgrind:  
valgrind:  Possible fixes: (1, short term): install glibc's debuginfo
valgrind:  package on this machine.  (2, longer term): ask the packagers
valgrind:  for your Linux distribution to please in future ship a non-
valgrind:  stripped ld.so (or whatever the dynamic linker .so is called)
valgrind:  that exports the above-named function using the standard
valgrind:  calling conventions for this platform.  The package you need
valgrind:  to install for fix (1) is called
valgrind:  
valgrind:    On Debian, Ubuntu:                 libc6-dbg
valgrind:    On SuSE, openSuSE, Fedora, RHEL:   glibc-debuginfo
valgrind:  
valgrind:  Cannot continue -- exiting now.  Sorry.

ayusman@ayusman-ubuntu:~/lcthw$ 

क्या ऐसा कुछ है जो मैं अंत में काम करने के लिए वैलग्राइंड बनाने के लिए कर सकता हूं?

मेरे पास वर्चुअल बॉक्स पर ubuntu 12.04 है। मेरा लैपटॉप एक विंडोज 7 64 बिट ओएस है।


वेलग्रिंड ने मेरे लिए बॉक्स से बाहर काम किया, लेकिन मैं यह नहीं कह सकता कि मैंने पहले से ही कौन सी लाइब्रेरी स्थापित की थी। रेपो से वेलग्रिंड उपलब्ध है। आपको संकलन करने की आवश्यकता नहीं है जैसे कि C को कठिन तरीके से सीखें। रेपो से इंस्टॉल करना आपके लिए निर्भरता के मुद्दे को
संभालेगा

जवाबों:


42

मुझे अनिवार्य रूप से एक ही संदेश मिला (इसके अलावा ld-linux-x86-64.so.2इसकी जगह ld-linux.so.2)। मैंने Valgrind का उपयोग करके स्थापित किया थाapt-get इसलिए libc6-dbg को पहले से ही एक निर्भरता के रूप में शामिल किया गया था।

मैंने अभी तक इसे पूरी तरह से हल नहीं किया है, लेकिन एक संकेत यह है कि त्रुटि मेरे उपयोग के साथ संबंधित है -m32 बिल्डिंग के ।

तो ऐसा लगता है कि, मेरे मामले में, समस्या libc6-dbg (या इसके कुछ घटकों) के 32-बिट संस्करण की कमी है, जब उबंटू 12.04 की 64-बिट स्थापना पर निर्माण होता है।


समाधान (मेरे मामले के लिए)

मेरे लिए, निम्नलिखित कमांड ने काम किया ...

sudo apt-get install libc6-dbg:i386

इस पर चर्चा की जाती है https://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/881236

नोट: पैकेज libc6-dbg:i386सिनैप्टिक में या कमांड के पूरा होने के माध्यम से उपलब्ध विकल्प के रूप में नहीं दिखता है apt-get- लेकिन यह वैसे भी था।


एक अच्छा बदलाव है जिसकी आपको पहले मदद करने की आवश्यकता होगी: stackoverflow.com/a/7412698/86967
nobar

इसे सही के रूप में चिह्नित किया जाना चाहिए; :i386यहाँ मुख्य बिंदु है।
थॉमस शील्ड्स

यह 32-बिट कि चाल था!
कार्डिन

1
यह मेरे लिए इसे हल किया .. मैं एक योनि मशीन पर इस त्रुटि को देख रहा था। जैसा कि अन्य टिप्पणीकारों ने कहा है, इसे सही के रूप में चिह्नित किया जाना चाहिए। (libgc-dbg को पहले से ही एक वैध निर्भरता के रूप में स्थापित किया गया था, यह i386 था जिसने चाल चली)
केन

यह उत्तर 32 बिट बायनेरिज़ के साथ सही तरीके से निपटा। libc6-dbgपहले से ही valgrindत्रुटि संदेश में संकेत दिया गया था ।
लीसी

11

ठीक है, मैंने intsall libc6-dbg ऐसा किया था

sudo apt-get install libc6-dbg

और वाल्ग्रिंड ठीक काम करने लगता है।

Ubuntu फोरम लिंक के लिए धन्यवाद:

http://ubuntuforums.org/showthread.php?t=1017692


@ Goaler444 मैंने अभी-अभी किया है। याद दिलाने के लिए धन्यवाद।
आयुष्मान

अन्य उत्तर बिंदुओं के रूप में, sudo apt-get install libc6-dbg:i386बाइनरी को वैलग्राइंड किए जाने के आधार पर एक समाधान हो सकता है (64 बिट्स बनाम 32 बिट्स)।
लॉगऑफ

0

मैं एक बहुत लंबे समय के लिए इस के साथ संघर्ष किया, में संकलन -32 मोड काम किया, लेकिन यह गधा में एक दर्द था, इसके अलावा अगर मैं जैसे -lcrypto का उपयोग करना चाहता था, मैं -32 में संकलन नहीं कर सका क्योंकि मैं 32bit स्थापित में OpenSl स्थापित किया था ।

इसलिए मैंने बहुत से इसी तरह के पदों के माध्यम से पढ़ा, आमतौर पर libc6-dbg: i386 को स्थापित करने की सलाह दी जाती है ... मुझे लगता है कि इसने -32 के लिए समस्या को हल कर दिया है, लेकिन यह नहीं था कि मैं क्या देख रहा था। तो एक लंबे समय के बाद यह आया: https://lists.ubuntu.com/archives/foundations-bugs/2013-Nvent/173202.html

इसलिए dpkg -l libc6 * चलाने का प्रयास करें और यदि आप libc6-amd64 देखते हैं, तो यह आपकी मदद कर सकता है। लेकिन इसे ध्यान से पढ़ें। बिंदु 2, क्योंकि आप libc6-amd64 पैकेज को निकालने के बाद किसी भी कमांड का उपयोग करने में सक्षम नहीं होंगे, इसलिए एक liveCD तैयार करें और निर्देशों का पालन करें :) इससे मुझे समस्या को हल करने में मदद मिली, लेकिन इसमें मुझे लगभग 3 घंटे और डर के क्षणों का समय लगा। । आपके ऐसा करने से पहले मैं आपके डेटा का बैकअप लेने की सलाह देता हूं, क्योंकि यदि आप असफल होते हैं, तो शायद कोई रास्ता नहीं होगा।

और बिंदु 4 पर लापरवाह हो! आप बस वहां बताए गए आदेश को लिख नहीं सकते
ln -s /lib/x86_64-linux-gnu/ld-2.17.so /lib64/ld-linux-x86-64.so.2 क्योंकि यह लाइव सीडी में एक प्रतीकात्मक लिंक बना देगा/ फ़ोल्डर । इसके अलावा आपको lib64 लिखने के लिए रूट अधिकार होना चाहिए। तो मैंने यह कैसे किया: (मैं अपने टूटे हुए वैध डिस्क पर फ़ोल्डर / फ़ोल्डर liveCD टर्मिनल के माध्यम से खोला गया था)

1)sudo rm ./lib64/ld-linux-x86-64.so.2 //removing old link

2)sudo ln -s /lib/x86_64-linux-gnu/ld-2.17.so ./lib64/ld-linux-x86-64.so.2

//you refer to the file on the disk with broken linux, but if you wrote just / instead of ./ you would create the link in the liveCD / folder

आशा है कि मैं कुछ भी नहीं भूल गया और यह उपयोगी होगा।

PS: मुझे आश्चर्य है कि अगर आप libc6-amd64 पैकेज (आप पूरे liveCD सामान को बायपास करेंगे) को हटाने से पहले सिम्लिंक को बदलना संभव है, लेकिन मुझे यकीन नहीं है।


कृपया अपनी भाषा देखें !!!
पैंथर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.