gdb breakpoint


http://sourceware.org/gdb/current/onlinedocs/gdb
二、ブレークポイントの設定
gdbブレークポイント分類:
ブレークポイントを設定するコマンドの分類:
breakpoint
行番号、関数、条件に基づいてブレークポイントを生成できます.
watchpoint
モニタ変数または式の値が変化したときにブレークポイントが発生します.
catchpoint
信号の発生を監視する.例えばc++のthrowや、ライブラリをロードするとき.
gdbの変数は1から符号化され、異なるブレークポイントは変数符号同一管理を採用し、enable、disableなどのコマンドで管理できるとともに、ブレークポイント範囲の操作をサポートする.例えば、一部のコマンドはブレークポイント範囲をパラメータとして受け入れる.
例:disable 5-8
 
1、break及びbreak変種の詳細:
関連コマンドにはbreak,tbreak,rbreak,hbreak,thbreakがあり,後の2つはハードウェアベースであり,先に紹介しない.
>>breakとtbeak
break,tbreakは行番号,関数,条件に基づいてブレークポイントを生成することができる.tbreakの設定方法はbreakと同じですが、tbreakはブレークポイントで一度だけ停止し、後で自動的にブレークポイントを削除します.breakは手動でブレークポイントの削除と使用を制御する必要があります.
breakには、次のパラメータがあります.
linenum                 ローカル行番号、すなわちlistコマンドで表示される行番号
filename:linenum  文書の行番号を作る
function                関数、カスタム関数、オープンなどのライブラリ関数
filename:function  ファイル内の関数の作成
condtion                条件
 
*address      アドレス、しかし関数、変数のアドレス、このアドレスはinfo addコマンドで得ることができます.
例:
break 10    
break test.c:10
break main
break test.c:main
break system
break open
指定したアドレスにブレークポイントを設定したい場合は、main関数のアドレスにブレークポイントを設定します.
0 x 80484624などのmainのアドレスをinfo add mainで取得し、break*0 x 80484624を使用します.
条件付きブレークポイントとは、上述したようにブレークポイントを指定しながらブレークポイントに入る条件を指定するものである.
例:(intタイプ変数indexがある場合)
break 10 if index == 3
tbreak 12 if index == 5
>>rbreak
rbreakはルール式に従うことができます.rbreak+式の使い方はgrep+式と似ています.すなわち、式に一致するすべての関数エントリにブレークポイントを設定します.
 
rbreak list_* つまりlist_先頭文字の関数の場所にブレークポイントを設定します.
rbreak ^list_ 機能は上と同じです.
>>ブレークポイント情報の表示
info break [break num ]
info breakはすべてのブレークポイント情報をリストし、info breakの後に表示するbreak numを設定することもできます.
info break 1は、ブレークポイント番号が1のブレークポイント情報をリストします.
     Num     Type           Disp Enb  Address    What
     1       breakpoint     keep y    <MULTIPLE>
             stop only if i==1
             breakpoint already hit 1 time
     1.1                         y    0x080486a2 in void foo<int>() at t.cc:8
     1.2                         y    0x080486ca in void foo<double>() at t.cc:8