2

で構成されたクロス gdb があります--host=i686-pc-linux-gnu --target=powerpc-e300c3-linux-gnu。を使用してリモート ボード上のアプリケーションを正しくデバッグできますが、とgdbserverの間のバージョンの不一致に関するエラーが発生するため、スレッドを正しくデバッグできません ( 3 つのスレッドではなく 1 つのスレッドのみを認識します)。多分それはの異なるバージョンが原因です:私が持っているホストマシンとターゲットマシンで。ホストにgdbをリンクするためにホストを再構築しようとしましたが、それは地獄です。夢中になって再構築する前に、誰かがそれが問題であることを確認できますか?libthread_dblibpthreadgdblibclibc2.15lib2.5libc2.5libc

4

1 に答える 1

2

gdbをリンクするために、ホスト用にlibc2.5を再構築しようとしました

それはあなたが必要とするものではありません。

必要なのは、gdb がlibthread_db.so.1target に一致するを見つけてロードすることlibpthread.so.0です。

このためには、次のことが必要です。

  1. libc-2.5ホスト用にビルドし、
  2. ステップ1で組み込まれたlibthread-db-search-pathものを見つけるようにGDBを設定します。libthread_db.so.1

ステップ 1 で実際に libc 全体をビルドする必要はありません。次のようなもので十分です。

mkdir build && cd build
../configure --prefix=/usr
make -C ../nptl_db objdir=`pwd`

アップデート:

GDB 6.6 を使用していますが、libthread-db-search-path がありません。そのパスを指定する別の方法は何ですか?

そのGDBはただdlopen("libthread_db.so.1", ...). したがって、正しいものを見つけるには、libthread_db.so.1調整する必要がありますLD_LIBRARY_PATH。バッシュの使用:

LD_LIBRARY_PATH=/tmp/glibc-2.5/build/nptl_db gdb /path/to/target/a.out
于 2012-06-14T04:46:17.223 に答える