web-dev-qa-db-ja.com

gdbでマルチスレッドアプリケーションをデバッグできません

Gdbを使用してマルチスレッドアプリケーションをデバッグしていますが、gdbでプログラムを起動すると、次の警告が表示されます。

警告:下位のスレッドライブラリに一致するlibthread_dbが見つかりません。スレッドのデバッグは利用できません。

まだデバッグできますが、メインスレッド以外はデバッグできません。 libthread-db1パッケージとglibc-dbgパッケージのインストールを提案するフォーラムを読んだことがありますが、これでは問題が修正されません。

私のマシンには、/lib/libthread_db.so.1/lib/.debug/libthread_db-1.0.so、および/lib/libthread_db-1.0.soの3つのファイルがあります。 /liblibthread_db.soという名前のシンボリックリンクを作成してみました。1回は/lib/libthread_db.so.1ファイルをポイントし、もう1回は/lib/libthread_db-1.0.soファイルをポイントしました。シンボリックリンク/lib/.debug/libthread_db.so/lib/.debug/libthread_db-1.0.soを指しており、すべて運がありません。

Gdbで、libthread-db-search-path/libに設定してみました(シンボリックリンクをlibthread_db.so.1に設定し、libthread_db-1.0.soに設定し、/lib/.debugに設定しました。

助言がありますか? BeagleBoard-xmにAngstromLinuxv2.6.39を使用しています。

13
Samuel

警告:下位のスレッドライブラリに一致するlibthread_dbが見つかりません

これは、/lib/libthread_db.so.1/lib/libpthread.so.0と一致しないことを意味します。このような不一致は、異なるバージョンのlibcおよびlibthread_dbパッケージをインストールしたか、パッケージ管理システムの外部でいずれかを更新した結果である可能性があります。パッケージにエラーがある可能性もあります(つまり、正しくビルドされていない可能性があります)。

無視/lib/.debug/*-つまりnot探しているライブラリである必要があります。

8

あなたは使用しようとして正しいです

set libthread-db-search-path [path]

ただし、使用しているpthreadsライブラリと互換性のあるバージョンのlibthread_dbをまだ指定していないようです。

まず、lddを使用してリンクしているpthreadライブラリを確認します。

ldd your_executable

次に、libthread-db-search-pathが、取得しているlibpthreadと互換性のあるバージョンのlibthread_dbがある場所を指していることを確認します。ダイナミックリンカパスが予想とは異なるpthreadライブラリを取得している可能性があります。

5
Tony K.