18 votes

Valgrind fait une erreur de débogage

J'ai essayé de suivre le tutoriel en ligne pour Apprendre le C à la dure .

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$ 

Y a-t-il quelque chose que je puisse faire 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.

42voto

Ben Points 10335

J'ai obtenu 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 comme dépendance.

Je n'ai pas encore totalement résolu ce problème, mais un indice est que l'erreur est en corrélation avec mon utilisation de la fonction -m32 lors de la construction.

Il semblerait donc que, dans mon cas, le problème soit l'absence d'une version 32 bits de libc6-dbg (ou de certains de ses composants), lors de la construction sur 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

Ce sujet est abordé à l'adresse suivante https://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/881236

Note : Le paquet libc6-dbg:i386 n'apparaît pas comme une option disponible dans Synaptic ou via la complétion de commande de apt-get -- mais c'était là quand même.

11voto

JonWillis Points 131

Ok, J'ai installé libc6-dbg comme suit .

sudo apt-get install libc6-dbg

et valgrind semble fonctionner correctement.

Merci au lien du forum ubuntu :

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

0voto

krumpac007 Points 1

J'ai lutté avec cela pendant très longtemps, la compilation en mode -m32 fonctionnait, mais c'était une douleur dans le cul, de plus si je voulais utiliser par exemple -lcrypto, je ne pouvais pas compiler en -m32 puisque je n'avais pas openssl en 32bit installé.

J'ai donc lu beaucoup de messages similaires, qui conseillaient 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, j'en suis arrivé à 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 plus 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 vous recommande de sauvegarder vos données avant de faire cela, car si vous échouez, il n'y aura probablement aucun moyen de revenir en arrière.

Et faites attention 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 cela créerait un lien symbolique dans le live cd / dossier. Vous devez également avoir les droits de root pour écrire dans lib64. Voici comment j'ai procédé : (j'avais le dossier / de mon disque valgrind cassé ouvert par le terminal du 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 que cela vous sera utile.

P.S. : Je me demande s'il est possible de changer le lien symbolique avant de supprimer le paquet libc6-amd64 (vous éviterez tout le truc du liveCD) mais je ne suis pas sûr.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X