| 原作者 | ポール・クラネンバーグ |
|---|---|
| 開発者 | ドミトリー・レビン |
| 安定リリース | 6.11 [1]
/ 2024年9月15日 |
| リポジトリ |
|
| 書かれた | C [2] |
| オペレーティング·システム | リナックス |
| プラットフォーム | AArch64、DEC Alpha、ARC、ARM EABI/OABI、AVR32、Blackfin、C-SKY、HP PA-RISC、IA-32、IA-64、LoongArch、Motorola 68k、Imagination META、MicroBlaze、MIPS、Nios II、OpenRISC、Power ISA 32/64 ビット、RISC-V、System/390 / z/Architecture、SuperH 32/64 ビット、SPARC 32/64 ビット、TILE、TILEPro、TILE-Gx、x86-64、x32 ABI、Xtensa |
| 利用可能 | 英語[注1] |
| タイプ | デバッグ |
| ライセンス | LGPL v2.1+ [注 2] [4] |
| Webサイト | strace.io |
strace は、 Linux用の診断、デバッグ、および教育用のユーザー空間ユーティリティです。これは、システムコール、シグナル配信、プロセス状態の変更など、プロセスとLinux カーネル間のやり取りを監視および変更するために使用されます。strace の操作は、 ptraceと呼ばれるカーネル機能によって可能になります。
一部のUnix 系システムでは、 trussなど、 strace に似た他の診断ツールが提供されています。
歴史
著作権表示によると、Straceはもともと1991年にPaul KranenburgによってSunOS用に作成され、1992年初頭にcomp.sources.sunの第3巻で公開されました。最初のREADMEファイルには次の内容が含まれていました。[5]
strace(1) は、 Sun が提供するプログラムtrace(1)によく似た、Sun(tm) システム用のシステム コール トレーサーです。strace (1) は、ソースが入手できないプログラムを分類してデバッグするのに便利なユーティリティですが、残念ながら Sun が提供するシステム ソフトウェアのほとんどすべてが含まれています。
その後、ブランコ・ランケスターがこのバージョンをLinuxに移植し、1992年11月に自身のバージョンをリリースし、1993年には2番目のリリースをリリースした。 [6] [7] リチャード・スラッドキーは1993年にこれらの別々のstraceバージョンを統合し、1994年にプログラムをSVR4とSolarisに移植し、[8] 1994年半ばにcomp.sources.miscでstrace 3.0が発表された。[9]
1996 年から、strace は Wichert Akkerman によって保守されていました。彼の在任期間中、strace の開発はCVSに移行し、FreeBSDおよび Linux 上の多くのアーキテクチャ (ARM、IA-64、MIPS、PA-RISC、PowerPC、s390、SPARC を含む) への移植が導入されました。2002 年に、strace の保守の重責は Roland McGrath に移譲されました。それ以降、strace はいくつかの新しい Linux アーキテクチャ (AMD64、s390x、SuperH) のサポートを獲得し、それらのいくつかに対してバイアーキテクチャ サポートを獲得し、Linux 上のシステムコール デコーダーに多数の追加と改善が行われました。その期間中、strace の開発はgitに移行しました。2009 年以降、strace は Dmitry Levin によって積極的に保守されています。それ以来、strace は AArch64、ARC、AVR32、Blackfin、Meta、Nios II、OpenSISC 1000、RISC-V、Tile/TileGx、Xtensa アーキテクチャのサポートを獲得しました。
Linux以外のオペレーティングシステム用の(明らかに廃止された) [10]コードがいくつか含まれていたstraceの最後のバージョンは、2011年3月にリリースされた4.6でした。[11] 2012年5月にリリースされたstraceバージョン4.7では、[12] Linux以外のコードはすべて削除されました。[13] strace 4.13以降、[14]プロジェクトはLinuxカーネルのリリーススケジュールに従っており、バージョン5.0以降、[15] Linuxのバージョン管理スキームにも従っています。
2012年にはstraceはパストレースとファイル記述子パスのデコードもサポートするようになりました。[16] 2014年8月にはstrace 4.9がリリースされ、[17] [18]スタックトレースの印刷のサポートが追加されました。2016年12月には、[19] [20] syscallフォールトインジェクション機能が実装されました。
バージョン履歴
使い方と機能
最も一般的な使用法は、プログラムによって行われたシステム コールのリストを印刷する strace を使用してプログラムを起動することです。これは、プログラムが継続的にクラッシュしたり、期待どおりに動作しない場合に役立ちます。たとえば、strace を使用すると、プログラムが存在しないファイルや読み取れないファイルにアクセスしようとしていることが明らかになる場合があります。
別の用途として-pは、フラグを使用して実行中のプロセスにアタッチする方法があります。これは、プロセスが応答を停止し、たとえば、ネットワーク接続を試行中にプロセスがブロックしていることを明らかにする場合に便利です。
strace では、他の機能の中でも、次のことが可能です。
- トレースする syscall 名のフィルターを指定します (オプションを使用): clone、fork、vfork
-e trace=などの名前で指定、 %ipcや%file などの定義済みグループの 1 つを使用する、または (strace 4.17 以降) などの正規表現構文を使用する。-e trace=/clock_.* - トレースするパスのリストを指定します (
-P /etc/ld.so.cache例: )。 - I/O をダンプするファイル記述子のリストを指定します (
-e read=および-e write=オプション)。 - システムコールの実行時間とカウントをカウントします (
-T、、、およびオプション。 オプションにより-c、最小および最大のシステムコール実行時間などの追加情報を出力できます)。-C-w-U - 相対または絶対タイムスタンプを印刷します (
-tおよび-rオプション)。 - 実行中のシステムコールの改ざん (オプション): 指定されたシステムコールの戻り値 ( ; strace 4.16 以降) とエラー コード ( ; strace 4.15 以降) を変更し、シグナル ( ; strace 4.16 以降)、遅延 (および; strace 4.22 以降) を挿入し、システムコールの引数によって指定されたデータ (および; strace 5.11 以降) を実行時に変更します。
-e inject=syscall specification:tampering specification:retval=:error=:signal=:delay_enter=:delay_exit=:poke_enter=:poke_exit= - ファイル記述子に関する情報を抽出します (ソケットを含む、
-yオプション。-yyオプションは、ソケットのエンドポイント アドレス、ファイルのパス、デバイスのメジャー/マイナー番号などの追加情報を提供します)。 - スタック トレースを出力します (strace 4.21 以降) シンボルのデマングル (
-kオプション) も含まれます。 - システムコールの戻りステータスによるフィルタリング(
-e status=オプション; strace 5.2 以降[注 3])。 - トレース内に表示されるスレッド、プロセス、プロセス グループ、およびセッション ID を strace のPID 名前空間に変換します(
--pidns-translationオプション、strace 5.9 以降)。 - プロセス、ファイル、記述子に関連付けられたSELinuxコンテキスト情報をデコードします(
--secontextオプション; strace 5.12 以降)。
strace は、 BTRFS_*、V4L2_*、DM_*、NSFS_*、MEM*、EVIO*、KVM_*などのioctlコマンドのいくつかのクラスの引数のデコードをサポートしています。また、さまざまなnetlinkプロトコルのデコードもサポートしています。
strace はシステムコールの詳細のみを表示するため、 GNU デバッガー(gdb)などのコードデバッガーほど多くの問題を検出することができません。しかし、コードデバッガーよりも使いやすく、システム管理者にとって非常に便利なツールです。研究者は、後でシステムコールを再生するためにシステムコールトレースを生成するためにも使用します。[66] [67] [68]
例
以下はコマンドの典型的な出力の例ですstrace。
user@server:~$ strace ls
...
open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3
fstat64(3, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
fcntl64(3, F_GETFD) = 0x1 (flags FD_CLOEXEC)
getdents64(3, /* 18 エントリ */, 4096) = 496
getdents64(3, /* 0 エントリ */, 4096) = 0
close(3) = 0
fstat64(1, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS、-1、0) = 0xb7f2c000
write(1、"autofs\nbackups\ncache\nflexlm\ngames"...、86autofsA
上記のフラグメントは、' ls ' コマンドで実行された strace の出力のほんの一部です。現在の作業ディレクトリが開かれ、検査され、その内容が取得されたことを示しています。結果として得られたファイル名のリストは標準出力に書き込まれます。
類似ツール
さまざまなオペレーティング システムには、類似またはより高度な機能を提供する類似または関連する計測ツールが備わっています。一部のツールは (同じまたは類似の名前を使用していても) まったく異なる動作メカニズムを使用するため、機能セットや結果が異なる場合があります。このようなツールには次のものがあります。
- Linuxにはライブラリやシステムコールをトレースできるltrace 、 X Window Systemプログラムをトレースできるxtrace、[69] SystemTap、perf、ftraceを拡張したtrace-cmdやKernelSharkがある。
- AIXはtrussコマンドを提供する
- HP-UXはTuscコマンドを提供する
- Solaris / IllumosにはトラスとDTraceがある
- UnixWareはtrussコマンドを提供する
- FreeBSDはtrussコマンド、ktrace、DTraceを提供している。
- NetBSDはktraceとDTraceを提供する
- OpenBSDはktraceとkdumpを使用する
- macOSではktrace(10.4以前)、DTrace(Solarisから)、および関連するdtruss(10.5以降)が提供されています。 [70]
- Microsoft Windowsには、 Pankaj Garg氏によって書かれたStraceNTと呼ばれる同様のユーティリティ[71]と、 Sysinternals氏によって開発されたProcess Monitorと呼ばれる同様のGUIベースのユーティリティがあります。
参照
注記
- ^ ただし、システムエラーメッセージのデコードは、strace 4.22 以降、現在のロケールに従って実行されます。[3]
- ^ テスト スイートはGPL v2.0+ライセンスの下でライセンスされています。
- ^ 成功した呼び出しのみを表示するための省略形である
-zoption は、もともと strace 4.5 で追加されましたが、正しく動作しなかったため文書化されていませんでした。
参考文献
- ^ “リリース 6.11”. 2024年9月15日. 2024年9月26日閲覧。
- ^ 「Open Hub の strace オープンソース プロジェクト」。Openhub.net。2021年 11 月 23 日閲覧。
- ^ Dmitry V. Levin (2018-04-01). 「[PATCH] i18n サポートの追加」(メーリングリスト) . 2021-09-02に閲覧。
- ^ Dmitry V. Levin (2018-12-15). 「I: strace のライセンスをコピーレフト ライセンスに変更する」(メーリング リスト) 。2021年 9 月 2 日閲覧。
- ^ Paul Kranenburg (1992 年 3 月 2 日)。「Strace - 代替システムコール トレーサー」。ニュースグループ: comp.sources.sun。
- ^ Branko Lankester (1992 年 11 月 5 日)。「strace の最初の Linux リリース」。
- ^ ブランコ・ランケスター (1993年6月18日)。 「strace の 2 番目の Linux リリース」。
- ^ 「ストラス」。有人.org。 1994 年 6 月 21 日。
- ^ 「SUNET の Index of /pub/usenet/ftp.uu.net/comp.sources.misc/volume43/strace」。2007年9月11日時点のオリジナルよりアーカイブ。 2015年1月14日閲覧。
- ^ Denys Vlasenko (2012 年 2 月 7 日)。「Linux 以外のコードを削除するのはどうでしょうか?」
- ^ Dmitry V. Levin (2011 年 3 月 16 日). 「strace 4.6 がリリースされました」.
- ^ Dmitry V. Levin (2012 年 5 月 2 日). 「strace 4.7 がリリースされました」.
- ^ Dmitry V. Levin (2012 年 4 月 20 日)。「リリース 4.7 の注目すべき変更点」
- ^ Dmitry V. Levin (2016 年 10 月 4 日). 「strace 4.14 がリリースされました」.
- ^ Dmitry V. Levin (2019年3月19日). 「strace 5.0 リリース」.
- ^ Dmitry V. Levin (2012 年 5 月 1 日)。「リリース 4.7 の注目すべき変更点」。GitHub。
- ^ Dmitry V. Levin (2014 年 8 月 15 日). 「strace 4.9 がリリースされました」.
- ^ Dmitry V. Levin (2014 年 8 月 15 日)。「リリース 4.9 の注目すべき変更点」。GitHub。
- ^ Dmitry V. Levin (2016 年 12 月 14 日). 「strace 4.15 がリリースされました」.
- ^ Dmitry V. Levin (2016 年 12 月 14 日)。「リリース 4.15 の注目すべき変更点」。GitHub。
- ^ Dmitry V. Levin (2023-02-26). 「strace 6.2 リリース」
- ^ Dmitry V. Levin (2022-12-12). 「strace 6.1 リリース」
- ^ Dmitry V. Levin (2022-10-29). 「strace 6.0 リリース」
- ^ Dmitry V. Levin (2022-08-12). 「strace 5.19 がリリースされました」。
- ^ Dmitry V. Levin (2022-06-18). 「strace 5.18 がリリースされました」。
- ^ Dmitry V. Levin (2022-03-27). 「strace 5.17 がリリースされました」。
- ^ Dmitry V. Levin (2022-01-10). 「strace 5.16 リリース」
- ^ Dmitry V. Levin (2021-12-01). 「strace 5.15 がリリースされました」。
- ^ Dmitry V. Levin (2021-09-02). 「strace 5.14 がリリースされました」。
- ^ Dmitry V. Levin (2021-07-18). 「strace 5.13 がリリースされました」。
- ^ Dmitry V. Levin (2021-04-26). 「strace 5.12 がリリースされました」。
- ^ Dmitry V. Levin (2021-02-17). 「strace 5.11 がリリースされました」。
- ^ Dmitry V. Levin (2020-12-14). 「strace 5.10 リリース」
- ^ Dmitry V. Levin (2020-09-24). 「strace 5.9 がリリースされました」。
- ^ Dmitry V. Levin (2020-08-06). 「strace 5.8 がリリースされました」。
- ^ Dmitry V. Levin (2020-06-01). 「strace 5.7 がリリースされました」。
- ^ Dmitry V. Levin (2020-04-07). 「strace 5.6 リリース」
- ^ Dmitry V. Levin (2020-02-06). 「strace 5.5 がリリースされました」。
- ^ Dmitry V. Levin (2019-11-28). 「strace 5.4 がリリースされました」。
- ^ Dmitry V. Levin (2019-09-25). 「strace 5.3 リリース」
- ^ Dmitry V. Levin (2019-07-12). 「strace 5.2 がリリースされました」。
- ^ Dmitry V. Levin (2019-05-22). 「strace 5.1 リリース」
- ^ Dmitry V. Levin (2019-03-19). 「strace 5.0 がリリースされました」。
- ^ Dmitry V. Levin (2018-12-26). 「strace 4.26 リリース」
- ^ Dmitry V. Levin (2018-10-30). 「strace 4.25 リリース」
- ^ Dmitry V. Levin (2018-08-14). 「strace 4.24 リリース」
- ^ Dmitry V. Levin (2018-06-14). 「strace 4.23 リリース」
- ^ Dmitry V. Levin (2018-04-05). 「strace 4.22 がリリースされました」。
- ^ Dmitry V. Levin (2018-02-13). 「strace 4.21 リリース」
- ^ Dmitry V. Levin (2017-11-13). 「strace 4.20 リリース」
- ^ Dmitry V. Levin (2017-09-05). 「strace 4.19 がリリースされました」。
- ^ Dmitry V. Levin (2017-07-05). 「strace 4.18 がリリースされました」。
- ^ Dmitry V. Levin (2017-05-24). 「strace 4.17 がリリースされました」。
- ^ Dmitry V. Levin (2017-02-14). 「strace 4.16 リリース」
- ^ Dmitry V. Levin (2016-12-14). 「strace 4.15 がリリースされました」。
- ^ Dmitry V. Levin (2016-10-04). 「strace 4.14 がリリースされました」。
- ^ Dmitry V. Levin (2016-07-26). 「strace 4.13 がリリースされました」。
- ^ Dmitry V. Levin (2016-05-31). 「strace 4.12 がリリースされました」。
- ^ Dmitry V. Levin (2015-12-21). 「strace 4.11 リリース」
- ^ Dmitry V. Levin (2015-03-06). 「strace 4.10 がリリースされました」。
- ^ Dmitry V. Levin (2014-08-15). 「strace 4.9 がリリースされました」。
- ^ Dmitry V. Levin (2013-06-03). 「strace 4.8 がリリースされました」。
- ^ Dmitry V. Levin (2012-05-02). 「strace 4.7 がリリースされました」。
- ^ Dmitry V. Levin (2011-03-15). 「strace 4.6 リリース」
- ^ Rick Sladkey (1994-07-09). 「v43i075: strace - sunos、linux、svr4、solaris2 用のシステム コール トレーサー、パート 01/10」。
- ^ Horky, Jiri (2013). 「ioapps IO プロファイラーと IO トレース リプレイヤー」 。2013年 9 月 16 日閲覧。
- ^ Waterland, Amos (2007). 「sreplay システムコールリプレイヤー」 . 2013 年 9 月 16 日閲覧。
- ^ Burton, Ariel (1998). 「軽量システムコールのトレースと再実行を使用したワークロードの特性評価」(PDF) 。 2013 年 9 月 16 日閲覧。
- ^ 「XTrace - X プロトコル接続をトレースする」xtrace.alioth.debian.org。 2014 年 8 月 5 日にオリジナルからアーカイブ。2014 年 8 月 12 日に取得。
- ^ 「dtrace(1) Mac OS X マニュアルページ」。Developer.apple.com 。 2014年7月23日閲覧。
- ^ 「IntellectualHeaven - Strace For Windows」。intelligentheaven.com 。 2016年3月5日時点のオリジナルよりアーカイブ。 2015年1月29日閲覧。
外部リンク
- strace プロジェクト ページ
- マニュアルページ
- strace の OS レビュー記事
- 「strace によるシステム コール トレース」は、 NDC TechTown 2018 でMichael Kerriskが行った、strace の機能と使用法の概要に関する講演です。
- 「Modern strace」(出典)は、 DevConf.cz 2019で Dmitry Levin が行った、strace 機能の概要に関する講演です。
