DDD(Data Display Debugger)のインストールとKGDBとの接続
前回はカーネルにスタブ(KGDB)を仕込んでKGDBモードに切り替わるまで確認しました。
これと母艦PCからGDBで接続してみることにします。
下のURLの先頭の図のイメージです。
http://jr0bak.homelinux.net/~imai/pukiwiki/pukiwiki.php?%C6%FC%B5%AD%2F2009-05-02%2Fkgdb%20%A4%F2%BB%C8%A4%C3%A4%C6%A4%DF%A4%BF%20-%20%A5%C6%A5%AD%A5%B9%A5%C8%C8%C7
GDBは昔から良く使われているデバッガですが、若干使い勝手に難があります。
昔気質の方は、「男はだまってCUI」なのかもしれませんが(^^;
ということでGUIでデバッグ出来るものとして、DDD(Data Display Debugger)を使用します。
DDDはGDBのフロントエンドとして動作します。
1、DDDのインストール
本家サイト
http://www.gnu.org/software/ddd/
3.3.12が最新のようですが、日付が2009/02/11でリリースは止まっているようです。
DDDのインストールを検索すると、古い記事しかヒットしません。
OpenMotifを入れたりとか面倒くさそうです。
(1)パッケージ検索
Ubuntu(10.04)で
システム→システム管理→Synapticパッケージマネージャを起動
検索で「ddd」で検索するとヒットしました。
最新じゃないですが、とりあえずよしとして、ドキュメントも一緒にインストールします。
左のチェックボックスをクリックします。
(2)依存関係
このバージョンは、LGPL に基いて配布される Motif の実装である Lesstif にリンクしています。
と説明にあるので、Lesstifに依存しているようです。
適用を押すと確認画面が表示されるのでマークを押します。
(3)選択状態になります。
(4)適用
適用を選択すると以下の画面が表示されるので、適用を押して3つのパッケージをインストールします。
(5)適用が完了するので、閉じるを押します。
(6)dddがインストールされたことを確認します。
$ which ddd
/usr/bin/ddd
2、DDDによるデバッグ
GDBのフロントエンドである、DDDを使ってターゲットに接続します。
GDBはAndroidの配下にある
$ANDROID_ROOT/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gdb
を使います。
パスが長くて面倒なので
$ANDROID_ROOT/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/
をPATHに追加しておきます。
(1)PandaBoardの起動とKGDBモードへの移動
電源を入れて起動します。
起動が終わって、コマンドプロンプトが表示されたら、「ブレーク信号 g」でKGDBモードへ移行します。
TeraTerm:メニューのコントロール→ブレーク送信を選択してから、gを押します。
minicom:Ctrl+a fでブレーク信号が送出されます。この後に続けて「g」を押します。
(2)ディレクトリの移動
シンボル情報を使いますので「vmlinux」がある、$ANDROID_ROOT/kernel/omapへ移動します。
(3)DDDの起動
GDBを指定して起動します。
$ ddd --debugger arm-eabi-gdb
(4)起動画面
起動すると以下の画面が表示されるので「Close」を選択します
(5)Help画面
Help画面を閉じます。
(6)DDD画面表示
DDD画面が表示されます。
デフォルトだと2つに分かれていて上が「Source Window」下が「GDB Console」です。
View→Data Windowを追加しておくと良いでしょう。
(7)デバッグイメージの読み込み
GDB ConsoleでGDBのコマンドが実行出来ます。
(gdb) file vmlinux
を実行してデバッグイメージを読み込みます。
Source Windowにソースが表示されます。
(8)minicomを終了させる
(1)でminicomが起動していると思いますが、終了して「/dev/ttyUSB0」を開けます。
GDBでもシリアルを使うためです。
(9)ターゲットに接続する
GDB ConsoleでGDBコマンドを実行する
(gdb) target remote /dev/ttyUSB0
(10)ブレークポイントを設定
GDB ConsoleでGDBコマンドを実行する
(gdb) b printk
(11)実行
GDB ConsoleでGDBコマンドを実行する
(gdb) c
ブレークポイントで止まります。「stop」の茶色の丸に→のマークがあります。
(12)変数
va_start(args, fmt);
のところで、argsとfmtをダブルクリックすると上の「Data Window」に表示されます。
(12)ステップ実行
右にあるDDDと表示されたウインドウでステップ実行が出来ます。
Stepをクリックすると→が一行下がります。
と言う感じで、変数の中をみたりステップ実行が出来そうです。
これと母艦PCからGDBで接続してみることにします。
下のURLの先頭の図のイメージです。
http://jr0bak.homelinux.net/~imai/pukiwiki/pukiwiki.php?%C6%FC%B5%AD%2F2009-05-02%2Fkgdb%20%A4%F2%BB%C8%A4%C3%A4%C6%A4%DF%A4%BF%20-%20%A5%C6%A5%AD%A5%B9%A5%C8%C8%C7
GDBは昔から良く使われているデバッガですが、若干使い勝手に難があります。
昔気質の方は、「男はだまってCUI」なのかもしれませんが(^^;
ということでGUIでデバッグ出来るものとして、DDD(Data Display Debugger)を使用します。
DDDはGDBのフロントエンドとして動作します。
1、DDDのインストール
本家サイト
http://www.gnu.org/software/ddd/
3.3.12が最新のようですが、日付が2009/02/11でリリースは止まっているようです。
DDDのインストールを検索すると、古い記事しかヒットしません。
OpenMotifを入れたりとか面倒くさそうです。
(1)パッケージ検索
Ubuntu(10.04)で
システム→システム管理→Synapticパッケージマネージャを起動
検索で「ddd」で検索するとヒットしました。
最新じゃないですが、とりあえずよしとして、ドキュメントも一緒にインストールします。
左のチェックボックスをクリックします。
(2)依存関係
このバージョンは、LGPL に基いて配布される Motif の実装である Lesstif にリンクしています。
と説明にあるので、Lesstifに依存しているようです。
適用を押すと確認画面が表示されるのでマークを押します。
(3)選択状態になります。
(4)適用
適用を選択すると以下の画面が表示されるので、適用を押して3つのパッケージをインストールします。
(5)適用が完了するので、閉じるを押します。
(6)dddがインストールされたことを確認します。
$ which ddd
/usr/bin/ddd
2、DDDによるデバッグ
GDBのフロントエンドである、DDDを使ってターゲットに接続します。
GDBはAndroidの配下にある
$ANDROID_ROOT/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gdb
を使います。
パスが長くて面倒なので
$ANDROID_ROOT/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/
をPATHに追加しておきます。
(1)PandaBoardの起動とKGDBモードへの移動
電源を入れて起動します。
起動が終わって、コマンドプロンプトが表示されたら、「ブレーク信号 g」でKGDBモードへ移行します。
TeraTerm:メニューのコントロール→ブレーク送信を選択してから、gを押します。
minicom:Ctrl+a fでブレーク信号が送出されます。この後に続けて「g」を押します。
(2)ディレクトリの移動
シンボル情報を使いますので「vmlinux」がある、$ANDROID_ROOT/kernel/omapへ移動します。
(3)DDDの起動
GDBを指定して起動します。
$ ddd --debugger arm-eabi-gdb
(4)起動画面
起動すると以下の画面が表示されるので「Close」を選択します
(5)Help画面
Help画面を閉じます。
(6)DDD画面表示
DDD画面が表示されます。
デフォルトだと2つに分かれていて上が「Source Window」下が「GDB Console」です。
View→Data Windowを追加しておくと良いでしょう。
(7)デバッグイメージの読み込み
GDB ConsoleでGDBのコマンドが実行出来ます。
(gdb) file vmlinux
を実行してデバッグイメージを読み込みます。
Source Windowにソースが表示されます。
(8)minicomを終了させる
(1)でminicomが起動していると思いますが、終了して「/dev/ttyUSB0」を開けます。
GDBでもシリアルを使うためです。
(9)ターゲットに接続する
GDB ConsoleでGDBコマンドを実行する
(gdb) target remote /dev/ttyUSB0
(10)ブレークポイントを設定
GDB ConsoleでGDBコマンドを実行する
(gdb) b printk
(11)実行
GDB ConsoleでGDBコマンドを実行する
(gdb) c
ブレークポイントで止まります。「stop」の茶色の丸に→のマークがあります。
(12)変数
va_start(args, fmt);
のところで、argsとfmtをダブルクリックすると上の「Data Window」に表示されます。
(12)ステップ実行
右にあるDDDと表示されたウインドウでステップ実行が出来ます。
Stepをクリックすると→が一行下がります。
と言う感じで、変数の中をみたりステップ実行が出来そうです。
The Art of Debugging With Gdb/Ddd: For Professionals and Students
No Starch Pr
Norman Matloff
ユーザレビュー:

Amazonアソシエイト by

No Starch Pr
Norman Matloff
ユーザレビュー:

Amazonアソシエイト by

この記事へのコメント