ftrace
http://dsas.blog.klab.org/archives/51025093.html
http://lab.klab.org/wiki/Software#ftrace
こちらで作られたftraceが気になったので使ってみました.
ftrace-0.93.tar.gzをopenSuSE 11.0で動かします.
$ yast --install libelf-devel $ yast --install libdwarf-devel
2つのパッケージをインストールして,./configure
事後なのでエラーメッセージが残っていなくて,残念ですが,
Please install libdwarf.a first!
とか,そんな感じのエラーが出てconfigureが途中で終了しました.
/usr/include/libdwarf/libdwarf.h /usr/lib/libdwarf.so
現在はこの2つが存在しています.
David A's DWARF Page
からlibdwarf-20080818.tar.gzを頂いて,コンパイル.
型キャストの警告が出ていましたが,とりあえず使ってみたいので無視.
コンパイルが終わるとlibdwarf.aがカレントディレクトリに作られています.
これをcpで/usr/lib/libdwarf.aとしました.
また,libdwarf.hもありますが,diffで確認してみたところ,
# コーディングスタイルの変更が主なような気もしますが
/usr/include/libdwarf/libdwarf.hと内容が違う感じがするので,
とりあえず,yastで作られた方はリネームして残しておき,
tarballの方のヘッダファイルを優先することにしました.
こうして,ftraceのconfigureが通りました.
実際使ってみました.
}$ ftrace ./ftrace-test -t 02:49:04.768236 [28070] main(134516992, unknown, ...) 02:49:04.769539 [28070] workthread(unknown, ...) 02:49:04.769600 [28070] tf1() 02:49:04.769637 [28070] tf2() 02:49:04.769676 [28070] pthread_exit() : retval=(nil) 02:49:04.769410 [28070] pthread_create(): result=0 TID=3084528528 02:49:04.770279 [28070] arg_int1(10) 02:49:04.770324 [28070] arg_int2(10, 11) 02:49:04.770364 [28070] arg_int3(10, 11, 12) 02:49:04.770405 [28070] arg_uint1(10) 02:49:04.770439 [28070] arg_uint2(10, 11) 02:49:04.770476 [28070] arg_uint3(10, 11, 12) 02:49:04.770515 [28070] arg_char1(unknown, ...) 02:49:04.770548 [28070] arg_char2(unknown, ...) 02:49:04.770581 [28070] arg_char3(unknown, ...) 02:49:04.770613 [28070] arg_short1(30) 02:49:04.770646 [28070] arg_short2(30, 31) .....
ftrace-0.90ではタブが使われていて,関数のレベルが見やすかったのですが,
ftrace-0.90とは出力が異なるのですね.
一つ上の関数から呼ばれた,と見ればいいのかしら.
自分が作っているロボットのプログラムにftraceをかけてみました.
02:58:57.815313 [28242] UNKNOWN<0x804bd50>() 02:58:57.883064 [28242] UNKNOWN<0x804cd70>() 02:58:57.885480 [28242] loadImagefromShmInit(unknown, ...) 02:58:57.886886 [28242] loadImagefromShm(unknown, ...) 02:58:57.888897 [28242] UNKNOWN<0x804c3b0>() 02:58:57.891632 [28242] UNKNOWN<0x804c3b0>() 02:58:58.444430 [28242] loadImagefromShm(unknown, ...) 02:58:58.446585 [28242] get_angles_from_gyro(unknown, ...) 02:58:58.446752 [28242] _test_m3dmg_read_angles(unknown, ...) 02:58:58.446839 [28242] UNKNOWN<0x804c610>() 02:58:58.446922 [28242] UNKNOWN<0x804c610>() 02:58:58.447002 [28242] UNKNOWN<0x804cdf0>() 02:58:58.447082 [28242] UNKNOWN<0x804cdf0>() 02:58:58.447162 [28242] UNKNOWN<0x804cdf0>() 02:58:58.447613 [28242] UNKNOWN<0x804cdf0>() 02:58:58.447695 [28242] UNKNOWN<0x804c610>() 02:58:58.447824 [28242] UNKNOWN<0x804c610>() 02:58:58.457444 [28242] UNKNOWN<0x804c5d0>() 02:58:58.458393 [28242] convertImage2Camera(unknown, ...) 02:58:58.458497 [28242] convertCamera2Robot(unknown, ...)
UNKNOWNばかり(´・ω・`...
引数はいいとして,関数名は知りたかったな.
それとも何か他に設定が必要なのかな.