Pthreadにリンクされている.soをロードするプログラムに対してGDBを実行すると、GDBは「新しいスレッドが見つかりません:一般的なエラー」というエラーを報告します。
私が実行する実行可能ファイルはpthreadとリンクされていないことに注意してください。
手がかりはありますか?
$ gdb --args lua -lluarocks.require GNU gdb(GDB)7.0-ubuntu Copyright(C)2009 Free Software Foundation、Inc。 License GPLv3 +:GNU GPLバージョン3以降 これはフリーソフトウェアです。自由に変更して再配布できます。 許可されている範囲で、保証はありません。詳細については、「showcopying」 および「showwarranty」と入力してください。 このGDBは「x86_64-linux-gnu」として構成されています。 バグ報告の手順については、参照: <http://www.gnu.org/software/gdb/bugs/> ... /usr/bin/luaからシンボルを読み取っています...(デバッグシンボルが見つかりません)...完了。 (gdb)run 開始プログラム:/ usr/bin/lua -lluarocks.require Lua 5.1.4 Copyright(C)1994-2008 Lua .org、PUC-Rio > require'ev ' [libthread_dbを有効にしたスレッドデバッグ] 新しいスレッドが見つかりません:一般的なエラー (gdb)q デバッグセッションがアクティブです。 下位1 [プロセス4986]が強制終了されます。 とにかくやめますか? (yまたはn)y
この関数はrequire 'ev'
で呼び出されます。
http://github.com/brimworks/lua-ev/blob/master/lua_ev.c#L25-65
私のシステムに関する追加情報:
$ uname -a Linux localhost 2.6.31-20-generic#58-Ubuntu SMP Fri Mar 12 04:38:19 UTC 2010 x86_64 GNU/Linux
$ lsb_release -a 使用可能なLSBモジュールはありません。 ディストリビューターID:Ubuntu 説明:Ubuntu 9.10 リリース:9.10 コードネーム:karmic
これも機能します:
LD_PRELOAD =/lib/libpthread.so.0 gdb --args ./app
64ビットUbuntuユーザーはこれを行う必要があります:
LD_PRELOAD=/lib/x86_64-linux-gnu/libpthread.so.0 gdb --args ./app
次のテキストを含むホームディレクトリに.gdbinit
を作成することもできます。
set env LD_PRELOAD /lib/libpthread.so.0
アプリケーションが「突然」pthreadに依存するようになると、GDBは気に入らないようです。
私が見つけた唯一の回避策は、ホストアプリケーションをpthreadにリンクすることです。
どちらかというと悲しい...
Pthreadsライブラリへのランタイムリンクが完了した後、gdbがプロセスにアタッチできることがわかりました。
「デバッグ対象のアプリケーションをリンクしているときにフラグ-lpthreadをgcc(またはg ++)に追加すると、問題は解消されます。」 ソース