Valgrind делает ошибку отладки

Я пытался следовать онлайн-учебнику для Learn C The Hard Way .

Однако после настройки valgrind (я перешел по другим ссылкам, которые помогают настроить valgrind в ubuntu 12.04), когда я пытаюсь отладить исполняемый файл c, я нахожу следующие ошибки.

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$ 

Есть ли что-то, что я могу сделать, чтобы Valgrind наконец заработал?

У меня есть Ubuntu 12.04 на виртуальной коробке. Мой ноутбук - 64-битная ОС Windows 7.

18
задан 29 May 2015 в 01:33

3 ответа

Хорошо, я сделал intsall libc6-dbg примерно так

sudo apt-get install libc6-dbg

, и valgrind, кажется, работает нормально.

Благодаря ссылке на форум Ubuntu:

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

0
ответ дан 29 May 2015 в 01:33

Я получил по существу то же сообщение (за исключением того, что ld-linux-x86-64.so.2 был заменен ld-linux.so.2). Я установил использование Valgrind apt-get таким образом, libc6-dbg был уже включен как зависимость.

Я еще не полностью разрешил это, но подсказка - то, что ошибка коррелирует с моим использованием -m32 при создании.

Таким образом, казалось бы, что в моем случае проблемой является отсутствие 32-разрядной версии libc6-dbg (или некоторые его компоненты) при построении на 64-разрядной установке Ubuntu 12.04.


Решение (для моего случая)

Для меня следующая команда заставила вещи работать...

sudo apt-get install libc6-dbg:i386

Это обсуждено в https://bugs.launchpad.net/ubuntu / + source/eglibc / + ошибка/881236

Примечание: Пакет libc6-dbg:i386 не обнаруживается как доступный вариант в Синаптическом или через завершение команды apt-get - но это было там так или иначе.

42
ответ дан 29 May 2015 в 01:33

Я боролся с этим в течение очень долгого времени, компилирующий в-m32 режиме работал, но это была боль в заднице, кроме того, если бы я хотел использовать, например,-lcrypto, то я не мог бы скомпилировать в-m32, так как у меня не было openssl в 32 битах установленным.

Таким образом, я прочитал много подобных сообщений, обычно советуя устанавливающий libc6-dbg:i386... Я думаю, что это решило проблему для-m32, но это не было тем, что я искал. Таким образом, после долгого времени прибытие в это: https://lists.ubuntu.com/archives/foundations-bugs/2013-November/173202.html

Так попробуйте рабочий dpkg-l libc6* и если Вы видите libc6-amd64, это могло бы помочь Вам. Но читайте, это тщательно особенно указывает 2, вызывает Вас привычка смочь использовать любые команды после удаления libc6-amd64 пакета поэтому подготовьте liveCD и следуйте инструкциям :) Это помогло мне решить проблему, но мне потребовались приблизительно 3 часа и несколько моментов страха. Я рекомендую скопировать Ваши данные, прежде чем Вы сделаете это, потому что, если Вы перестали работать, не будет, вероятно, никакого пути назад.

И будьте осторожны в точке 4! Вы наклоняетесь, просто пишут команду, предложенную там
ln -s /lib/x86_64-linux-gnu/ld-2.17.so /lib64/ld-linux-x86-64.so.2 потому что это сделало бы символьную ссылку в живом CD / папка. Также необходимо иметь корневые права записать в lib64. Таким образом, как я сделал это было: (я имел / папка на моем поврежденном valgrind диске, открытом через 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

//Вы обращаетесь к файлу на диске с поврежденным Linux, но если бы Вы записали просто / вместо./, то Вы создали бы ссылку в liveCD / папка

Надежда я ничего не забыл и это будет полезно.

P.S.: Интересно, возможно ли изменить символьную ссылку перед удалением libc6-amd64 пакета (Вы обошли бы целый материал liveCD), но я не уверен.

0
ответ дан 29 May 2015 в 01:33

Другие вопросы по тегам:

Похожие вопросы: