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"はどんな意味なんだろう?