--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」と応答するようにデフォルトに設定するにはどうすればよいですか?
私は何かできたことを思い出すが、何を思い出せない。
自分自身に返信して、誰かがIRCで私にくれた答えをしたいと思います:
(gdb)apropos pending actions-トレースポイントで実行するアクションを指定します ブレークポイントの設定-ブレークポイント固有の設定 ブレークポイントの保留を設定-設定保留中のブレークポイントに関するデバッガーの動作 show breakpoint-ブレークポイント固有の設定 show breakpoint pending-保留中のブレークポイントに関するデバッガーの動作を表示
そしてブレークポイントを保留中に設定はトリックを行います。 cmds.gdb
で使用されています.
set breakpoint pending on
break <source file name>:<line number>
OT:端末では、Cajaを1行でデバッグするには次のようになります。
gdb -ex "set breakpoint pending on" -ex "break gdk_x_error" -ex run --args caja --sync
記号なし。
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