Prev / Next / Hill Climber's ChangeLog

TLB エラー表示から、その発生場所を特定する方法[Tips][cygwin]

2006-03-02

組み込み系でTLB エラーが発生してプログラムが停止した時、
真っ先に確認するのはそれが発生したタスクとプログラムの(ソースコードの)
どの場所で発生したか、ということです。

タスクはタスクID を調べることでわかりますが、ソースコードはその時の
プログラムカウンタ(実行アドレス)を見ても static 関数の中だったりすると
特定できないこともあります。

そんな時には GNU utility のコマンドのうち、
objdumpnm というコマンドが使えます。


objdumpコマンド
obj ファイルからシンボル情報と実行アドレスを関連付けて確認することが
可能。

以下のコマンドを打つ。



$ cd <バイナリのある場所>
$ objdump -d -l XXXX.out | less

※ オプションについて。

cygwin の objdump --help の方に詳しく説明されている。


nm コマンド
via <http://ertl.jp/~takayuki/readings/gnutoolkit.html>

シンボル情報が得られる。
なんと、static 変数のアドレスもわかるので、map ファイルに出てこない
シンボルのアドレスも調べられます。


$ cd <バイナリのある場所>
$ nm -n -l -s --target=elf32-littlemips XXXX.out

こちらもオプションや出力情報の見方は cygwin の man nm が参考になる。

permlink