acid(1)
UNIXにはシステムコールをトレースするコマンドとして,straceやktrace,trussが提供されていて,プログラムの挙動を調査するのに便利なのだが,Plan9にはそれらしきコマンドがない.trace(1)というコマンドがあるけど,別物だ.
そこで使うのがacid(1)である.このacid,実はデバッガであるが,ライブラリ(gdbのマクロのようなスクリプトである)をロードすることで,いろいろな機能を提供できるのだ.
さっそく,実行してみよう."-l truss"でtrussというライブラリをロードしている.
cpu% acid -l truss /bin/ls /bin/ls:386 plan 9 executable /sys/lib/acid/port /sys/lib/acid/truss /sys/lib/acid/386 acid:
"acid:" というプロンプトが表示されたら,new()で初期化し,truss()でtrussを実行する.
acid: new() acid: truss() open("#c/pid", 0) return value: 3 pread(3, 0x7fffeed0, 20, -1) return value: 12 data: " 33878 " close(3) return value: 0 brk_(0x000119d0) return value: 0 stat(".", 0x00010a14, 115) return value: 73 open(".", 0) return value: 3 brk_(0x00021a78) return value: 0 pread(3, 0x000109d8, 65595, -1) return value: 351 data: 0x000109d8, 351 pread(3, 0x00010b37, 65595, -1) return value: 0 data: "" brk_(0x00022aa0) return value: 0 close(3) return value: 0 pwrite(1, "bin lib proc src tmp ", 21, -1) bin lib proc src tmp return value: 21 open("#c/pid", 0) return value: 3 pread(3, 0x7fffef0c, 20, -1) return value: 12 data: " 33878 " close(3) return value: 0 33878: breakpoint _exits+0x5 INTB $0x40 acid:
openの引数になっている,"#c/pid"はどんな意味なんだろう?