「ktrace」の版間の差分

提供: FreeBSD入門
移動: 案内検索
 
行1: 行1:
<!-- vim: fileencoding=utf-8 filetype=mediawiki
+
[[ktrace]] (kernel trace)とは、[[FreeBSD]] で、特定のプロセスのカーネルトレースロギングを有効にするユーティリティです。カーネルトレースデータは、 [[ktrace.out]] ファイルに記録されます。トレースされるカーネルオペレーションには、[[システムコール]] 、 namei 変換、シグナル処理、 I/O を含まれます。
-->
+
 
+
[[{{PAGENAME}}]] (kernel trace)とは、[[FreeBSD]] で、特定のプロセスのカーネルトレースロギングを有効にするユーティリティです。カーネルトレースデータは、 [[ktrace.out]] ファイルに記録されます。トレースされるカーネルオペレーションには、[[システムコール]] 、 namei 変換、シグナル処理、 I/O を含まれます。
+
  
  
 
'''読み方'''
 
'''読み方'''
 
+
;[[ktrace]]: けーとれーす
;[[{{PAGENAME}}]]: けーとれーす
+
  
 
__TOC__
 
__TOC__
  
 
== 概要 ==
 
== 概要 ==
 
+
[[ktrace]] とは、[[FreeBSD]] で、特定のプロセスのカーネルトレースロギングを有効にするユーティリティです。カーネルとレースデータは、 [[ktrace.out]] ファイルに記録されます。トレースされるカーネルオペレーションには、[[システムコール]] 、 namei 変換、シグナル処理、 I/O を含まれます。
[[{{PAGENAME}}]] とは、[[FreeBSD]] で、特定のプロセスのカーネルトレースロギングを有効にするユーティリティです。カーネルとレースデータは、 [[ktrace.out]] ファイルに記録されます。トレースされるカーネルオペレーションには、[[システムコール]] 、 namei 変換、シグナル処理、 I/O を含まれます。
+
  
 
一度、プロセスのトレースが有効になると、プロセスが終了するか、トレースポイントがクリアされるまで、トレースデータは、記録され続けます。
 
一度、プロセスのトレースが有効になると、プロセスが終了するか、トレースポイントがクリアされるまで、トレースデータは、記録され続けます。
行23: 行18:
  
 
== インストール ==
 
== インストール ==
 
 
[[FreeBSD]] にデフォルトで、インストールされています。
 
[[FreeBSD]] にデフォルトで、インストールされています。
 
 
== 設定 ==
 
== 設定 ==
 
 
[[ktrace]] を利用するためには、[[カーネル]] で KTRACE オプションが有効になっている必要があります。
 
[[ktrace]] を利用するためには、[[カーネル]] で KTRACE オプションが有効になっている必要があります。
  
行35: 行27:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
[[sysctl]] で KTRACE オプションを確認できます。
+
sysctl で KTRACE オプションを確認できます。
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
% sysctl -a | fgrep -i ktrace
 
% sysctl -a | fgrep -i ktrace
行43: 行35:
 
options KTRACE
 
options KTRACE
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
== 使い方 ==
 
== 使い方 ==
 
 
=== コマンドラインオプション ===
 
=== コマンドラインオプション ===
 
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
usage: ktrace [-aCcdi] [-f trfile] [-g pgrp | -p pid] [-t trstr]
 
usage: ktrace [-aCcdi] [-f trfile] [-g pgrp | -p pid] [-t trstr]
 
       ktrace [-adi] [-f trfile] [-t trstr] command
 
       ktrace [-adi] [-f trfile] [-t trstr] command
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
=== コマンドを指定してトレースする ===
 
=== コマンドを指定してトレースする ===
 
 
a.out というプログラムを実行し、トレースします。
 
a.out というプログラムを実行し、トレースします。
 
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
% ktrace a.out
 
% ktrace a.out
行73: 行59:
 
% kdump
 
% kdump
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
=== ktraceのトレースをやめる ===
 
=== ktraceのトレースをやめる ===
 
 
プロセス ID を指定して、トレースをやめるには、-c -p オプションを使います。
 
プロセス ID を指定して、トレースをやめるには、-c -p オプションを使います。
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
行90: 行74:
 
% sudo ktrace -C
 
% sudo ktrace -C
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
=== その他の使用例 ===
 
=== その他の使用例 ===
 
+
プロセスグループ ID 15 のすべてのプロセスのトレースをします。これから生成される子プロセスすべてもトレースフラグが渡されます。
プロセスグループ ID 15 のすべてのプロセスのトレースをします。これから生成される[[子プロセス]]すべてもトレースフラグが渡されます。
+
  
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
ktrace -idg 15
 
ktrace -idg 15
 
</syntaxhighlight>
 
</syntaxhighlight>
 
  
 
プロセス ID 3 のプロセスとすべての子プロセスのシグナルに関するトレースを取り消します。
 
プロセス ID 3 のプロセスとすべての子プロセスのシグナルに関するトレースを取り消します。
 
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
ktrace -t s -cdp 3
 
ktrace -t s -cdp 3
 
</syntaxhighlight>
 
</syntaxhighlight>
 
  
 
プロセス ID 4 のプロセスの I/O のトレースを有効にします。
 
プロセス ID 4 のプロセスの I/O のトレースを有効にします。
 
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
ktrace -ti -p 4
 
ktrace -ti -p 4
 
</syntaxhighlight>
 
</syntaxhighlight>
  
コマンド [[w]] の [[システムコール]] のみのトレースを行います。
+
コマンド w の [[システムコール]] のみのトレースを行います。
 
+
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
ktrace -tc w
 
ktrace -tc w
行125: 行102:
 
ktrace -f ktrace_whoami.out whoami
 
ktrace -f ktrace_whoami.out whoami
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
=== 簡単なトレースの実行例 ===
 
=== 簡単なトレースの実行例 ===
 
 
==== main.c の内容 ====
 
==== main.c の内容 ====
 
 
このプログラムを [[ktrace]] でトレースしてみます。
 
このプログラムを [[ktrace]] でトレースしてみます。
 
 
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
 
#include <stdio.h>
 
#include <stdio.h>
行143: 行116:
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
==== main.c のプログラムのトレース ====
 
==== main.c のプログラムのトレース ====
 
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
% ls
 
% ls
行160: 行131:
  
 
[[kdump]] の抜粋を以下に示します。
 
[[kdump]] の抜粋を以下に示します。
 
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
% kdump
 
% kdump
行178: 行148:
  
 
RET や CALL などのオペレーションの意味は、 [[kdump]] を参照してください。
 
RET や CALL などのオペレーションの意味は、 [[kdump]] を参照してください。
 
 
=== ktrace.out ===
 
=== ktrace.out ===
 
 
[[ktrace.out]] のファイルタイプを調べてみたら、 X11 SNF フォントデータと出ました。
 
[[ktrace.out]] のファイルタイプを調べてみたら、 X11 SNF フォントデータと出ました。
  
行190: 行158:
 
ktrace.out: X11 SNF font data, LSB first
 
ktrace.out: X11 SNF font data, LSB first
 
</syntaxhighlight>
 
</syntaxhighlight>
 
 
== 関連項目 ==
 
== 関連項目 ==
 
 
* [[デバッグ]]
 
* [[デバッグ]]
 +
<!-- vim: fileencoding=utf-8 filetype=mediawiki
 +
-->

2015年9月27日 (日) 17:45時点における最新版

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

関連項目