「ktrace」の版間の差分
(ページの作成:「<!-- vim: fileencoding=utf-8 filetype=mediawiki --> [[{{PAGENAME}}]] (kernel trace)とは、FreeBSD で、特定のプロセスのカーネルトレースロギン...」) |
|||
(同じ利用者による、間の1版が非表示) | |||
行1: | 行1: | ||
− | + | [[ktrace]] (kernel trace)とは、[[FreeBSD]] で、特定のプロセスのカーネルトレースロギングを有効にするユーティリティです。カーネルトレースデータは、 [[ktrace.out]] ファイルに記録されます。トレースされるカーネルオペレーションには、[[システムコール]] 、 namei 変換、シグナル処理、 I/O を含まれます。 | |
− | + | ||
− | + | ||
− | [[ | + | |
'''読み方''' | '''読み方''' | ||
− | + | ;[[ktrace]]: けーとれーす | |
− | ;[[ | + | |
__TOC__ | __TOC__ | ||
== 概要 == | == 概要 == | ||
− | + | [[ktrace]] とは、[[FreeBSD]] で、特定のプロセスのカーネルトレースロギングを有効にするユーティリティです。カーネルとレースデータは、 [[ktrace.out]] ファイルに記録されます。トレースされるカーネルオペレーションには、[[システムコール]] 、 namei 変換、シグナル処理、 I/O を含まれます。 | |
− | [[ | + | |
一度、プロセスのトレースが有効になると、プロセスが終了するか、トレースポイントがクリアされるまで、トレースデータは、記録され続けます。 | 一度、プロセスのトレースが有効になると、プロセスが終了するか、トレースポイントがクリアされるまで、トレースデータは、記録され続けます。 | ||
行23: | 行18: | ||
== インストール == | == インストール == | ||
− | |||
[[FreeBSD]] にデフォルトで、インストールされています。 | [[FreeBSD]] にデフォルトで、インストールされています。 | ||
− | |||
== 設定 == | == 設定 == | ||
− | |||
[[ktrace]] を利用するためには、[[カーネル]] で KTRACE オプションが有効になっている必要があります。 | [[ktrace]] を利用するためには、[[カーネル]] で KTRACE オプションが有効になっている必要があります。 | ||
行35: | 行27: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | 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 | ||
% kdump | % kdump | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | [[kdump]] の出力の読み方は、 [[kdump]] を参照してください。 | ||
=== プロセスIDを指定してトレースする === | === プロセスIDを指定してトレースする === | ||
行71: | 行59: | ||
% kdump | % kdump | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
=== ktraceのトレースをやめる === | === ktraceのトレースをやめる === | ||
− | |||
プロセス ID を指定して、トレースをやめるには、-c -p オプションを使います。 | プロセス ID を指定して、トレースをやめるには、-c -p オプションを使います。 | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
行88: | 行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 の [[システムコール]] のみのトレースを行います。 |
− | + | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
ktrace -tc w | ktrace -tc w | ||
行123: | 行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> | ||
行141: | 行116: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
==== main.c のプログラムのトレース ==== | ==== main.c のプログラムのトレース ==== | ||
− | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
% ls | % ls | ||
行158: | 行131: | ||
[[kdump]] の抜粋を以下に示します。 | [[kdump]] の抜粋を以下に示します。 | ||
− | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
% kdump | % kdump | ||
行175: | 行147: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | RET や CALL などのオペレーションの意味は、 [[kdump]] を参照してください。 | ||
=== ktrace.out === | === ktrace.out === | ||
− | |||
[[ktrace.out]] のファイルタイプを調べてみたら、 X11 SNF フォントデータと出ました。 | [[ktrace.out]] のファイルタイプを調べてみたら、 X11 SNF フォントデータと出ました。 | ||
行186: | 行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
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 省略
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