Valgrind esegue l'errore di debug


18

Ho cercato di seguire il tutorial online per Learn C The Hard Way .

Tuttavia, dopo aver impostato valgrind (ho seguito altri collegamenti che aiutano a configurare valgrind su ubuntu 12.04), quando provo a eseguire il debug dell'eseguibile c, trovo i seguenti errori.

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$ 

C'è qualcosa che posso fare per far funzionare finalmente Valgrind?

Ho Ubuntu 12.04 sulla scatola virtuale. Il mio laptop è un sistema operativo Windows 7 a 64 bit.


valgrind ha funzionato bene per me, ma non posso dire quali librerie avevo già installato. valgrind è disponibile da repo. non è necessario compilare è come apprendere C nel modo più duro afferma. l'installazione dal repository gestirà il problema delle dipendenze per te
RobotHumans,

Risposte:


42

Ho ricevuto essenzialmente lo stesso messaggio (tranne che è ld-linux-x86-64.so.2stato sostituito dald-linux.so.2 ). Avevo installato Valgrind usando apt-getcosì libc6-dbg era già incluso come dipendenza.

Non l'ho ancora risolto completamente, ma un indizio è che l'errore è correlato al mio uso di -m32 durante la costruzione.

Quindi, nel mio caso, sembrerebbe che il problema sia la mancanza di una versione a 32 bit di libc6-dbg (o di alcuni dei suoi componenti), quando si basa su un'installazione a 64 bit di Ubuntu 12.04.


Soluzione (per il mio caso)

Per me, il seguente comando ha fatto funzionare le cose ...

sudo apt-get install libc6-dbg:i386

Questo è discusso a https://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/881236

Nota: il pacchetto libc6-dbg:i386non viene visualizzato come opzione disponibile in Synaptic o tramite il completamento del comando di apt-get- ma era comunque lì.


C'è un cambiamento buona avrete bisogno di aiuto la costruzione di prima: stackoverflow.com/a/7412698/86967
Nobar

questo dovrebbe essere contrassegnato come corretto; questa :i386è la chiave qui.
Thomas Shields,

È stato il 32 bit che ha fatto il trucco!
Cardin,

1
Questo mi ha risolto. Stavo vedendo questo errore su una macchina vagabonda. Come hanno detto gli altri commentatori, questo dovrebbe essere contrassegnato come corretto. (libgc-dbg era già installato come dipendenza valgrind, era l'i386 a fare il trucco)
Ken

Questa risposta ha gestito correttamente i binari a 32 bit. libc6-dbgera già stato accennato nel valgrindmessaggio di errore.
leesei,

11

Ok, ho fatto in questo modo libc6-dbg

sudo apt-get install libc6-dbg

e valgrind sembra funzionare bene.

Grazie al link al forum di Ubuntu:

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


@ Goaler444 L'ho appena fatto. Grazie per averlo ricordato.
Ayusman,

come gli altri punti di risposta, fare sudo apt-get install libc6-dbg:i386potrebbe essere una soluzione a seconda del binario da valutare (64 bit contro 32 bit).
disconnessione il

0

Ho lottato con questo per molto tempo, compilando in modalità -m32 ha funzionato, ma è stato un dolore nel culo, inoltre se volevo usare ad esempio -lcrypto, non potevo compilare in -m32 poiché non avevo openssl a 32 bit installato .

Quindi ho letto molti post simili, di solito consigliando di installare libc6-dbg: i386 ... Penso che questo abbia risolto il problema per -m32, ma non era quello che stavo cercando. Quindi dopo molto tempo è arrivato a questo: https://lists.ubuntu.com/archives/foundations-bugs/2013-November/173202.html

Quindi prova a eseguire dpkg -l libc6 * e se vedi libc6-amd64, questo potrebbe aiutarti. Ma leggilo attentamente esp. punto 2, perché non sarai in grado di usare alcun comando dopo aver rimosso il pacchetto libc6-amd64, quindi prepara un liveCD e segui le istruzioni :) Mi ha aiutato a risolvere il problema, ma mi ci sono voluti circa 3 ore e un paio di momenti di paura . Consiglio di eseguire il backup dei dati prima di farlo, perché in caso contrario, probabilmente non ci sarà modo di tornare indietro.

E fai attenzione al punto 4! Non puoi semplicemente scrivere il comando suggerito lì
ln -s /lib/x86_64-linux-gnu/ld-2.17.so /lib64/ld-linux-x86-64.so.2 perché creerebbe un collegamento simbolico nel cd live/ cartella . Inoltre devi avere i diritti di root per scrivere su lib64. Quindi come ho fatto è stato: (avevo / cartella sul mio disco valgrind rotto aperto attraverso il terminale 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

Spero di non aver dimenticato nulla e questo sarà utile.

PS: Mi chiedo se è possibile cambiare il link simbolico prima di rimuovere il pacchetto libc6-amd64 (si ignorerebbe l'intera roba liveCD) ma non ne sono sicuro.


Per favore, guarda la tua lingua !!!
Pantera
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.