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をクリックすると→が一行下がります。

画像


と言う感じで、変数の中をみたりステップ実行が出来そうです。








実践 デバッグ技法 ?GDB、DDD、Eclipseによるデバッギング
オライリージャパン
Norman Matloff

ユーザレビュー:

amazon.co.jpで買う
Amazonアソシエイト by 実践 デバッグ技法 ?GDB、DDD、Eclipseによるデバッギング の詳しい情報を見る / ウェブリブログ商品ポータル

Debug Hacks -デバッグを極めるテクニック&ツール
オライリージャパン
吉岡 弘隆

ユーザレビュー:

amazon.co.jpで買う
Amazonアソシエイト by Debug Hacks -デバッグを極めるテクニック&ツール の詳しい情報を見る / ウェブリブログ商品ポータル

The Art of Debugging With Gdb/Ddd: For Professionals and Students
No Starch Pr
Norman Matloff

ユーザレビュー:

amazon.co.jpで買う
Amazonアソシエイト by The Art of Debugging With Gdb/Ddd: For Professionals and Students の詳しい情報を見る / ウェブリブログ商品ポータル

"DDD(Data Display Debugger)のインストールとKGDBとの接続" へのコメントを書く

お名前
メールアドレス
ホームページアドレス
コメント