Valgrind fait une erreur de débogage

18

J'ai essayé de suivre le didacticiel en ligne de Learn C The Hard Way .

Cependant, après avoir configuré valgrind (j'ai suivi d'autres liens qui aident à configurer valgrind sur ubuntu 12.04), lorsque j'essaie de déboguer l'exécutable c, je trouve les erreurs suivantes.

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$ 

Puis-je faire quelque chose pour que valgrind fonctionne enfin?

J'ai Ubuntu 12.04 sur une boîte virtuelle. Mon ordinateur portable est un système d'exploitation Windows 7 64 bits.

Ayusman
la source
Valgrind a bien fonctionné pour moi hors de la boîte, mais je ne peux pas dire quelles bibliothèques j'ai déjà installées. valgrind est disponible auprès du repo. vous n'avez pas besoin de compiler, c'est comme apprendre C les états difficiles. l'installation à partir du référentiel traitera le problème de dépendance pour vous
RobotHumans

Réponses:

42

J'ai essentiellement reçu le même message (sauf qu'il a ld-linux-x86-64.so.2été remplacé par ld-linux.so.2). J'avais installé Valgrind en utilisant apt-getdonc libc6-dbg était déjà inclus comme dépendance.

Je n'ai pas encore complètement résolu cela, mais un indice est que l'erreur est en corrélation avec mon utilisation de -m32 lors de la construction.

Il semblerait donc que, dans mon cas, le problème est le manque d'une version 32 bits de libc6-dbg (ou de certains de ses composants), lors de la construction d'une installation 64 bits d'Ubuntu 12.04.


Solution (pour mon cas)

Pour moi, la commande suivante a fait fonctionner les choses ...

sudo apt-get install libc6-dbg:i386

Ceci est discuté à https://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/881236

Remarque: Le package libc6-dbg:i386n'apparaît pas comme une option disponible dans Synaptic ou via l'exécution de la commande de apt-get- mais il était là quand même.

nobar
la source
Il y a un bon changement dont vous aurez besoin d'aide pour créer en premier: stackoverflow.com/a/7412698/86967
nobar
cela doit être marqué comme correct; la :i386est la clé ici.
Thomas Shields
C'est le 32 bits qui a fait l'affaire!
Cardin
1
Cela l'a résolu pour moi .. Je voyais cette erreur sur une machine vagabonde. Comme l'ont dit les autres commentateurs, cela devrait être marqué comme correct. (libgc-dbg était déjà installé en tant que dépendance valgrind, c'est l'i386 qui a fait l'affaire)
Ken
Cette réponse traite correctement des binaires 32 bits. libc6-dbgétait déjà indiqué dans valgrindle message d'erreur de.
leesei
11

Ok, j'ai fait intsall libc6-dbg comme ça

sudo apt-get install libc6-dbg

et valgrind semble bien fonctionner.

Merci au lien du forum ubuntu:

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

Ayusman
la source
@ Goaler444 Je viens de le faire. Merci pour le rappel.
Ayusman
comme les autres points de réponse, faire sudo apt-get install libc6-dbg:i386pourrait être une solution en fonction du binaire à valider (64 bits vs 32 bits).
fermeture de session
0

Je me suis débattu avec cela pendant très longtemps, la compilation en mode -m32 a fonctionné, mais c'était une douleur dans le cul, de plus si je voulais utiliser par exemple -lcrypto, je ne pourrais pas compiler en -m32 car je n'avais pas openssl en 32 bits installé .

J'ai donc lu beaucoup de messages similaires, conseillant généralement d'installer libc6-dbg: i386 ... Je pense que cela a résolu le problème pour -m32, mais ce n'était pas ce que je cherchais. Donc, après un long moment, c'est arrivé à ceci: https://lists.ubuntu.com/archives/foundations-bugs/2013-November/173202.html

Essayez donc d'exécuter dpkg -l libc6 * et si vous voyez libc6-amd64, cela pourrait vous aider. Mais lisez-le attentivement esp. point 2, car vous ne pourrez utiliser aucune commande après avoir supprimé le paquet libc6-amd64, alors préparez un liveCD et suivez les instructions :) Cela m'a aidé à résoudre le problème, mais cela m'a pris environ 3 heures et quelques moments de peur . Je recommande de sauvegarder vos données avant de le faire, car si vous échouez, il n'y aura probablement pas de retour.

Et attention au point 4! Vous ne pouvez pas simplement écrire la commande suggérée
ln -s /lib/x86_64-linux-gnu/ld-2.17.so /lib64/ld-linux-x86-64.so.2 car cela créerait un lien symbolique dans le /dossier live cd . Vous devez également avoir les droits root pour écrire sur lib64. Alors, comment je l'ai fait: (j'avais un dossier / sur mon disque valgrind cassé ouvert via le 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

J'espère que je n'ai rien oublié et ce sera utile.

PS: je me demande s'il est possible de changer le lien symbolique avant de supprimer le paquet libc6-amd64 (vous contourneriez tout le liveCD) mais je ne suis pas sûr.

krumpac007
la source
Veuillez regarder votre langue !!!
Panther