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


92

--commandフラグを使用してgdbセッションを自動化しようとしています。共有ライブラリ(UNIXのDLLに相当)の関数にブレークポイントを設定しようとしています。私の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リリース2009.0)
Copyright(C)2008 Free Software Foundation、Inc.
ライセンスGPLv3 +:GNU GPLバージョン3以降 
これはフリーソフトウェアです。自由に変更して再配布できます。
法律で許可されている範囲で、保証はありません。「コピーを表示」と入力します
詳細については、「保証を表示」をご覧ください。
このGDBは「i586-mandriva-linux-gnu」として構成されました...
(デバッグシンボルが見つかりません)
関数「IA__FcFontMatch」は定義されていません。
将来の共有ライブラリのロード時にブレークポイントを保留にしますか?(yまたは[n])[答えはN; 端末からではなく入力]

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

何かできたとは思いますが、何ができたかは思い出せません。


回答:


149

自分への返事として、私が誰かがIRCで私に与えた答えを出したいと思います。

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

そして、ブレークポイントを保留に設定するのがコツです。それはcmds.gdb例えばのように使用されています

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

これにより、MinGWを使用してWindows 7でデバッグしようとしていたベーコンを節約できました。デフォルト設定はLinuxとは異なりました
bph

何らかの理由で、このエラーが発生しますProgram received signal SIGILL, Illegal instruction。私はファイルからブレークポイントを調達していますがset breakpoint pending on、いくつかのブレークポイントはプログラムがロードするライブラリーにあるためです。ブレークポイントを手動で追加した場合、エラーは発生しません。同様の問題に直面している人はいますか?
壊れた足

@brokenfoot:ここでの回答に対するコメントではなく、新しいトップレベルの質問で質問するべきだと思います。そうすれば、より多くの人がそれに気付くでしょう。さらに、システムに関する詳細情報を提供する必要があります。
Shlomi Fish 2016

11

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

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

2
「ex」スイッチはどこにありますか?このドキュメントへの参照はドキュメントにありません(ただし、動作します:))
Gearoid Murphy

-exうまくいきませんでした。:私はとtmpファイルとコール内のコマンドを入れていたgdb -x /tmp/gdb.commands myexecutible
ジェイソン・ムーア

5

記号なし。

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.