Valgrind faz erro de depuração


18

Eu tenho tentado seguir o tutorial on-line para Learn C The Hard Way .

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.

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$ 

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

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


O valgrind funcionou bem para mim imediatamente, mas não sei dizer quais bibliotecas eu já tinha instalado. O valgrind está disponível no repo. você não precisa compilar é como aprender C da maneira mais difícil. instalando a partir de repo irá lidar com o problema de dependência para você
RobotHumans

Respostas:


42

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

Ainda não o resolvi completamente, mas uma pista é que o erro está correlacionado com o meu uso -m32ao criar.

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


Solução (para o meu caso)

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

sudo apt-get install libc6-dbg:i386

Isso é discutido em https://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/881236

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


Há uma boa alteração que você precisará de ajuda para criar primeiro: stackoverflow.com/a/7412698/86967
nobar

isso deve ser marcado como correto; a :i386é a chave aqui.
Thomas Shields

Foram os 32 bits que fizeram o truque!
Cardin

1
Isso resolveu para mim .. Eu estava vendo esse erro em uma máquina vagabunda. Como os outros comentadores disseram, isso deve ser marcado como correto. (libgc-dbg já foi instalado como uma dependência valgrind, foi o i386 que fez o truque)
Ken

Esta resposta lidou corretamente com binários de 32 bits. libc6-dbgjá foi sugerido na valgrindmensagem de erro.
Leesei


0

Eu lutei com isso por um longo tempo, compilar no modo -m32 funcionou, mas foi um pé no saco, além disso, se eu quisesse usar, por exemplo, -lcrypto, não poderia compilar no -m32, pois não tinha o openssl instalado em 32 bits .

Então, li várias postagens semelhantes, geralmente aconselhando a instalação da libc6-dbg: i386 ... Acho que isso resolveu o problema do -m32, mas não era o que eu estava procurando. Então, depois de muito tempo, chegou a isso: https://lists.ubuntu.com/archives/foundations-bugs/2013-November/173202.html

Portanto, tente executar o dpkg -l libc6 * e, se vir libc6-amd64, isso poderá ajudá-lo. Mas leia com atenção, esp. ponto 2, porque você não poderá 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 demorei 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 criaria um link simbólico na /pasta do live cd . Além disso, você precisa ter direitos de root para gravar na lib64. Então, como eu fiz isso: (eu tinha / a pasta no meu disco quebrado do valgrind aberta através do terminal do 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

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

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


Por favor, assista seu idioma !!!
Panther
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.