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.


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.


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


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.


Veuillez regarder votre langue !!!
Panther
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.