mcpField
S
strace-ltrace

strace-ltrace

github.com/mohitmishra786開発269667 回インストール18 週間前に更新
リポジトリ

strace-ltrace について

strace-ltrace は、プログラムの動作を調べるエージェント向けトレーススキルです。strace でシステムコールを、ltrace でライブラリ呼び出しを追跡し、OS とのやり取りの問題を診断します。

主な機能

  1. 01システムコールとライブラリ呼び出しの追跡
  2. 02ファイルやネットワークなどによる絞り込み
  3. 03一般的なエラーコードの解釈
  4. 04タイムスタンプと呼び出し時間の確認
  5. 05ファイル、ネットワーク、ロード障害の調査手順

活用シーン

  1. 01プログラムが開こうとするファイルの特定
  2. 02ネットワーク接続問題の調査
  3. 03ファイル不足や権限エラーの分析
  4. 04動的ライブラリのロードや seccomp 障害の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mohitmishra786/low-level-dev-skills --skill strace-ltrace

インストール後、Claude Code で/strace-ltraceを入力して読み込まれたか確認します。

同梱ファイルreferences/strace-patterns.md

詳細

strace / ltrace

目的

クラッシュやデバッガーを使わずに、誤ったバイナリの動作を診断する最も効果的なツールである strace でシステムコールを、ltrace でライブラリ呼び出しをトレースする方法をエージェントに案内します。

トリガー

  • 「プログラムの動作がおかしいのですが、何をしているかトレースするにはどうすればよいですか?」
  • 「バイナリがどのファイルを開いているか調べるにはどうすればよいですか?」
  • 「strace に ENOENT と表示されます。どう解釈すればよいですか?」
  • 「strace でネットワーク呼び出しをトレースするにはどうすればよいですか?」
  • 「ltrace とは何ですか?strace とはどう違いますか?」
  • 「実行中のプロセスをトレースするにはどうすればよいですか?」

ワークフロー

1. strace の基本的な使い方
# Trace all syscalls of a command
strace ./myapp arg1 arg2

# Attach to running process
strace -p 12345

# Trace child processes too (-f = follow fork)
strace -f ./myapp

# Save to file (raw output — not stdout)
strace ./myapp 2> trace.txt

# Most useful: timestamps + summary
strace -t -f ./myapp 2>&1 | head -100
2. システムコールのカテゴリで絞り込む
# Trace file operations only
strace -e trace=file ./myapp

# Trace network syscalls
strace -e trace=network ./myapp

# Trace specific syscalls
strace -e trace=open,openat,read,write ./myapp

# Trace process management
strace -e trace=process ./myapp

# Trace memory operations
strace -e trace=memory ./myapp

# Trace signals
strace -e trace=signal ./myapp

# Multiple categories
strace -e trace=file,network ./myapp
カテゴリ含まれるシステムコール
fileopen、openat、stat、access、unlink、rename、...
networksocket、connect、bind、accept、send、recv、...
processfork、exec、wait、clone、exit、...
memorymmap、munmap、mprotect、brk、...
signalkill、sigaction、sigprocmask、...
ipcpipe、socket pair、shmget、...
descclose、dup、poll、select、epoll、...
3. よくあるエラーの解釈
# See return values and errors
strace -e trace=file ./myapp 2>&1 | grep -E "ENOENT|EPERM|EACCES|ENOTSUP"
エラー意味よくある原因
ENOENTファイルまたはディレクトリがありません設定ファイルがない、パスが間違っている
EACCESアクセスが拒否されましたファイルのアクセス権、SELinux
EPERM操作が許可されていません必要なケイパビリティがない、suid が必要
EADDRINUSEアドレスはすでに使用中ですポートがすでにバインドされている
ETIMEDOUT接続がタイムアウトしましたネットワークに到達できない、ファイアウォール
ECONNREFUSED接続が拒否されましたサーバーがリッスンしていない
EAGAINリソースを一時的に利用できませんノンブロッキング I/O、再試行が必要
ENOMEMメモリが不足していますメモリ割り当てに失敗した
EBADFファイルディスクリプターが不正です閉じられた、または無効な fd を使用している
ENOEXEC実行形式エラーですアーキテクチャに対応しないバイナリ形式
# Find what file is not found
strace ./myapp 2>&1 | grep 'ENOENT'
# Example output:
# openat(AT_FDCWD, "/etc/myapp.conf", O_RDONLY) = -1 ENOENT (No such file or directory)
# → Config file expected at /etc/myapp.conf
4. 便利な strace フラグ
# Show strings fully (default truncates at 32 chars)
strace -s 256 ./myapp

# Timestamps
strace -t ./myapp     # wall clock time
strace -T ./myapp     # time spent in each syscall
strace -r ./myapp     # relative timestamps

# System call count summary
strace -c ./myapp
# Shows count, time, errors per syscall — great for profiling

# Trace with PIDs in output (for -f)
strace -f -p ./myapp
# Output: [pid 12346] open("/etc/passwd", O_RDONLY) = 3

# Decode numerical arguments
strace -e verbose=all ./myapp

# Print instruction pointer at each syscall
strace -i ./myapp
5. ltrace — ライブラリ呼び出しのトレース
# Trace all library calls
ltrace ./myapp

# Trace specific library function
ltrace -e malloc,free,fopen ./myapp

# Trace nested calls (lib → lib)
ltrace -n 2 ./myapp   # indent nested calls

# Trace with syscalls too
ltrace -S ./myapp

# Attach to running process
ltrace -p 12345

# Summary statistics
ltrace -c ./myapp

ltrace の一般的な出力:

malloc(1024) = 0x55a1b2c3d000
fopen("/etc/myapp.conf", "r") = 0
free(0x55a1b2c3d000) = <void>

strace と ltrace の比較:

straceltrace
トレース対象カーネルのシステムコールユーザー空間のライブラリ呼び出し
オーバーヘッド低い高い(PLT フック)
表示内容open()、read()、write()fopen()、malloc()、printf()
使用する場面バイナリが OS/ファイル/ネットワークとやり取りする場合バイナリが、確認できないライブラリ関数を呼び出す場合
6. 実践的な診断ワークフロー
# Find missing config file
strace -e trace=openat,open ./myapp 2>&1 | grep ENOENT

# Find what network connections are made
strace -e trace=network -f ./myapp 2>&1 | grep connect

# Debug dynamic library loading failures
strace -e trace=openat ./myapp 2>&1 | grep "\.so"

# Find permission issues
strace -e trace=file ./myapp 2>&1 | grep -E "EACCES|EPERM"

# Debug slow startup (find where time is spent)
strace -c ./myapp 2>&1
# Look for high % time in unexpected syscalls

# Watch IPC/shared memory
strace -e trace=ipc,shm ./myapp

# Find what the binary exec's
strace -e trace=execve -f ./myapp
7. seccomp フィルターのデバッグ

プログラムが seccomp ポリシーによって強制終了される場合、strace でそれを引き起こしたシステムコールを確認できます。

strace -e trace=all ./myapp 2>&1 | tail -5
# Often shows the last syscall before SIGSYS

strace の出力パターンと ltrace のフィルタリング例については、references/strace-patterns.md を参照してください。

関連スキル

  • strace で失敗箇所がわかり、内部を調べる必要がある場合は、skills/debuggers/gdb を使用します
  • バイナリが使用するライブラリとシンボルを把握するには、skills/binaries/elf-inspection を使用します
  • LD_* やライブラリの読み込みに関する問題を診断するには、skills/binaries/dynamic-linking を使用します
  • パフォーマンスをプロファイリングするには、skills/profilers/linux-perf を使用します(strace のオーバーヘッドはパフォーマンス測定には高すぎます)

コメント