Hatena::ブログ(Diary)

後悔^H^H公開日記:別館 このページをアンテナに追加 RSSフィード

プロフィール

monamour555

組込み系オープンソースな人

[FSF Associate Member]
カレンダー
<< 2007/03 >>
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
最近のコメント

2007-03-01

CDTのgdbinitサポートは寒い

デバッグの起動構成で書く gdbinit は,最終的に --command=... の形でgdb.exeに渡される.

まあ,これはこれで素直な実装といえなくもないが,組込みでは今ひとつ使いづらい.

組込み用のgdbスタブは,大抵monitorコマンドで低レベルのメモリアクセスやhaltなどを行える.

しかし,monitorコマンドを使うには,target remoteを指定しなければならない.

CDTの建前として,target remote を行うのは,CDT自身.なのに,gdbinit に書かなければならない.寒い.

CDTの設定とgdbinitの記述に齟齬が生じる可能性もあり,危険.

残念ながら,今日現在のPizzaFactory3もこの寒さを継承してしまっている.

早速改善作業開始.

作業完了

話は簡単.targetコマンドとloadコマンドの間に,sourceコマンドでgdbinit相当のファイルを読ませればよい.

GDB/MIの枠組みで奇麗に済ますには行毎に読んで-interpreter-execコマンドを使うのだろうけれど,そこまでやる意義はたぶん無い.

MIはconsole用のコマンドを理解できるので,

if (gdbinit != null) {
	MICommand source = new MICommand(version, "source", new String[] { gdbinit }); //$NON-NLS-1$
	session.postCommand(source);
}

とだけしておく.ついでに,gdbのコマンドラインオプションを-nxにしておく.ヘタに.gdbinitを読めるようにしておくと,むしろ混乱するだろうという読み.組込みターゲットで,targetコマンド以前に何か行いたいことなんて無いはずだし.

suikansuikan 2007/03/01 11:14 オブジェクト全部ではなく、シンボルだけロードってできますでしょうか。

monamour555monamour555 2007/03/01 16:15 現時点ではシンボルだけロードする手段はありません.
ROM領域に書込んでも,実害はないと踏んでいるのですが,マズい例はありますでしょうか.

suikansuikan 2007/03/01 23:28 ADuC7026はgdbコマンドからROMに書き込みをかけると、現在の値と同じ値を書きこんでも”cannot access memory”と表示されます。なにかがおきているようです。
また、仮にROM領域への書き込みが無害とすれば、時間がかかるのがデメリットとなります。
RAMの中身を壊したくないこともありますよね。

なかのひと あわせて読みたいブログパーツ