2

アプリケーションをデバッグするときに、GDBに侵入して、errnoをチェックする関数内からでも、errnoを出力しようとすると、GDBから次のエラーが発生します。

(gdb) print errno
Cannot find shared library `/usr/lib/debug/lib/libc-2.11.1.so' in dynamic linker's load module list

私が試したこと:

  1. ファイルが存在するかどうかを確認します。存在し、約7.3MBです。
  2. LD_LIBRARY_PATHの前に/usr/ lib / debug /lib/を追加します。無効。
  3. LD_PRELOAD = / usr / lib / debug / lib / libc-2.11.1.soを設定すると、起動時にアプリがセグメンテーション違反になります。
  4. バイナリでlddを実行すると、「/ lib / libc.so.6」を使用していると表示され、aptitude(Ubuntuを実行している)はlibc6-dbgインストールされていることを通知します。
  5. .gdbinitにカスタムlibパスが設定されていないことを確認しましたが、設定していません。

それ以外の点ではアプリケーションは正常に動作しているように見えるので、libc自体が台無しになっているとは想像できません。何か案は?

4

1 に答える 1

13

このファイルには、デバッグバージョンのglibcが含まれて/usr/lib/debug/lib/libc-2.11.1.soいません。libcのデバッグ部分のみが含まれ、実際の実行可能コードは含まれていません。それを入れるLD_PRELOADか、それLD_LIBRARY_PATH間違ったことです。やめてください。

ここで個別のデバッグファイルについて読むことができます。

(gdb)
printerrnoダイナミックリンカのロードモジュールリストに共有ライブラリ`/usr/lib/debug/lib/libc-2.11.1.so'が見つかりません

これはGDBのバグレットです。

GDBは変数を検索しますerrnoが、アプリケーションはそのような変数を使用しないことを知っておく必要があります。むしろ、errnoはに#define展開されるdマクロで*(__errno_location())あり、GDBはこれを認識していません。

代わりにこれを試してください:

(gdb) p __errno_location()
$1 = (int *) 0x7ffff78396a8

(gdb) x/x $1
0x7ffff78396a8: 0x00000000
于 2012-12-04T05:23:16.397 に答える