Valgrindはエラーをデバッグします


18

Learn C The Hard Wayのオンラインチュートリアルに従うことを試みてきました 。

ただし、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ビットOSです。


valgrindは最初から問題なく動作しましたが、すでにインストールしたライブラリはわかりません。valgrindはレポから入手できます。コンパイルする必要がないのは、Cがハードな状態を学習するようなものです。リポジトリからインストールすると、依存関係の問題が処理されます
RobotHumans

回答:


42

私は本質的に同じメッセージを受け取りました(それld-linux-x86-64.so.2がに置き換えられたことを除くld-linux.so.2)。私はValgrindをインストールしていたapt-getので、libc6-dbgは既に依存関係として含まれていました。

私はまだこれを完全に解決していませんが、手掛かりは、エラー-m32が構築時の使用と相関していることです。

したがって、私の場合、Ubuntu 12.04の64ビットインストールでビルドする場合、問題はlibc6-dbg(またはそのコンポーネントの一部)の32ビットバージョンが不足しているように見えます。


ソリューション(私の場合)

私にとって、次のコマンドは物事を機能させました...

sudo apt-get install libc6-dbg:i386

これはhttps://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/881236で説明されています

注:このパッケージlibc6-dbg:i386は、Synapticの使用可能なオプションとして表示されません。または、コマンドの完了を介して表示されませんapt-getが、とにかく存在していました。


最初にビルドを支援する必要がある良い変更があります:stackoverflow.com/a/7412698/86967
nobar

これは正しいものとしてマークする必要があります。:i386ここで重要です。
トーマスシールズ

トリックを行ったのは32ビットでした!
カーディン

1
これは私のためにそれを解決しました。他のコメンターが言ったように、これは正しいとマークされるべきです。(libgc-dbgは既にvalgrind依存関係としてインストールされていました。トリックを行ったのはi386でした)
Ken

この回答は、32ビットバイナリを正しく処理しました。のエラーメッセージlibc6-dbgで既に示唆されていましたvalgrind
レーセイ14

11

わかりました、私はそのようにlibs6-dbgをインストールしました

sudo apt-get install libc6-dbg

valgrindはうまく機能しているようです。

ubuntuフォーラムのリンクに感謝します。

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


@ Goaler444私はちょうどやった。思い出してくれてありがとう。
アユスマン

他の回答ポイントとして、実行sudo apt-get install libc6-dbg:i386することは、検証するバイナリに応じた解決策になる可能性があります(64ビット対32ビット)。
ログオフ14

0

私はこれに非常に長い間苦労しましたが、-m32モードでのコンパイルはうまくいきましたが、お尻に苦労しました。さらに、たとえば-lcryptoを使用したい場合は、32ビットのopensslがインストールされていないため、-m32でコンパイルできませんでした。

だから、libc6-dbg:i386をインストールすることを勧める同様の投稿をたくさん読んだ。これは-m32の問題を解決したと思うが、私が探していたものではなかった。久しぶりにこうなりました:https : //lists.ubuntu.com/archives/foundations-bugs/2013-November/173202.html

したがって、dpkg -l libc6 *を実行してみてください。libc6-amd64が表示された場合、これが役立ちます。しかし、特に注意深く読んでください。ポイント2 。失敗した場合、おそらく戻ることができないため、データをバックアップする前にデータをバックアップすることをお勧めします。

そして、ポイント4で注意してください!
ln -s /lib/x86_64-linux-gnu/ld-2.17.so /lib64/ld-linux-x86-64.so.2 ライブcd /フォルダーにシンボリックリンクを作成するため、そこで提案されたコマンドを単純に記述することはできません。また、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

何も忘れずに、これが役立つことを願っています。

PS:libc6-amd64パッケージを削除する前にsymlinkを変更することは可能かと思います(liveCDの内容全体をバイパスします)が、よくわかりません。


あなたの言語を見てください!!!
パンサー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.