はきだめ

UnityやRailsに関するメモを残します。

まだprintfデバッグで消耗してるの? ~gdb入門~

はじめに

この記事はみす 52nd Advent Calendar 2017の18日目の記事です。前回の記事はこちらです。

torino-k.hatenablog.com

今回はgdbというデバッガについて紹介しようと思います。

gdbとは?

Linux環境で標準で入っているデバッガです。gcc同様に学校のパソコンにも入っています。

macで使う場合は色々設定が必要でした。 qiita.com

これを使うことで関数をステップ実行したり、ブレークポイントを張ってプログラムの処理を止めたり、変数の中身を覗いたり、変数の中身を違う値に変えたり....といったことが可能になります。
C言語以外でもデバッグが出来るみたいですが、この記事ではC言語デバッグを想定して紹介しようと思います。

どうやって使うの?

gccコンパイルする際に-g3というオプション*1をつけることでgdbによるデバッグが可能になります。

$ gcc ソースコード名 -g3

gdbを起動する際は以下のコマンドで起動することが出来ます。

$ gdb 実行ファイル名

以下のコマンドでブレークポイントの貼ることが出来ます。

(gdb) b 関数
(gdb) b 行番号
(gdb) b ファイル名:行番号

実行する際はrunと入力するとブレークポイントがあるところまでプログラムを動かしてくれます。終了するときはquitと入力するかctrl + dで抜けられます。

変数の表示

(gdb) p 変数

変数に何か違う値を代入したいときは

(gdb) p 変数=

実行

(gdb) n #1行ずつ実行(関数の中には入らない)
(gdb) s #1行ずつ実行(関数の中にも入る)
(gdb) c #次のブレークポイントまで処理を進める

gdbを使うと何が嬉しいか

  • printf連打地獄から解法される
  • ターミナルから離れなくていい(vimmerとかに優しい)

それIDEで良くね?

......はい。

おわりに

すでに一回アドカレで記事を書いて居るのですが、枠が余っていたのでおかわりしてみました。IDEでいいじゃんって言われるとそれまでなんですが、IDEが無い学校のCプログラミングの授業などで1行ずつ処理を追ってみたいなってときとかに役に立つんじゃないかなぁと思います。

*1:-gはデバッグ情報を生成するオプションです。この-gオプションにはレベルを設定(g0~g3)することができ、-g3はその中でも一番細かくデバッグ情報を生成するオプションです。