finishは関数内の処理を実行して復帰する直前で停止するが、returnは現在の位置から強制的に復帰する。
なんだけど、リトルエンディアンなので、実際にはひっくり返ってる。 eflagsとかで表現されるが、setする時は$psになる。 状態表示 (gdb) i r 中略 eflags 0x202 [ IF ] 設定 set $ps=0x242 オリジナルな.gdb.init¶ set disassembly-flavor intel set follow-fork-mode child set history save on set history filename ~/.gdb_history set history size 32768 set history expansion on define xall i r eip esp ebp eax x/5i $eip x/32xw $esp end document xall Stack and disas helper end defin
しかし、ブレークポイントという機能はデバッガの手助けなしでは実現できません。 ブレークポイントとはプログラムの強制一時停止を行うポイントで、実行中のプログラムがブレークポイントに遭遇するとプログラムは一時停止され、デバッガによるプログラムへの介入を行えるようになります。 ブレークポイントは次のような場所に設定できます。 指定した行番号のプログラムを実行しようとする瞬間 関数を呼び出した瞬間 その他、C++などでは「例外が発生した瞬間」などにもブレークポイントを設定することができます。 行番号ブレーク ブレークポイントとしてよく使用されるのは、「プログラムの特定の位置」です。 例として、bubblesort.cプログラムのsort関数内で、隣り合う二つの要素を比較している箇所にブレークポイントを設定してみます。 25|/* bubble sort */ 26|void sort(int *a
たとえば、変数 var の値を2進数で表示したい場合は、次のように指定します。 (gdb) p/t var 一覧表示 whatis 変数の型を調べる。 info b 今設定しているブレークポイントの一覧を表示 セグメントフォルトをした後に利用すれば、どの関数で発生したか確認できます。 info stack 関数の呼び出しスタックの一覧を表示 info Thread 存在しているスレッドの一覧を表示 異なるアドレスにおける処理継続 以下のコマンドを使用することで、ユーザが選択したアドレスにおいて実行を継続させることができます jump linespec linespecで指定される行において、実行を再開 jump *address addressで指定されるアドレスにある命令から、実行を再開 アドレスが分かっている場合のメモリリーク出力 xはhexの意味です。 (gdb) p (char*)
よく使いそうなものの覚書。 実行ファイルを指定して起動する $ gdb a.out 次のようにオプションを指定すると、 ライセンス表示を出さない アセンブリコードをIntel形式で表示する 停止するたびに直後の命令を表示する ようにできる。 $ gdb -q -ex 'set disassembly-flavor intel' -ex 'disp/i $pc' a.out 起動中のプロセスにアタッチする $ gdb -p [PID] ヘルプ、コマンド検索 (gdb) help break (gdb) apropos breakpoint 実行する main関数で止める場合。引数にはシェルの構文がそのまま使える。 (gdb) start AAAA main関数で止めない場合。 (gdb) run AAAA (gdb) r AAAA 引数を別途セットすることもできる。 (gdb) set ar
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く