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ばかり(´・ω・`...
引数はいいとして,関数名は知りたかったな.


それとも何か他に設定が必要なのかな.