ktrace

提供: FreeBSD入門
2013年5月25日 (土) 18:54時点におけるDaemon (トーク | 投稿記録)による版

移動: 案内検索
スポンサーリンク


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

kdump の出力の読み方は、 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

ktracekdump の結果は、 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
 
省略

RET や CALL などのオペレーションの意味は、 kdump を参照してください。

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

関連項目




スポンサーリンク