Help us understand the problem. What is going on with this article?

gdbを初心者に教える最初のステップ

More than 3 years have passed since last update.

gdbを使える人、gdbを使えない人(あまり使ったことがない人)が居るチームの中で、後者に対してどうやってgdbを身につけてもらうか、を考えました。教える側の目線です。

初めに注意すること

コマンド一覧をいきなり覚えない、覚えさせない

コマンド一覧を渡して使ってみてね、はやらない。初心者は何から覚えて何をやればいいのかわからなくなる。厳選してもダメ、何のために使うか、という目的と一致しないとなかなか覚えられない。

emacsで使うようにする

listでソースコードを表示させる、を覚えるくらいならemacsで使えるようになった方がよい。
emacsを開いた後

M-x, gdb [Enter]
プログラム名

実践する

Segmentation Faultするプログラムをデバッグする

無ければサンプルプログラムを作ればよい。

そのまま走らせてSEGV停止させてみる

(gdb) r // 実行
↓
SEGV発生
↓
(gdb) bt // バックトレース表示
↓
(gdb) up // 1階層上へ。逆はdown
↓
(gdb) p 変数 //変数内容を表示。p/xとすると16進表示
↓
(gdb) q // 終了

あたりをやる。

SEGV前にbreakさせてみる

SEGVになる直前やその原因を作ったと思われる関数にbreak pointを張る。
ここで覚えるのは以下

// break関連
(gdb) b // 現在位置にbreakを張る。rで再実行したらそこで止まる
(gdb) b func // 関数funcの入り口にbreakを張る
(gdb) b xxx.c:123 /// ソースファイルの指定行にbreakを張る
emacsでCtrl+space カーソルがある行にbreakを張る

// その他コマンド
(gdb) n // 次の実行行へ。関数があったら中に入らない
(gdb) s // 次の実行行へ。関数があったら中に入る
(gdb) p value=xxx // valueにxxxを入れる。SEGVにならない変数に書き換えたり
(gdb) c // 現在位置から再実行
// 場合によっては使う?
(gdb) u // ループからなかなか抜けられない時に

補足

省略したが以下は押さえておく。
・gccでコンパイルするときは-gオプション
以下も実行環境によっては必要
・SIGUSR1などで止まる場合は.gdbinitに無視する記述を追加(予め配布する)

最後に

個人的にはこれで十分使えてますし、以降は「じゃあこういうことは出来ないのか?」ということになり、自分で調べるか聞いてくるか、になると思います。

igayu
組み込み技術者15年程度、基本C言語、Linux、シェルスクリプトで生きてきました。最近Eclipseとかちゃんと使ってみようと意識改革。チームでのレベルアップとか上級職との説得・折衝といった目線で書いていこうと思います。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした