valgrind 要求调试信息 libc6-dbg

lva*_*vad 5 valgrind

我已经浏览了与此错误相关的答案。但是,我的问题是一旦我有了 libc 的调试信息,我应该把这个库放在什么位置,以便 valgrind 看到它?

我已经为我的目标环境下载了 valgrind 和交叉编译。我尝试了以下所有不同的组合:

  1. 我把 libc 放在 /lib 和 debuginfo 放在 /lib/debug
  2. 将 debuginfo 重命名为 libc.debug
  3. 导出 VALGRIND_LIB 以包含 /lib、/lib/debug

最后但并非最不重要的是,以下是实际错误:

==29946== Memcheck, a memory error detector
==29946== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==29946== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
==29946== Command: /bin/my_prog
==29946==

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:      strcmp
valgrind:  in an object with soname matching:   ld-linux-armhf.so.3
valgrind:  was not found whilst processing
valgrind:  symbols from the object with soname: ld-linux-armhf.so.3
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:  Note that if you are debugging a 32 bit process on a
valgrind:  64 bit system, you will need a corresponding 32 bit debuginfo
valgrind:  package (e.g. libc6-dbg:i386).
valgrind:
valgrind:  Cannot continue -- exiting now.  Sorry.
Run Code Online (Sandbox Code Playgroud)

Flo*_*mer 0

如果目标是 glibc,则需要确保它.symtab没有从动态加载器 ( /lib/ld-linux-armhf.so.3) 中剥离。valgrind 需要这些符号才能工作。