Valgrind faz o erro de depuração

16

Eu tenho tentado seguir o tutorial on-line para Aprenda C de maneira difícil .

No entanto, depois de configurar o valgrind (segui outros links que ajudam a configurar o valgrind no ubuntu 12.04), quando tento depurar o executável c, encontro os seguintes erros.

[email protected]:~/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.

[email protected]:~/lcthw$ 

Existe algo que eu possa fazer para fazer valgrind finalmente funcionar?

Eu tenho o Ubuntu 12.04 na caixa virtual. Meu laptop é um sistema operacional Windows 7 de 64 bits.

    
por Ayusman 08.06.2012 / 19:30

3 respostas

11

Ok, Eu fiz intsall libc6-dbg como assim

sudo apt-get install libc6-dbg

e o valgrind parece funcionar bem.

Graças ao link do fórum do ubuntu:

link

    
por Ayusman 08.06.2012 / 19:44
39

Recebi essencialmente a mesma mensagem (exceto que ld-linux-x86-64.so.2 foi substituído por ld-linux.so.2 ). Eu tinha instalado o Valgrind usando apt-get , então a libc6-dbg já estava incluída como uma dependência.

Ainda não resolvi totalmente isso, mas uma pista é que o erro está correlacionado ao meu uso de -m32 ao criar.

Portanto, parece que, no meu caso, o problema é a falta de uma versão de 32 bits do libc6-dbg (ou de alguns dos seus componentes), ao construir uma instalação de 64 bits do Ubuntu 12.04.

Solução (no meu caso)

Para mim, o seguinte comando fez as coisas funcionarem ...

sudo apt-get install libc6-dbg:i386

Isso é discutido no link

Nota: O pacote libc6-dbg:i386 não aparece como uma opção disponível no Synaptic ou via conclusão de comando de apt-get - mas estava lá de qualquer maneira.

    
por nobar 12.04.2013 / 19:46
0

Eu lutei com isso por um longo tempo, compilando no modo -m32 funcionou, mas foi uma dor no rabo, além disso, se eu quisesse usar, e. -lcrypto, eu não poderia compilar em -m32 desde que eu não tinha openssl em 32bit instalado.

Então eu li muitos posts similares, geralmente aconselhando a instalação do libc6-dbg: i386 ... Eu acho que isso resolveu o problema para -m32, mas não era o que eu estava procurando. Então, depois de um longo tempo, chegou a isso: link

Portanto, tente executar o dpkg -l libc6 * e, se vir o libc6-amd64, isso poderá ajudá-lo. Mas leia cuidadosamente esp. ponto 2, porque você não será capaz de usar nenhum comando depois de remover o pacote libc6-amd64, então prepare um liveCD e siga as instruções :) Isso me ajudou a resolver o problema, mas eu levei cerca de 3 horas e alguns momentos de medo . Eu recomendo fazer backup de seus dados antes de fazer isso, porque se você falhar, provavelmente não haverá caminho de volta.

E tenha cuidado no ponto 4! Você não pode simplesmente escrever o comando sugerido lá ln -s /lib/x86_64-linux-gnu/ld-2.17.so /lib64/ld-linux-x86-64.so.2 porque ele criaria um link simbólico na pasta live cd / . Além disso, você precisa ter direitos de root para gravar na lib64. Então, como eu fiz foi: (eu tinha / pasta no meu disco valgrind quebrado aberto através do 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

// você se refere ao arquivo no disco com o linux corrompido, mas se você escreveu apenas / ao invés de ./ você criaria o link no liveCD / folder

Espero não ter esquecido nada e isso será útil.

P.S: Gostaria de saber se é possível alterar o link simbólico antes de remover o pacote libc6-amd64 (você deve ignorar todo o material do liveCD), mas não tenho certeza.

    
por krumpac007 10.04.2015 / 00:20