/* syscalls.d -- Record open() system calls on a system */ syscall::open:entry { printf("%-16s %-16s\n",execname,copyinstr(arg0)); }
この例では、printf()
ファンクションを使用して、open()
を呼び出す実行可能ファイルの名前と、オープンしようとしているファイルのパス名を表示しています。
copyinstr()
ファンクションでは、open()
コールの最初の引数(arg0
)を文字列に変換します。 プローブがユーザー・プロセスのアドレス空間にあるデータへのポインタにアクセスするときは、copyin()
、copyinstr()
またはcopyinto()
関数のいずれかを使用して、データをユーザー・スペースからカーネル・スペースのDTraceバッファにコピーする必要があります。 この例では、文字配列を参照するポインタとしてcopyinstr()
,の使用が適切です。 文字列がNullで終了しない場合文字列の長さをcopyinstr()
に指定する必要もあります。たとえば、write()
などのシステム・コールの場合は、copyinstr(arg1, arg2)
です。 「Oracle® Linux: DTraceガイド」の「ユーザー・プロセスのトレース」を参照してください。
proc
プロバイダ・プローブを有効にするsdt
カーネル・モジュールは、テスト・システムにすでにロードされている可能性が高いです。 または、システムのブート後にDTraceモジュールを手動でロードしなかった場合は、sdt
カーネル・モジュールが自動的にロードされます。 詳細は、1.4.2項、「DTraceモジュールの手動ロード」を参照してください。
次の例では、sdt
カーネル・モジュールを手動でロードするか、適切な機能を使用するために自動的にロードできる必要があります:
#dtrace -q -s syscalls.d
udisks-daemon /dev/sr0 devkit-power-da /sys/devices/LNXSYSTM:00/.../PNP0C0A:00/power_supply/BAT0/present devkit-power-da /sys/devices/LNXSYSTM:00/.../PNP0C0A:00/power_supply/BAT0/energy_now devkit-power-da /sys/devices/LNXSYSTM:00/.../PNP0C0A:00/power_supply/BAT0/voltage_max_design devkit-power-da /sys/devices/LNXSYSTM:00/.../PNP0C0A:00/power_supply/BAT0/voltage_min_design devkit-power-da /sys/devices/LNXSYSTM:00/.../PNP0C0A:00/power_supply/BAT0/status devkit-power-da /sys/devices/LNXSYSTM:00/.../PNP0C0A:00/power_supply/BAT0/current_now devkit-power-da /sys/devices/LNXSYSTM:00/.../PNP0C0A:00/power_supply/BAT0/voltage_now VBoxService /var/run/utmp firefox /home/guest/.mozilla/firefox/qeaojiol.default/sessionstore.js firefox /home/guest/.mozilla/firefox/qeaojiol.default/sessionstore-1.js firefox /home/guest/.mozilla/firefox/qeaojiol.default/sessionstore-1.js^C