新城@筑波大学情報です。こんにちは。

MacOSX 10.5 には、Sun Solaris 由来の dtrace が入っていますね。
日常的に使うのは、strace くらいがちょうど良くて、使い方がちょっ
と面倒なんだけれど。dtruss というユーザ・インタフェースも入っ
ていますが、rootでないと使えないとか、コマンドは絶対パスでな
いと失敗するとか、オプションがちょっと使いにくいとかで今一つ
のできです。truss -o なら、ファイルに保存できるのに、
dtruss -o なら別の意味になってしまって。

dtrace で、namei という項目があるのに気が付きました。
------------------------------------------------------------
# dtrace -l | egrep namei
12951        fbt       mach_kernel                             namei entry
12952        fbt       mach_kernel                             namei return
12953        fbt       mach_kernel                         nameidone entry
12954        fbt       mach_kernel                         nameidone return
13460        fbt       mach_kernel         nfsm_chain_get_path_namei entry
13461        fbt       mach_kernel         nfsm_chain_get_path_namei return
13531        fbt       mach_kernel                       nfsrv_namei entry
13532        fbt       mach_kernel                       nfsrv_namei return
# 
------------------------------------------------------------

namei を見ると、名前解決関連が全部網羅できそうで良さそうなの
ですが、今1つ使い方がわかりません。Sun のマニュアル「DTrace
ユーザーガイド」なども見てみたのですが、パッとしない説明が1
行ある程度でよくわかりません。

dtrace で namei() を調べる方法について、うまく行った人はいま
せんか。

open() とか stat() くらないならこんな感じでできます。
------------------------------------------------------------
# dtrace -n 'syscall::open:entry, syscall::stat:entry, syscall::stat64:entry { printf("%s",stringof(copyinstr(arg0))); }' -o /tmp/cat.dtrace -c "/bin/cat /etc/passwd"
...
# cat /tmp/cat.dtrace 
CPU     ID                    FUNCTION:NAME
  1  17720                       open:entry /etc/passwd

# 
------------------------------------------------------------

システムコールをいちいちリストアップすると、疲れるので、
namei() だけにしたいというわけです。

\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報       \\