ktrace
ktrace (kernel trace)とは、FreeBSD で、特定のプロセスのカーネルトレースロギングを有効にするユーティリティです。カーネルトレースデータは、 ktrace.out ファイルに記録されます。トレースされるカーネルオペレーションには、システムコール 、 namei 変換、シグナル処理、 I/O を含まれます。
読み方
- ktrace
- けーとれーす
目次
概要
ktrace とは、FreeBSD で、特定のプロセスのカーネルトレースロギングを有効にするユーティリティです。カーネルとレースデータは、 ktrace.out ファイルに記録されます。トレースされるカーネルオペレーションには、システムコール 、 namei 変換、シグナル処理、 I/O を含まれます。
一度、プロセスのトレースが有効になると、プロセスが終了するか、トレースポイントがクリアされるまで、トレースデータは、記録され続けます。
ktrace.out は、ヒューマンリーダブルではありません。 ktrace.out に記録された結果をデコードして表示するには、 kdump コマンドを利用します。
ktrace を利用するためには、カーネル の KTRACE オプションが有効になっている必要があります。
インストール
FreeBSD にデフォルトで、インストールされています。
設定
ktrace を利用するためには、カーネル で KTRACE オプションが有効になっている必要があります。
% fgrep KTRACE /sys/i386/conf/GENERIC options KTRACE # ktrace(1) support
sysctl で KTRACE オプションを確認できます。
% sysctl -a | fgrep -i ktrace kern.ktrace.request_pool: 100 kern.ktrace.genio_size: 4096 kern.features.ktrace: 1 options KTRACE
使い方
コマンドラインオプション
usage: ktrace [-aCcdi] [-f trfile] [-g pgrp | -p pid] [-t trstr] ktrace [-adi] [-f trfile] [-t trstr] command
コマンドを指定してトレースする
a.out というプログラムを実行し、トレースします。
% ktrace a.out % kdump
プロセスIDを指定してトレースする
プロセスID が 1234 という前提です。
% ktrace -p 1234 % ktrace -cp 1234 % kdump
ktraceのトレースをやめる
プロセス ID を指定して、トレースをやめるには、-c -p オプションを使います。
% ktrace -cp 1234
ktrace コマンドを実行するユーザのすべてのトレースをクリアします。
% ktrace -C
root ユーザが、 -C オプションをつかって、コマンドを実行すると、システムのすべてのプロセスのトレースをオフにします。
% sudo ktrace -C
その他の使用例
プロセスグループ ID 15 のすべてのプロセスのトレースをします。これから生成される子プロセスすべてもトレースフラグが渡されます。
ktrace -idg 15
プロセス ID 3 のプロセスとすべての子プロセスのシグナルに関するトレースを取り消します。
ktrace -t s -cdp 3
プロセス ID 4 のプロセスの I/O のトレースを有効にします。
ktrace -ti -p 4
コマンド w の システムコール のみのトレースを行います。
ktrace -tc w
ktrace.out 以外のファイル (ktrace_whoami.out) にトレースの結果を記録します。
ktrace -f ktrace_whoami.out whoami
簡単なトレースの実行例
main.c の内容
このプログラムを ktrace でトレースしてみます。
#include <stdio.h> int main(int argc, char const* argv[]) { (void) printf ("Hello World\n"); return 0; }
main.c のプログラムのトレース
% ls main.c % gcc main.c % ktrace a.out Hello World % ls a.out* ktrace.out main.c % kdump
ktrace の kdump の結果は、 kdump ktrace.out a.out に掲載します。
kdump の抜粋を以下に示します。
% kdump 省略 3899 a.out CALL ioctl(0x1,TIOCGETA,0xbfbfe5f0) 3899 a.out RET ioctl 0 3899 a.out CALL write(0x1,0x28405000,0xc) 3899 a.out GIO fd 1 wrote 12 bytes "Hello World " 3899 a.out RET write 12/0xc 省略
ktrace.out
ktrace.out のファイルタイプを調べてみたら、 X11 SNF フォントデータと出ました。
% /usr/bin/file -v file-5.11 magic file from /usr/share/misc/magic % /usr/bin/file ktrace.out ktrace.out: X11 SNF font data, LSB first
関連項目
ツイート