mcpField
D
debug-ops

debug-ops

github.com/0xdarkmatter開発7837 回インストール2 週間前に更新
リポジトリ

debug-ops について

debug-opsは、開発者向けの体系的なデバッグスキルです。再現から再発防止までの6段階の手順に加え、言語別デバッガーの資料や一般的な障害シナリオのガイドを提供します。

主な機能

  1. 01再現から再発防止までの6段階
  2. 02障害の切り分けと根本原因分析
  3. 03複数言語のデバッガー資料
  4. 04ログとリクエスト追跡の手法
  5. 05よくある障害シナリオのガイド

活用シーン

  1. 01ソフトウェアの不具合を再現して特定
  2. 02性能劣化や並行処理の問題を調査
  3. 03修正を検証して回帰テストを追加
  4. 04サービス間のリクエストとログを追跡

インストール

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

$npx skills add https://github.com/0xdarkmatter/claude-mods --skill debug-ops

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

assets/
.gitkeep
references/
common-scenarios.md
systematic-methods.md
tool-specific.md
scripts/
.gitkeep

詳細

デバッグ操作

言語固有のツールと一般的なシナリオ別プレイブックを活用した、体系的なデバッグ手法です。

バグ分類の判断ツリー

Bug Report / Symptom
│
├─ Crash
│  ├─ Segfault / Access Violation
│  │  └─ Check: null pointer, buffer overflow, use-after-free, stack overflow
│  ├─ Panic / Fatal Error
│  │  └─ Check: assertion failure, unrecoverable state, out-of-memory
│  └─ Unhandled Exception
│     └─ Check: missing error handler, unexpected input type, network failure
│
├─ Hang
│  ├─ Deadlock
│  │  └─ Check: lock ordering, mutex contention, channel blocking
│  ├─ Infinite Loop
│  │  └─ Check: loop termination condition, counter overflow, recursive call
│  └─ Blocked I/O
│     └─ Check: network timeout, DNS resolution, disk full, file lock
│
├─ Wrong Output
│  ├─ Logic Error
│  │  └─ Check: operator precedence, boundary conditions, boolean logic
│  ├─ Data Corruption
│  │  └─ Check: concurrent mutation, encoding mismatch, truncation
│  └─ Off-by-One
│     └─ Check: loop bounds, array indexing, fence-post errors
│
├─ Performance
│  ├─ Slow Queries
│  │  └─ Check: missing index, N+1 queries, full table scan, lock wait
│  ├─ Memory Bloat
│  │  └─ Check: cache without eviction, leaked references, large allocations
│  └─ CPU Spikes
│     └─ Check: hot loops, regex backtracking, excessive GC, busy-wait
│
└─ Intermittent
   ├─ Race Condition
   │  └─ Check: shared mutable state, read-modify-write, check-then-act
   ├─ Timing-Dependent
   │  └─ Check: timeout values, clock skew, event ordering assumptions
   └─ Environment-Specific
      └─ Check: OS differences, locale, timezone, file system case sensitivity

体系的なデバッグワークフロー

症状の特定から予防までの6ステップのプロセスです。

ステップ 1:再現する

バグが存在することを確認し、確実に再現できる手順を作成します。再現できないバグは、自信を持って修正できません。正確な入力、環境、操作手順を記録します。

ステップ 2:切り分ける

問題の範囲を可能な限り狭めます。二分探索(git bisect、コードを半分ずつコメントアウトする方法)、スタブ、機能フラグ、環境の分離を使って、無関係なコードを除外します。

ステップ 3:原因を特定する

直近の引き金だけでなく、根本原因を見つけます。5 Whys の手法を使い、実行をトレースし、重要な箇所の状態を調べます。症状と根本的な欠陥を区別します。

ステップ 4:修正する

根本原因に対処する、最小限かつ適切な変更を適用します。手当たり次第のデバッグ(一度に複数の変更を加えること)は避けます。修正が機能することだけでなく、なぜ機能するのかを理解します。

ステップ 5:検証する

修正によって元の問題が解決し、リグレッションが発生していないことを確認します。元の再現手順を再実行します。テストスイート全体を実行します。修正に関連するエッジケースもテストします。

ステップ 6:予防する

リグレッションテストを追加します。必要に応じてドキュメントや運用手順書を更新します。同じ種類のバグが別の場所にも存在しないか検討します。調査結果をチームと共有します。

再現チェックリスト

[ ] Minimal reproduction steps documented (numbered, unambiguous)
[ ] Environment captured (OS, runtime version, dependencies, config)
[ ] Exact inputs recorded (request payload, CLI args, file contents)
[ ] Timing sensitivity assessed (does it fail only under load? after delay?)
[ ] Single-threaded reproduction attempted (eliminates concurrency noise)
[ ] Reproduction automated as script or test case
[ ] Confirmed reproduction is deterministic (fails N/N attempts)
[ ] Identified whether reproduction requires specific data/state

切り分け手法のクイックリファレンス

手法方法最適な用途
二分探索(git)git bisect start BAD GOOD を実行し、続けて git bisect run ./test.sh を実行しますバグを導入したコミットの特定
二分探索(コード)コードの半分をコメントアウトしてテストし、これを繰り返します不慣れなコード内で問題箇所を絞り込む
スタブ/モック依存関係を、正常な動作が確認された偽物に置き換えます外部サービスから切り離す
機能フラグ機能を1つずつ無効にします問題の原因となる機能の特定
環境の分離Docker コンテナー、新しい VM、クリーンインストールを使います環境の汚染を排除する
ネットワークの傍受mitmproxy、Charles Proxy、モックサーバーを使いますクライアント側とサーバー側の問題を切り分ける
入力の縮小バグが発生しなくなるまで入力フィールドやデータを取り除きます最小限の引き金を特定する
依存関係の固定すべての依存関係を固定し、1つずつ更新します問題を引き起こす依存関係の更新を特定する

根本原因分析テンプレート

5 Whys の例
Problem: API returns 500 error on user login

1. Why? → The database query throws a timeout exception
2. Why? → The users table scan takes >30 seconds
3. Why? → There is no index on the email column
4. Why? → The migration that adds the index was never run in production
5. Why? → The deployment script skips migrations when the --fast flag is used

Root cause: Deployment script's --fast flag bypasses migrations
Fix: Remove --fast flag behavior that skips migrations, add migration check to health endpoint
Prevention: CI check that verifies all migrations are applied after deployment
フォールトツリーの基本
                    [System Failure]
                    /              \
            [Hardware]          [Software]
            /       \           /        \
       [Disk]    [Memory]  [Config]   [Code Bug]
                              |          |
                         [Missing    [Race in
                          env var]    worker pool]

上部(観測された障害)から下部の葉(根本原因)に向かって分析します。各分岐は AND/OR ゲートです。AND はすべての子条件が真である必要があることを意味し、OR はいずれか1つの子条件を満たせば十分であることを意味します。

言語別デバッガーのクイックリファレンス

言語ツール起動コマンド主なコマンド
Node.jsChrome DevToolsnode --inspect-brk app.jschrome://inspect を開き、Sources でブレークポイントを設定します
Node.jsndbnpx ndb app.jsブラックボックス化機能を備えた拡張 DevTools
Pythonpdbpython -m pdb script.pyn 次へ、s ステップ実行、c 続行、p expr を出力、bt バックトレース
Pythondebugpypython -m debugpy --listen 5678 --wait-for-client script.pyVS Code の「Attach」起動構成
Pythonbreakpoint()コードに breakpoint() を挿入しますその行で pdb が起動します(Python 3.7 以降)
GoDelvedlv debug ./cmd/serverb main.go:42 ブレーク、c 続行、n 次へ、p var を出力
GoDelve(テスト)dlv test ./pkg/...テスト関数を直接デバッグします
GoDelve(アタッチ)dlv attach PID実行中のプロセスをデバッグします
Rustrust-gdbrust-gdb target/debug/myappb main、r、n、p variable、bt
Rustrust-lldbrust-lldb target/debug/myappb s main、r、n、p variable、bt
RustCodeLLDBVS Code 拡張機能GUI でのブレークポイント設定、変数の検査
ブラウザーDevToolsF12 または Ctrl+Shift+IElements、Console、Network、Sources、Performance、Memory
デバッグ用の簡単なスニペット
// Node.js: drop into debugger at this point
debugger;

// Node.js: conditional breakpoint
if (user.id === 'problem-user') debugger;
# Python: drop into debugger at this point
breakpoint()

# Python: conditional breakpoint
if user_id == 'problem-user':
    breakpoint()
// Go: print goroutine stacks (send SIGQUIT or SIGABRT)
// kill -QUIT <pid>
// Or in code:
import "runtime/debug"
debug.PrintStack()
// Rust: enable full backtraces
// RUST_BACKTRACE=1 cargo run
// RUST_BACKTRACE=full cargo run

ログベースのデバッグパターン

戦略的なログ記録

エラーが発生する箇所だけでなく、判断を行う箇所にもログを配置します。

[ENTRY] function_name(args_summary)     -- entering the function
[STATE] key_variable=value              -- state at critical decision point
[BRANCH] taking path X because Y       -- which branch and why
[EXIT] function_name -> result_summary  -- leaving the function
[ERROR] operation failed: detail        -- error with context
相関 ID

サービス間で単一のリクエストを追跡します。

# Generate at entry point, propagate through all calls
X-Request-ID: 550e8400-e29b-41d4-a716-446655440000

# Search across all service logs
rg "550e8400-e29b-41d4-a716-446655440000" /var/log/services/
タイムラインの再構築
# Merge and sort logs from multiple sources by timestamp
sort -t' ' -k1,2 service-a.log service-b.log service-c.log > timeline.log

# Find gaps in activity (potential hang/block)
awk '{print $1, $2}' timeline.log | uniq -c | sort -rn | head -20
構造化ログのクエリ
# jq queries on JSON logs
# Find all errors for a specific user
jq 'select(.level == "error" and .user_id == "u123")' app.log

# Get timing distribution for slow requests
jq 'select(.duration_ms > 1000) | .duration_ms' app.log | sort -n

# Count errors by type
jq -r 'select(.level == "error") | .error_type' app.log | sort | uniq -c | sort -rn

よくある落とし穴

落とし穴問題点対処法
根本原因ではなく症状を修正するバグが別の形で再発します5 Whys を使って深掘りします
安全策なしで本番環境をデバッグするデータ損失や長時間の停止につながるおそれがあります読み取り専用クエリ、フィーチャーフラグ、カナリアデプロイを使用します
ハイゼンバグ(観察すると消えるバグ)ログやブレークポイントの追加でタイミングが変化しますstrace、サンプリングプロファイラー、rr などの非侵襲的なツールを使用します
思い込みによる偏り(「X のはずがない」)信頼しているものが原因である可能性を見落とします「明らか」なものも含め、すべての仮定を明示的に検証します
再現ケースがない修正を検証できず、リグレッションも防げません信頼できる再現方法の確立に、あらかじめ時間をかけます
print/ログによるデバッグに頼りすぎる反復が遅くなり、コードが汚れ、並行性のバグを見逃します適切なデバッガー、プロファイラー、またはトレーシングツールを使用します
最近の変更を確認しない答えは直近の数件のコミットにあることがよくありますgit log --oneline -20、git diff HEAD~5
警告メッセージを無視する警告は後に続くエラーを予告していることがよくありますデバッグ中は警告をエラーとして扱います
間違ったバージョン/ブランチをデバッグするすでに修正済みのコードや別のコードに時間を浪費しますgit branch、git log -1、ランタイムバージョンを確認します
スタックトレースを最後まで読まない根本原因は先頭ではなく途中にあることがよくあります下から上へ読み、まずトレース内の自分のコードを探します
複数の変更を同時に行うどの変更が修正(または悪化)につながったのか判断できませんテストサイクルごとに変更は 1 つにします
変更前の状態を記録しない動作していた基準状態と比較できませんデバッグ前に設定、依存関係、データのスナップショットを取得します

参考ファイル

ファイル内容行数
references/systematic-methods.md科学的手法、二分探索、デルタデバッグ、差分デバッグ、タイムトラベルデバッグ、チームでのデバッグ約 600
references/tool-specific.mdブラウザー DevTools、Node.js、Python、Go、Rust、データベース、ネットワーク、Docker のデバッグツール約 650
references/common-scenarios.mdメモリーリーク、デッドロック、競合状態、パフォーマンスのリグレッション、API のデバッグ、デプロイの問題約 550

関連項目

  • testing-ops -- バグの再発を防ぐテストを作成します
  • security-ops -- セキュリティに特化したデバッグ(認証の失敗、インジェクション、CSRF)
  • monitoring-ops -- 本番環境の可観測性、アラート、ダッシュボード
  • code-stats -- コードの複雑さを測定し、バグが発生しやすい箇所を特定します
  • docker-ops -- コンテナーのデバッグ(終了コード、distroless、ビルド); kubernetes-ops -- Pod のデバッグ
  • git-ops -- Git bisect のワークフローと履歴の調査

コメント