RaspberryPi[40] gdb

gdb は GNU Debugger の略称で、プログラムのデバッグや解析を行うための強力なツールです。C、C++、Rust、Go、Ada、Fortranなどのプログラミング言語で書かれたプログラムのデバッグに広く使用されています。gdb はプログラムの実行を一時停止させたり、変数の値を確認したり、スタックトレースを表示したりすることができます。さらに、プログラムの実行中に条件を設定して特定の箇所で停止させたり、プログラムの制御を変更したりすることも可能です。これにより、プログラムのバグを見つけたり、パフォーマンスの問題を特定したりするのに役立ちます。

gdb の名前は知っていましたが、今まで使ったことはありませんでした。でも、プログラムがだんだん複雑になってくると、ソースコードを眺めるだけでは限界があり、ラズパイにも gdb が使えることを知ってインストールしてみました。インストールは apt-get でインストールされます。

デバッグ時にコンパイルする際には、通常 -g オプションを使用します。これは、コンパイルされたバイナリにデバッグ情報を含めるためのオプションです。具体的には、変数や関数名、ソースコードの行番号などの情報がバイナリに埋め込まれます。これにより、デバッガーが実行時にソースコードとバイナリを関連付け、より効果的にデバッグを行うことができます。

起動は以下のように行います。

dbg source.c

引数がある場合は、

dbg --args source.s -d 1 

起動すると下記の画面が出ます。

NU gdb (Raspbian 10.1-1.7) 10.1.90.20210103-git
Copyright (C) 2021 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "arm-linux-gnueabihf".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./source...
(gdb) 

普段使うのは

break line# —ソースコードの行番号を入れると、そこにブレークポイントが設定されます。

next —- 次のステップに行きます。

continue —– 続けて実行します。次のブレークポイントがあればそこまで実行します。

print 変数名 — 現在の変数の値が出ます。

これだけでも、十分でバッグができます。ほかにいろいろコマンドがありますが、ネットで探してください。