1. デバッグとトラブルシューティング入門 MOC

2. デバッグの体系的プロセス MOC

3. 一般的なデバッグテクニック MOC

3.1. ログ出力デバッグ MOC (printf Debugging)

3.2. 対話型デバッガの利用 MOC (Interactive Debugger)

3.3. コードの静的解析によるデバッグ MOC

3.4. コードレビューによるデバッグ MOC

3.5. ラバーダッキング (Rubber Duck Debugging) MOC

3.6. SSCCE) の作成 MOC

3.7. バージョン管理システム (Gitなど) を活用したデバッグ MOC

  • [[git diffgit log -p による変更箇所の特定]]
  • [[git blame による変更担当者と意図の追跡]]
  • [[git bisect によるバグ混入コミットの自動特定]]
  • [[ブランチやタグを活用した問題発生バージョンの特定]]

3.8. ログ分析 (Log Analysis) MOC

3.9. 仮説駆動デバッグ (Hypothesis-Driven Debugging) (再掲・テクニックとして)

3.10. 差分デバッグ (Delta Debugging)

- [[問題を引き起こす最小の入力差分やコード差分を特定する自動化技法]]

4. 特定種類の問題に対するデバッグとトラブルシューティング MOC

4.1. メモリ関連の問題のデバッグ MOC

  • メモリリーク (Memory Leaks)
    • [[メモリリークの兆候と影響]]
    • [[メモリプロファイラの利用 (Valgrind (memcheck), ASan, JProfiler, VisualVM, dotMemory)]]
    • [[ヒープダンプ分析]]
    • [[ガベージコレクション (GC) ログの分析 (Java, .NETなど)]]
  • ダングリングポインタ (Dangling Pointers) / 野良ポインタ (Wild Pointers) (C/C++)
  • 不正メモリアクセス (Invalid Memory Access) (セグメンテーション違反など)
  • バッファオーバーフロー (Buffer Overflows) / バッファオーバーリード (Buffer Overreads)
  • 二重解放 (Double Free) / 解放後使用 (Use After Free)
  • スタックオーバーフロー (Stack Overflow)
  • メモリ破壊 (Memory Corruption)
  • [[メモリデバッギングツール (Valgrind, Dr. Memory, AddressSanitizer, GDB, LLDB)]]

4.2. 非同期処理の問題のデバッグ MOC

  • デッドロック (Deadlocks)
    • [[デッドロックの発生条件 (相互排除、保有と待機、横取り不可、循環待ち)]]
    • [[デッドロックの検出と解消 (スレッドダンプ分析、タイムアウト)]]
  • レースコンディション (Race Conditions)
    • [[データ競合の検出ツール (ThreadSanitizer (TSan), Helgrind)]]
    • [[再現の難しさと対策 (同期機構の適切な使用)]]
  • スターベーション (Starvation)
  • ライブロック (Livelock)
  • 非同期処理におけるコールバック地獄とデバッグ
  • Promise / Future / async/await のデバッグ
  • [[スレッドデバッギングツールとテクニック]]
  • [[ログによるイベントシーケンスの追跡]]

4.3. パフォーマンス問題のトラブルシューティング MOC

  • パフォーマンスボトルネックの特定
  • 遅いレスポンスタイムの分析
  • 高いリソース使用率 (CPU、メモリ、ディスクI/O、ネットワーク) の分析
  • データベースクエリの最適化 (実行計画の確認)
  • アルゴリズムとデータ構造の見直し
  • キャッシュ戦略の検証

4.4. ネットワーク関連の問題のトラブルシューティング MOC

  • 基本的なネットワーク診断ツール
    • [[ping, traceroute/tracert, nslookup/dig, netstat/ss, ipconfig/ifconfig]]
  • パケットキャプチャと分析 (Wireshark, tcpdump)
  • HTTP関連の問題 (ステータスコード、ヘッダ、リクエスト/レスポンスボディの確認)
    • [[curl, Postman, ブラウザ開発者ツール]]
  • API呼び出しの失敗
  • ファイアウォールとプロキシ設定の確認
  • DNS解決の問題
  • 接続タイムアウトとレイテンシの問題

4.5. UI関連の問題のデバッグ MOC (Web, モバイル, デスクトップ)

4.6. データベース関連の問題のトラブルシューティング MOC

4.7. セキュリティ脆弱性のデバッグと修正 MOC

4.8. 環境依存の問題のトラブルシューティング MOC

5. デバッグツールの詳細 MOC (カテゴリ別主要ツール再掲・深掘り)

  • 統合開発環境 (IDE) のデバッガ機能: (VS Code, IntelliJ IDEA, Visual Studio, Eclipse, Xcode, Android Studio) - 各IDEごとの特徴
  • 言語別スタンドアロンデバッガ: [[gdb (GNU Debugger)]], [[lldb (LLVM Debugger)]], [[pdb (Python Debugger)]], [[jdb (Java Debugger)]], [[delve (Go Debugger)]], [[WinDbg (Windows)]]
  • メモリデバッガ: [[Valgrind (Memcheck, Helgrind, Callgrind)]], [[AddressSanitizer (ASan)]], [[LeakSanitizer (LSan)]], [[ThreadSanitizer (TSan)]], [[MemorySanitizer (MSan)]]
  • パフォーマンスプロファイラ: [[perf (Linux)]], [[DTrace (Solaris, macOS, FreeBSD)]], [[Instruments (macOS)]], [[Intel VTune Profiler]], [[Java Flight Recorder (JFR) & Java Mission Control (JMC)]], [[VisualVM]], [[JProfiler]], [[YourKit (Java)]], [[cProfile/profile/Pyinstrument (Python)]], [[Xdebug/Blackfire (PHP)]]
  • ネットワーク分析ツール: [[Wireshark]], [[tcpdump]], [[Fiddler]], [[Charles Proxy]], [[mitmproxy]]
  • ログ集約・分析プラットフォーム: [[ELK Stack (Elasticsearch, Logstash, Kibana)]], [[Splunk]], [[Grafana Loki]], [[Datadog Logs]], [[Sumo Logic]]
  • APM (Application Performance Monitoring) ツール: [[Datadog]], [[New Relic]], [[Dynatrace]], [[Sentry]], [[AppDynamics]]
  • リバースエンジニアリングツール: [[IDA Pro]], [[Ghidra]], [[radare2]], [[apktool]], [[dnSpy]] (デバッグ文脈での利用)

6. デバッグとトラブルシューティングのベストプラクティスと予防策 MOC

7. デバッグ文化とチームワーク MOC

8. デバッグとトラブルシューティングのアンチパターン MOC

  • [[やみくもな試行錯誤 (Shotgun Debugging / Brute-force Debugging)]]
  • [[同じ間違いの繰り返し (学習しない)]]
  • [[問題の再現を怠る / 再現手順が不明確]]
  • [[思い込みや先入観による原因の決めつけ]]
  • [[エラーメッセージやログを読まない/無視する]]
  • [[デバッガの機能を十分に活用しない (または全く使わない)]]
  • [[修正の検証が不十分 / 回帰テストをしない]]
  • [[根本原因ではなく、表面的な症状のみを修正する (パッチワーク)]]
  • [[問題を他責にする / 自分のコードは正しいと思い込む]]
  • [[問題を放置する / 隠蔽する / "仕様です" で済ませる]]
  • [[一度に多くの変更を加える (問題の切り分けが困難になる)]]
  • [[チームメンバーとのコミュニケーション不足]]