実践 デバッグ技法
――GDB、DDD、Eclipseによるデバッギング

[cover photo]
オライリー・ジャパンで書籍を購入:
定価3,024円

Ebook Storeで電子版を購入:
価格2,419円

ソフトウェア開発で不可欠なデバッグですが、知識と経験が求められるため熟練プログラマのなかにもデバッグが苦手という開発者は少なくありません。洗練されたデバッガを利用できても、デバッガのどの機能がどの場面で有効かを見極めるのは簡単ではないからです。本書では、Linux/Unixプラットフォームでもっとも広く使われているGDB、DDD、Eclipseという3つのツールを取り上げ、各ツールに独自のデバッグテクニックはもちろん、コードに含まれるエラーを見つけ出して修正するプロセスを改善するための総合的な戦略についても解説します。翻訳版ではVisual C++でのデバッグ手法についても加筆しました。

関連書籍

Binary Hacks
C++ ライブラリ クイックリファレンス
Debug Hacks
GDBハンドブック
インテル スレッディング・ビルディング・ブロック

推薦の言葉
まえがき
1章 初心者にもプロにも役立つ予備知識
    1.1 本書で扱うデバッガ
    1.2 使用するプログラミング言語
    1.3 デバッグの原則
        1.3.1 デバッグの本質:確認の原則
        1.3.2 確認の原則にとってデバッガの価値とは?
        1.3.3 その他のデバッグ原則
    1.4 テキストベース vs. GUIベース(そして両者の折衷形態)
        1.4.1 インタフェースの簡単な比較
        1.4.2 テキストベースとGUIの折衷形態
    1.5 デバッガの主な操作方法
        1.5.1 ソースコードをステップ実行する
        1.5.2 変数を調べる
        1.5.3 変数の変化を「広域指名手配」する
        1.5.4 呼び出しスタックを上下に移動する
    1.6 オンラインヘルプ
    1.7 最初のデバッグ作業
        1.7.1 GDBを用いる
        1.7.2 DDDを使った実演
        1.7.3 Eclipseを使った実演
    1.8 初期化ファイルの使用
2章 調査のために実行を止める
    2.1 停止の仕組み
    2.2 ブレークポイントの概要
    2.3 ブレークポイントを追跡する
        2.3.1 GDBでのブレークポイント一覧
        2.3.2 DDDでのブレークポイント一覧
        2.3.3 Eclipseでのブレークポイント一覧
    2.4 ブレークポイントを設定する
        2.4.1 GDBでブレークポイントを設定する
        2.4.2 DDDでブレークポイントを設定する
        2.4.3 Eclipseでブレークポイントを設定する
    2.5 GDBの発展例題
    2.6 ブレークポイントの持続性
    2.7 ブレークポイントを削除・無効にする
        2.7.1 GDBでブレークポイントを削除する
        2.7.2 GDBでブレークポイントを無効にする
        2.7.3 DDDでブレークポイントを削除・無効にする
        2.7.4 Eclipseでブレークポイントを削除・無効にする
        2.7.5 DDDでブレークポイントを「移動する」
        2.7.6 DDDでブレークポイントの操作を元に戻す/やり直す
    2.8 ブレークポイントの属性を詳しく見る
        2.8.1 GDB
        2.8.2 DDD
        2.8.3 Eclipse
    2.9 実行を再開する
        2.9.1 GDB
        2.9.2 DDD
        2.9.3 Eclipse
    2.10 条件つきブレークポイント
        2.10.1 GDB
        2.10.2 DDD
        2.10.3 Eclipse
    2.11 ブレークポイント・コマンドリスト
    2.12 ウォッチポイント
        2.12.1 ウォッチポイントを設定する
        2.12.2 式
3章 変数を調査・設定する
    3.1 メインの例題コード
    3.2 上級の変数調査・設定法
        3.2.1 GDBでの調査法
        3.2.2 DDDでの調査法
        3.2.3 Eclipseでの調査法
        3.2.4 動的な配列を調べる
        3.2.5 C++ではどうなるの?
        3.2.6 ローカル変数を監視する
        3.2.7 メモリを直接調べる
        3.2.8 printとdisplayの上級オプション
    3.3 変数を設定する
    3.4 GDB独自の変数
        3.4.1 値の履歴を用いる
        3.4.2 簡易変数
4章 プログラムがクラッシュしたら
    4.1 背景知識:メモリ管理について
        4.1.1 なぜプログラムはクラッシュするのか?
        4.1.2 プログラムのメモリ配置
        4.1.3 ページの概念
        4.1.4 ページテーブルの役割の詳細
        4.1.5 軽微なメモリアクセスのバグはセグメンテーション違反に
   ならないこともある
        4.1.6 セグメンテーション違反とUnixのシグナル
        4.1.7 他の種類の例外
    4.2 coreファイル
        4.2.1 coreファイルの生成方法
        4.2.2 シェルによるcore生成の抑制
    4.3 例題の拡張
        4.3.1 最初のバグ
        4.3.2 デバッグ中はGDBを抜けないこと
        4.3.3 2番目と3番目のバグ
        4.3.4 4番目のバグ
        4.3.5 5番目と6番目のバグ
5章 多重実行環境でのデバッグ
    5.1 クライアント/サーバ型のネットワークプログラムをデバッグする
    5.2 スレッドコードをデバッグする
        5.2.1 プロセスとスレッドのおさらい
        5.2.2 基本的な例題
        5.2.3 バリエーション
        5.2.4 GDBのスレッドコマンドのまとめ
        5.2.5 DDDのスレッドコマンド
        5.2.6 Eclipseのスレッドコマンド
    5.3 並列実行アプリケーションをデバッグする
        5.3.1 メッセージパッシングシステム
        5.3.2 共有メモリシステム
    5.4 拡張した例題
        5.4.1 OpenMPの概要
        5.4.2 OpenMP例題プログラム
6章 特別な話題
    6.1 コンパイルもロードもできないときにはどうすればいいですか?
        6.1.1 文法エラーメッセージの実体のない行番号
        6.1.2 ライブラリが見つからない
    6.2 GUIプログラムをデバッグする
        6.2.1 cursesプログラムをデバッグする
7章 他のツール
    7.1 テキストエディタを活用する
        7.1.1 文法ハイライト
        7.1.2 カッコの対応づけ
        7.1.3 VimとMakefile
        7.1.4 Makefileとコンパイラの警告メッセージ
        7.1.5 テキストエディタをIDEとみなす最終的な考え
    7.2 コンパイラを活用する
    7.3 C言語でのエラー報告
        7.3.1 errnoを用いる
    7.4 straceとltraceを使った快適な暮らし
    7.5 静的コードチェッカ:lintとその仲間
        7.5.1 splintの使い方
        7.5.2 最後に
    7.6 動的確保メモリをデバッグする
        7.6.1 DAMの問題を発見する戦略
        7.6.2 Electric Fence
        7.6.3 GNU Cライブラリのツールを使ってDAMの問題をデバッグする
8章 他の言語にGDB、DDD、Eclipseを用いる
    8.1 Java
        8.1.1 JavaをデバッグするのにGDBを直接用いる
        8.1.2 JavaをデバッグするのにDDDをGDBと一緒に使う
        8.1.3 DDDをJDBのGUIとして用いる
        8.1.4 EclipseでJavaをデバッグする
    8.2 Perl
        8.2.1 DDDを使ってPerlをデバッグする
        8.2.2 EclipseでPerlをデバッグする
    8.3 Python
        8.3.1 DDDでPythonをデバッグする
        8.3.2 EclipseでPythonをデバッグする
    8.4 SWIGコードをデバッグする
    8.5 アセンブリ言語
付録A Visual C++を用いたデバッグ
    A.1 ビルドと実行
    A.2 中断と変数の表示
    A.3 ブレークポイント設定と実行再開
    A.4 不正メモリアクセス
    A.5 マルチスレッドのデバッグ
    A.6 その他の便利な機能
訳者あとがき
索引

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。

■P.127 下から3行目
  • 【誤】NULLターミネート文字列
  • 【正】ヌルターミネート文字列
■P.127(2か所)
  • 【誤】NULL文字
  • 【正】ヌル文字
■P.134(4か所)
  • 【誤】NULL文字
  • 【正】ヌル文字
■P.137(1か所)
  • 【誤】NULL文字
  • 【正】ヌル文字
■P.138(4か所)、
  • 【誤】NULL文字
  • 【正】ヌル文字
■P.138 下から11行目
  • 【誤】NULLを記憶するのに十分な
  • 【正】ヌル文字を記憶するのに十分な
■P.244(1か所)
  • 【誤】NULL文字
  • 【正】ヌル文字

Feedback

皆さんのご意見をお聞かせください。ご購入いただいた書籍やオライリー・ジャパンへのご感想やご意見、ご提案などをお聞かせください。より良い書籍づくりやサービス改良のための参考にさせていただきます。
[feedbackページへ]