Valgrind debuggt einen Fehler


18

Ich habe versucht, dem Online-Tutorial für Learn C The Hard Way zu folgen .

Nach dem Einrichten von valgrind (ich bin anderen Links gefolgt, die beim Einrichten von valgrind unter Ubuntu 12.04 helfen), stelle ich beim Versuch, die ausführbare Datei c zu debuggen, die folgenden Fehler fest.

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$ 

Kann ich etwas tun, damit Valgrind endlich funktioniert?

Ich habe Ubuntu 12.04 auf virtuelle Box. Mein Laptop ist ein Windows 7 64-Bit-Betriebssystem.


Valgrind hat für mich ohne Probleme funktioniert, aber ich kann nicht sagen, welche Bibliotheken ich bereits installiert habe. valgrind ist bei repo erhältlich. Sie brauchen nicht zu kompilieren, es ist wie C auf die harte Tour zu lernen. Die Installation von Repo wird das Abhängigkeitsproblem für Sie
lösen

Antworten:


42

Ich habe im Wesentlichen die gleiche Nachricht erhalten (außer dass diese ld-linux-x86-64.so.2durch ersetzt wurde ld-linux.so.2). Ich hatte Valgrind mit apt-getlibc6-dbg installiert, das bereits als Abhängigkeit enthalten war.

Ich habe dies noch nicht vollständig gelöst, aber ein Hinweis ist, dass der Fehler mit meiner Verwendung -m32beim Erstellen korreliert .

In meinem Fall scheint das Problem das Fehlen einer 32-Bit-Version von libc6-dbg (oder einiger seiner Komponenten) zu sein, wenn ich auf einer 64-Bit-Installation von Ubuntu 12.04 aufbaue.


Lösung (für meinen Fall)

Für mich hat der folgende Befehl funktioniert ...

sudo apt-get install libc6-dbg:i386

Dies wird unter https://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/881236 besprochen

Hinweis: Das Paket libc6-dbg:i386wird nicht als verfügbare Option in Synaptic oder per Befehl-Vervollständigung von angezeigt apt-get- aber es war trotzdem da.


Es gibt eine gute Änderung, bei deren
Erstellung

dies sollte als korrekt markiert sein; Das :i386ist der Schlüssel hier.
Thomas Shields

Es war das 32-Bit, das den Trick gemacht hat!
Cardin

1
Dies löste es für mich .. Ich sah diesen Fehler auf einem Vagabund-Computer. Wie die anderen Kommentatoren sagten, sollte dies als korrekt markiert werden. (libgc-dbg wurde bereits als valgrind-abhängigkeit installiert, es war der i386, der den Trick ausführte)
Ken,

Diese Antwort hat sich korrekt mit 32-Bit-Binärdateien befasst. libc6-dbgwurde schon in der fehlermeldung angedeutet valgrind.
Leesei

11

Ok, ich habe intsall libc6-dbg so gemacht

sudo apt-get install libc6-dbg

und valgrind scheint gut zu funktionieren.

Danke an den Ubuntu Forum Link:

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


@ Goaler444 hab ich gerade gemacht. Danke für das Erinnern.
Ayusman

Als die anderen Antwortpunkte sudo apt-get install libc6-dbg:i386könnte dies eine Lösung sein, die von der zu valgrindenden Binärdatei abhängt (64 Bit gegenüber 32 Bit).
5.

0

Ich hatte sehr lange damit zu kämpfen, das Kompilieren im -m32-Modus hat funktioniert, aber es war ein Ärgernis, und wenn ich zB -lcrypto verwenden wollte, konnte ich es nicht in -m32 kompilieren, da ich kein openssl in 32bit installiert hatte .

Also habe ich eine Menge ähnlicher Posts durchgelesen und normalerweise empfohlen, libc6-dbg zu installieren: i386 ... Ich denke, dies hat das Problem für -m32 gelöst, aber es war nicht das, wonach ich gesucht habe. Also nach langer Zeit kam ein: https://lists.ubuntu.com/archives/foundations-bugs/2013-November/173202.html

Versuchen Sie also, dpkg -l libc6 * auszuführen, und wenn Sie libc6-amd64 sehen, könnte dies Ihnen helfen. Aber lesen Sie es sorgfältig vor allem. Punkt 2, weil Sie nach dem Entfernen des libc6-amd64-Pakets keine Befehle mehr verwenden können. Bereiten Sie also eine Live-CD vor und befolgen Sie die Anweisungen . Ich empfehle, Ihre Daten zu sichern, bevor Sie dies tun, denn wenn Sie versagen, wird es wahrscheinlich keinen Weg zurück geben.

Und sei vorsichtig bei Punkt 4! Sie können den dort vorgeschlagenen Befehl nicht einfach schreiben,
ln -s /lib/x86_64-linux-gnu/ld-2.17.so /lib64/ld-linux-x86-64.so.2 da er eine symbolische Verknüpfung im Live-CD- /Ordner herstellen würde. Außerdem müssen Sie über Root-Rechte verfügen, um in lib64 schreiben zu können. Also, wie ich es gemacht habe, war: (Ich hatte / Ordner auf meiner kaputten Valgrind-Diskette über das Live-CD-Terminal geöffnet)

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

Hoffe, ich habe nichts vergessen und das wird hilfreich sein.

PS: Ich frage mich, ob es möglich ist, den Symlink zu ändern, bevor Sie das libc6-amd64-Paket entfernen (Sie würden das gesamte Live-CD-Zeug umgehen), aber ich bin nicht sicher.


Bitte achten Sie auf Ihre Sprache !!!
Panther
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.