web-dev-qa-db-ja.com

コマンドフラグを使用して将来の共有ライブラリにブレークポイントを設定する方法

--commandフラグを使用してgdbセッションを自動化しようとしています。私は共有ライブラリ(DLLに相当するUnix)の関数にブレークポイントを設定しようとしています。私のcmds.gdbは次のようになります:

set args /home/shlomi/conf/bugs/kde/font-break.txt
b IA__FcFontMatch
r

しかし、私は次のものを得ています:

 shlomi:〜/ progs/bugs-external/kde/font-breaking $ gdb --command = cmds.gdb ... 
 GNU gdb 6.8-2mdv2009.0(Mandriva Linux release 2009.0) 
著作権(C)2008 Free Software Foundation、Inc。
ライセンスGPLv3 +:GNU GPLバージョン3以降
これはフリーソフトウェアです:あなた
法律で許可されている範囲では、保証はありません。詳細については、「show copy」
および「show security」と入力してください。
このGDB 「i586-mandriva-linux-gnu」として構成されました... 
(デバッグシンボルが見つかりません)
関数「IA__FcFontMatch」は定義されていません。
将来の共有ライブラリでブレークポイントを保留にしますload?(yまたは[n])[Nと回答、端末からの入力ではない] 
 

結局、ブレークポイントを設定しません。保留中の将来の共有ライブラリのロードにブレークポイントを設定するために「y」と応答するようにデフォルトに設定するにはどうすればよいですか?

私は何かできたことを思い出すが、何を思い出せない。

89
Shlomi Fish

自分自身に返信して、誰かがIRCで私にくれた答えをしたいと思います:

(gdb)apropos pending 
 actions-トレースポイントで実行するアクションを指定します
ブレークポイントの設定-ブレークポイント固有の設定
ブレークポイントの保留を設定-設定保留中のブレークポイントに関するデバッガーの動作
 show breakpoint-ブレークポイント固有の設定
 show breakpoint pending-保留中のブレークポイントに関するデバッガーの動作を表示

そしてブレークポイントを保留中に設定はトリックを行います。 cmds.gdbで使用されています.

set breakpoint pending on
break <source file name>:<line number>
140
Shlomi Fish

OT:端末では、Cajaを1行でデバッグするには次のようになります。

gdb -ex "set breakpoint pending on" -ex "break gdk_x_error" -ex run --args caja --sync
10
äxl

記号なし。

objdump -t /lib/libacl.so
SYMBOL TABLE:
no symbols
objdump -T /lib/libacl.so
...
00002bd0 g    DF .text  000000d0  ACL_1.0     acl_delete_entry
...


(gdb) break 0x0002bd0 

(gdb) x/20i acl_delete_entry
0x2bd0 <acl_delete_entry>:      stwu    r1,-32(r1)
0x2bd4 <acl_delete_entry+4>:    mflr    r0
0x2bd8 <acl_delete_entry+8>:    stw     r29,20(r1)
0x2bdc <acl_delete_entry+12>:   stw     r30,24(r1)
0x2be0 <acl_delete_entry+16>:   mr      r29,r4
0x2be4 <acl_delete_entry+20>:   li      r4,28972
5