sysvbannerをGDBで追う(CGDBフロントエンド)


『タイムボカンシリーズ 逆転イッパツマン』(1882)
久々に見てしまいました。今見ても面白いです。
豪さんにぞっこんのランちゃんが、イッパツマンの正体に気づいてしまった時、イッパツマンは倒されてしまいます。好きな人が目の前で殺されてしまう、ランちゃんの悲しむ姿に、子供心に涙誘われました。ショックでした、まさかヒーローが倒されるなんて。
でも、ちゃんと続きがありました。イッパツマンの正体は、当然豪さんかと思いきや、超能力で操作していたロボットだったなんて。当時の私の中ではまだ超能力ブームは冷めていませんので、イッパツマンが超能力で動いてたと知ると、どうすれば私も家にいながら、遠隔操作の自分そっくりのロボットを動かして通学できるのかと、スプーン曲げをトライしながら思いを巡らせていました。

初代のイッパツマンは、いわゆる豪さんのフロントエンドでしたが、デバッグもGDBをエンジンとするフロントエンドを操作することで、より効率的なデバッグが可能になります。今回は、フロントエンドにCGDBを使用したいと思います。
久々Raspberry Piのコマンドラインも使ってみます。
まずは、gdbとcgdbをインストールします。aptコマンドで簡単インストールできます。

pi@raspberrypi:~ $ su -
Password: 
root@raspberrypi:~# apt-get install gdb cgdb
(省略)
root@raspberrypi:~# 

sysvbannerのソースもインストールします。deb-srcがコメントになっているので、#を外して活かします。

root@raspberrypi:~# vi /etc/apt/sources.list
deb http://mirrordirector.raspbian.org/raspbian/ jessie main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
deb-src http://archive.raspbian.org/raspbian/ jessie main contrib non-free rpi

後は、apt-get update

root@raspberrypi:~# apt-get update
root@raspberrypi:~# exit

そして、sysvbannerのソースも取得します。

pi@raspberrypi:~ $ apt-get source sysvbanner
pi@raspberrypi:~ $ cd sysvbanner-1.0.15/

Makefileを編集して、GDBを使えるようにしておきます。以下の8行目のように-gオプションを追加します。

pi@raspberrypi:~/sysvbanner-1.0.15 $ cat -n Makefile 
     1	DESTDIR=
     2	
     3	BIN=banner
     4	SRC=$(BIN).c
     5	MAN=$(BIN).1
     6	
     7	$(BIN): $(SRC)
     8		$(CC) -g $(CFLAGS) $^ -o $@ $(LDFLAGS)
     9	
    10	install: $(BIN) $(MAN)
    11		install -d $(DESTDIR)/usr/bin
    12		install -m 755 $(BIN) $(DESTDIR)/usr/bin
    13		install -d $(DESTDIR)/usr/share/man/man1
    14		install    -m 644 $(MAN) $(DESTDIR)/usr/share/man/man1
    15	
    16	clean:
    17		$(RM) $(BIN)
pi@raspberrypi:~/sysvbanner-1.0.15 $ 

ビルドします。

pi@raspberrypi:~/sysvbanner-1.0.15 $ make

ではCGDBを使用してデバッグしましょう。

pi@raspberrypi:~/sysvbanner-1.0.15 $ cgdb banner

cgdb-001
画面が上下に分かれて、上がソース画面、下がコマンドの画面になります。
上の画面に表示されている>マークが、現在実行まちの行を表しています。

矢印マークが短くて読みにくい場合は、arrowstyleを指定することで、長い矢印に変更できます。
quitで一旦cgdbを終了し、cgdbの設定ファイルを編集します。

pi@raspberrypi:~/sysvbanner-1.0.15 $ vi ~/.cgdb/cgdbrc

cgdbrcには以下を追加

:set arrowstyle='long'

再度CGDBを起動します。

pi@raspberrypi:~/sysvbanner-1.0.15 $ cgdb banner

cgdb-002
矢印が長くなりましたね。
フロントエンドを使用して、ソースを常に確認しながらデバッグすれば、バグ退治も一発です。

コメント

タイトルとURLをコピーしました