Valgrind melakukan kesalahan debug


18

Saya telah mencoba mengikuti tutorial online untuk Learn C The Hard Way .

Namun setelah mengatur valgrind (saya mengikuti tautan lain yang membantu mengatur valgrind di ubuntu 12.04), ketika saya mencoba untuk men-debug c executable, saya menemukan kesalahan berikut.

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$ 

Apakah ada sesuatu yang bisa saya lakukan untuk membuat valgrind akhirnya berfungsi?

Saya memiliki ubuntu 12.04 di kotak virtual. Laptop saya adalah OS Windows 7 64 bit.


Valgrind bekerja dengan baik untuk saya di luar kotak, tetapi saya tidak bisa mengatakan perpustakaan apa yang sudah saya instal. valgrind tersedia dari repo. Anda tidak perlu mengkompilasi seperti belajar C dengan cara yang sulit. memasang dari repo akan menangani masalah ketergantungan untuk Anda
— RobotHumans

Jawaban:


42

Saya mendapat pesan yang sama (kecuali ld-linux-x86-64.so.2diganti ld-linux.so.2). Saya telah menginstal Valgrind menggunakan apt-getjadi libc6-dbg sudah termasuk sebagai ketergantungan.

Saya belum sepenuhnya menyelesaikan ini, tetapi petunjuknya adalah bahwa kesalahan tersebut berkorelasi dengan penggunaan saya -m32saat membangun.

Jadi tampaknya, dalam kasus saya, masalahnya adalah kurangnya versi 32-bit libc6-dbg (atau beberapa komponennya), ketika membangun instalasi 64-bit Ubuntu 12.04.


Solusi (untuk kasus saya)

Bagi saya, perintah berikut ini membuat semuanya bekerja ...

sudo apt-get install libc6-dbg:i386

Ini dibahas di https://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/881236

Catatan: Paket libc6-dbg:i386tidak muncul sebagai opsi yang tersedia di Synaptic atau melalui perintah-penyelesaian dari apt-get- tetapi tetap ada di sana.


Ada perubahan yang baik, Anda perlu bantuan membangun terlebih dahulu: stackoverflow.com/a/7412698/86967
— nobar

ini harus ditandai sebagai benar; yang :i386adalah kunci di sini.
— Thomas Shields

Itu 32-bit yang melakukan trik!
— Cardin

1
Ini menyelesaikannya untuk saya .. Saya melihat kesalahan ini pada mesin gelandangan. Seperti kata komentator lain, ini harus ditandai sebagai benar. (libgc-dbg sudah diinstal sebagai dependensi valgrind, itu adalah i386 yang melakukan trik)
— Ken

Jawaban ini ditangani dengan benar dengan binari 32bit. libc6-dbgsudah diisyaratkan dalam valgrindpesan kesalahan.
— leesei

11

Ok, saya melakukan intsall libc6-dbg seperti itu

sudo apt-get install libc6-dbg

dan valgrind tampaknya berfungsi dengan baik.

Berkat tautan forum ubuntu:

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


@ Goaler444 Saya baru saja melakukannya. Terima kasih telah mengingatkan.
— Ayusman

sebagai titik jawaban lainnya, melakukan sudo apt-get install libc6-dbg:i386bisa menjadi solusi tergantung pada biner yang akan di- valgrinded (64 bit vs 32 bit).
— logoff

0

Saya berjuang dengan ini untuk waktu yang sangat lama, mengkompilasi dalam mode -m32 bekerja, tapi itu menyebalkan, apalagi jika saya ingin menggunakan misalnya -lcrypto, saya tidak bisa mengkompilasi di -m32 karena saya tidak memiliki openssl dalam 32bit diinstal .

Jadi saya membaca banyak posting serupa, biasanya menyarankan menginstal libc6-dbg: i386 ... Saya pikir ini menyelesaikan masalah untuk -m32, tapi bukan itu yang saya cari. Jadi setelah sekian lama a datang ke ini: https://lists.ubuntu.com/archives/foundations-bugs/2013-November/173202.html

Jadi coba jalankan dpkg -l libc6 * dan jika Anda melihat libc6-amd64, ini bisa membantu Anda. Tapi baca dengan seksama esp. poin 2, karena Anda tidak akan dapat menggunakan perintah apa pun setelah Anda menghapus paket libc6-amd64, jadi siapkan liveCD dan ikuti instruksi :) Ini membantu saya menyelesaikan masalah, tetapi butuh waktu sekitar 3 jam dan beberapa momen ketakutan . Saya sarankan untuk mencadangkan data Anda sebelum Anda melakukannya, karena jika Anda gagal, mungkin tidak ada jalan kembali.

Dan berhati-hatilah pada poin 4! Anda tidak dapat cukup menulis perintah yang disarankan di sana
ln -s /lib/x86_64-linux-gnu/ld-2.17.so /lib64/ld-linux-x86-64.so.2 karena itu akan membuat tautan simbolik di /folder live cd . Anda juga harus memiliki hak root untuk menulis ke lib64. Jadi bagaimana saya melakukannya adalah: (saya punya / folder pada disk valgrind saya yang rusak dibuka melalui terminal 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

Semoga saya tidak melupakan apa pun dan ini akan membantu.

PS: Saya ingin tahu apakah mungkin untuk mengubah symlink sebelum Anda menghapus paket libc6-amd64 (Anda akan mem-bypass seluruh liveCD) tetapi saya tidak yakin.


Silakan perhatikan bahasa Anda !!!
— Panther
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.