Valgrind выполняет отладочную ошибку

15

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

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

[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$ 

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

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

    
задан Ayusman 08.06.2012 в 19:30
источник

3 ответа

11

Ok, Я сделал intsall libc6-dbg так

sudo apt-get install libc6-dbg

и valgrind, похоже, работает нормально.

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

Ссылка

    
ответ дан Ayusman 08.06.2012 в 19:44
источник
38

Я получил по сути одно и то же сообщение (за исключением того, что 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

Это обсуждается на ссылке

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

    
ответ дан nobar 12.04.2013 в 19:46
0

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

Итак, я прочитал много подобных сообщений, обычно советуя установить libc6-dbg: i386 ... Я думаю, что это решило проблему для -m32, но это было не то, что я искал. Поэтому после долгого времени к этому подошло: Ссылка

Поэтому попробуйте запустить 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 потому что это сделает символическую ссылку в папке live cd / . Также вы должны иметь права root для записи в 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 / folder

Надеюсь, я ничего не забыл, и это будет полезно.

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

ответ дан krumpac007 10.04.2015 в 00:20