eu-addr2lineが便利

Rolandに使い方を教えてもらったのでメモ。eu-addr2lineは、実行バイナリのアドレスを指定すると、何のソースコードで何行目だったかなどの情報を返してくれる。

カーネル対象(オリジナルパッチとかデバッグしたいとき)

 $ eu-addr2line -k {addr}

・モジュール対象(オリジナルドライバとかデバッグしたいとき)

 $ eu-addr2line -e {module-path.ko} {addr}

もちろん、カーネルコンパイル時にCONFIG_DEBUGINFOをつけておかねばならない。

addrには、直接アドレスを指定するだけでなくて、セクション指定と関数指定ができる。例えば

 $ eu-addr2line -k vfs_read+0x13

なら、vfs_read関数から13バイトオフセットのところのコードがC言語で何行目かを教えてくれる。
セクションを指定したい時は、

 $ eu-addr2line -e hoge.ko "(.text)+0x11"

とすればいいらしい。

これでBUGメッセージの解析が楽に!