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