web-dev-qa-db-fra.com

Valgrind fait une erreur de débogage

J'ai essayé de suivre le tutoriel en ligne pour 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 je tente 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$ 

Est-ce que je peux faire quelque chose pour que Valgrind fonctionne enfin?

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

17
Ayusman

Ok, j'ai intsall libc6-dbg comme si

Sudo apt-get install libc6-dbg

et valgrind semble bien fonctionner.

Grâce au lien du forum ubuntu:

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

11
Ayusman

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

Je n'ai pas encore complètement résolu ce problème, mais il est clair que l'erreur est corrélée à mon utilisation de -m32 lors de la construction.

Il semblerait donc que, dans mon cas, le problème est l’absence 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:i386 n'apparaît pas comme une option disponible dans Synaptic ou via l'achèvement de la commande de apt-get - mais il s'y trouvait quand même.

41
nobar

J'ai longtemps lutté avec cela, compiler en mode -m32 a fonctionné, mais c'était pénible, de plus si je voulais utiliser par exemple. -lcrypto, je n'ai pas pu compiler en -m32 car je n'ai pas installé openssl en 32 bits.

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 de -m32, mais ce n'était pas ce que je cherchais. Donc, après un long moment, en est venu à ceci: https://lists.ubuntu.com/archives/foundations-bugs/2013-November/173202.html

Essayez donc de lancer dpkg -l libc6 * et si vous voyez libc6-AMD64, cela pourrait vous aider. Mais lisez-le attentivement, surtout. le point 2, car vous ne pourrez utiliser aucune commande après avoir supprimé le paquet libc6-AMD64, préparez donc un liveCD et suivez les instructions :) Cela m'a aidé à résoudre le problème, mais il m'a fallu environ 3 heures et quelques moments de peur . Je vous recommande de sauvegarder vos données avant de le faire, car si vous échouez, vous ne pourrez probablement pas revenir en arrière.

Et soyez prudent au point 4! Vous ne pouvez pas simplement écrire la commande suggérée ici
ln -s /lib/x86_64-linux-gnu/ld-2.17.so /lib64/ld-linux-x86-64.so.2 car un lien symbolique serait créé dans le dossier Live cd /. De plus, vous devez avoir les droits root pour écrire dans lib64. Alors, comment ça a été le cas: (j’avais/dossier sur mon disque cassé valgrind 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.

P.S: Je me demande s’il est possible de changer le lien symbolique avant de supprimer le paquet libc6-AMD64 (vous évitiez tout le contenu de liveCD) mais je ne suis pas sûr.

0
krumpac007