Valgrind 调试错误

Valgrind 调试错误

我一直在尝试按照在线教程 艰难地学习 C 语言

但是在设置 valgrind 之后(我按照其他帮助在 ubuntu 12.04 上设置 valgrind 的链接),当我尝试调试 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。我的笔记本电脑是 Windows 7 64 位操作系统。

答案1

我收到的消息基本相同(除了ld-linux-x86-64.so.2被替换为ld-linux.so.2)。我已使用 安装了 Valgrind,apt-get因此 libc6-dbg 已作为依赖项包含在内。

我还没有完全解决这个问题,但有线索表明这个错误与我-m32构建时的使用有关。

因此,就我的情况而言,问题似乎是在 64 位安装的 Ubuntu 12.04 上构建时缺少 32 位版本的 libc6-dbg(或其某些组件)。


解决方案(就我的情况而言)

对我来说,以下命令使事情正常进行......

sudo apt-get install libc6-dbg:i386

讨论https://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/881236

注意:该包libc6-dbg:i386不会在 Synaptic 中或通过命令完成显示为可用选项apt-get- 但无论如何它都在那里。

答案2

好的,我确实像这样安装了 libc6-dbg

sudo apt-get install libc6-dbg

并且 valgrind 似乎运行良好。

感谢 ubuntu 论坛链接:

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

答案3

我为此奋斗了很长时间,在 -m32 模式下编译成功了,但这很麻烦,而且如果我想使用例如 -lcrypto,我无法在 -m32 模式下编译,因为我没有安装 32 位 openssl。

所以我读了很多类似的帖子,通常建议安装 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 因为它会在 live cd/文件夹中创建一个符号链接。此外,您必须拥有 root 权限才能写入 lib64。所以我的做法是:(我通过 liveCD 终端打开了损坏的 valgrind 磁盘上的 / 文件夹)

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

希望我没有忘记任何事情并且这将会有所帮助。

附言:我想知道在删除 libc6-amd64 包之前是否可以更改符号链接(您将绕过整个 liveCD 内容)但我不确定。

相关内容