« 3/22 タスク | トップページ | 3/23 タスク »

2010年3月23日 (火)

gdbデバッガーでCのプログラムをデバッグ

とあるCのプログラムをUbuntuに移植することになりました。
なかなかうまく動かずどこが原因か特定するためgdbを使用しました。

簡単な使用手順です。

まずはコンパイルするときに-gオプションでデバッグ情報を埋め込みます。

gcc -g test.c

といった感じに。
次にgdbを起動します。

gdb test

ここではtestという実行ファイルを読み込んで起動してますが、
gdbを起動したあとにfileコマンドで読み込んでも同じです。

gdb
file /home/aaa/test

まずはブレイクポイントの設定です。
設定例

break main
break 100

1つ目はmain関数にブレイクポイントを設定しました。
2つ目はソースの100行目にブレイクポイントを設定しました。

そうしましたらrunコマンドで実行です。

r

breakポイントで止まるので次のコマンドで進めていきます。

s  STEP実行
n  NEXT実行
c  continue

sは関数があればその関数の中に入っていきますし、nは関数の中には入りません。cは次のブレイクポイントまで実行します。
一度コマンドを入力したら続けてEnterを押せば同じコマンドを繰り替えしてくれます。

途中でソースが見たくなったらlistコマンドで表示できます。

list 200

ソースの200行目を中心として前後10行表示します。
Enterで先に送れます。

変数の内容が見たい場合はprintコマンドです。

p hensuu

変数の内容を常に追跡したい場合はdisplayコマンドです。

display hensuu

あとは、途中で画面をクリアしたくなったらshellコマンドからclearを実行します。

shell clear

途中でshellに入る場合はそのまま引数なしでshellコマンドを実行し、exitでgdbに戻れます。

あとはメモリの内容を表示したい場合はexamineコマンドです。

x アドレス

例: x/8xb 0xffff0011 、 アドレス0xffff0011の中をHEXで8個見せる

  • n 規定値1 、uで指示した単位    
  • f 表示形式、規定値は16進    
  • u メモリサイズの単位    
    • b バイト       
    • h 2バイト       
    • w 4バイト(規定値)       
    • g 8バイト    

これぐらい使えればいいんじゃないでしょうか。

参考URL
http://www.fireproject.jp/feature/gdb/
http://www.madlabo.com/mad/edat/GDB/index.htm#SEC23

|

« 3/22 タスク | トップページ | 3/23 タスク »

プログラミング」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1103833/33856338

この記事へのトラックバック一覧です: gdbデバッガーでCのプログラムをデバッグ:

« 3/22 タスク | トップページ | 3/23 タスク »