0

私はここからCを学び始めています。Chapter-5、Exercise-4 で valgrind の使い方を学んでいました。この問題は、このページのソース コード window-17 で説明されています。

ファイル (ex4.c) を Valgrind すると、このページに示されている Valgrind の出力から次のように出力が失われます。

  1. ???それ以外の_itoa_word (_itoa.c:195)

  2. C ライブラリ ファイルの行番号の場所が特定されていません。代わりに、共有ライブラリ ファイル (.so) へのパスが指定されます。

2 つの出力を比較する例を以下に示します。

私が期待すること

==3082== サイズ 8 の初期化されていない値の使用

==3082== 0x4E730EB: _itoa_word (_itoa.c:195)

==3082== by 0x4E743D8: vfprintf (vfprintf.c:1613)

==3082== by 0x4E7E6F9: printf (printf.c:35)

==3082== by 0x40052B: main (ex4.c:11)


私が得るもの

==14647== 0x407D256: ??? (/lib/tls/i686/cmov/libc-2.11.1.so 内)

==14647== by 0x4080B89: vfprintf (/lib/tls/i686/cmov/libc-2.11.1.so 内)

==14647== by 0x40882BF: printf (/lib/tls/i686/cmov/libc-2.11.1.so 内)

==14647== by 0x8048401: メイン (ex4.c:9)

valgrind の出力を修正する方法を教えてください。Ubuntu-10.10、32 ビット版を使用しています。ソースを使用して Valgrind-3.8.1 をインストールしました。私のgccバージョンは4.3.3で、glibcバージョンは2.11.1です

4

1 に答える 1

1

一部の Linux ディストリビューションには、シンボルが削除されたライブラリが付属しています。結果のライブラリははるかに小さくなりますが、gdb または valgrind でデバッグするために必要な関数名がありません。

通常、これらの各ライブラリのデバッグ シンボルを含むパッケージを見つけることができます。たとえば、Ubuntu では、ライブラリのパッケージ名に "-dbg" サフィックスが付きます。C ライブラリ libc6 の場合は、libc6-dbg です。次を使用してインストールします。

sudo aptitude install libc6-dbg
于 2012-11-01T20:25:43.943 に答える