LINUX.ORG.RU

Не запускается Valgrind. Что делать?

 , memcheck,


0

3

Бодаюсь тут с легаси кодом. Ведет он себя очень странно: будучи запущенным под дебаггером работает правильно (я попадаю в нужную точку останова). Но простой запуск демонстрирует другое поведение (действия в исследуемом куске не выполняются, сообщение в консоль в этом же месте не пишется). По моему опыту это может свидетельствовать об выходе за границу массива или значение где-то накладывается.

Обычно в таких ситуациях мне помогал valgrind. Но сейчас на Debian 9 Stable что-то он у меня не запускается. Вот что выдает memcheck:

$ valgrind --tool=memcheck ./device ./processLog.txt
==3946== Memcheck, a memory error detector
==3946== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==3946== Using Valgrind-3.12.0.SVN and LibVEX; rerun with -h for copyright info
==3946== Command: ./device ./processLog.txt
==3946==

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.so.2
valgrind:  was not found whilst processing
valgrind:  symbols from the object with soname: ld-linux.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.


Пакет libc6-dbg у меня установлен. Что еще можно сделать, чтобы valgrind заработал?

Я предполагаю, что пострипан ld-linux.so.2, но не могу собразить где взять непострипаный, компилировать его чтоли? А как?

★★★★★

Последнее исправление: Xintrea (всего исправлений: 1)

Во-первых, удостоверься, что версия libc6-dbg и libc6 совпадает. Во-вторых, если ты дебажишь 32х-разрядный бинарник на 64х-разрядной системе, ставить надо libc6-dbg:i386.

Deleted
()

у тебя, часом, не 32-битное приложение в 64-битной системе. просто может битность библиотек не совпадать.

Iron_Bug ★★★★★
()
Ответ на: комментарий от Iron_Bug

Значит, дело такое. У меня система 64 bit.

В Makefile этого легаси указана опция CFLAGS+=-m32. Собираю на своей машине. Информация о получаемом бинарнике вот такая:

$ file Device
Device: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=3210d0379ead17aa2a8a529ee67d92fe3ae29fe8, stripped

Но автор за каким-то хреном утверждает, что он переделал код на 64 бит, и у него все работает.

Xintrea ★★★★★
() автор топика
Ответ на: комментарий от Xintrea

Может тогда уже пора убирать m32?

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.