C言語 デバッグ完全解説
2008年2月13日紙版発売
坂井丈泰,坂井弘亮 著
B5変形判/376ページ
定価3,058円(本体2,780円+税10%)
ISBN 978-4-7741-3362-1
ただいま弊社在庫はございません。
書籍の概要
この本の概要
なぜバグは無くならないのでしょうか? 本書はC言語プログラムでバグが生まれるメカニズム,またその対処方法,さらにはバグを予防する方法までを解説しています。本書を読めば,バグの発生を少なくする方法が理解できるでしょう。
こんな方におすすめ
- C言語プログラムのバグで悩んでいる人
本書のサンプル
本書の一部ページを,PDFで確認することができます。
- サンプルPDFファイル(174KB)
本書の紙面イメージは次のとおりです。画像をクリックすることで拡大して確認することができます。
目次
- はじめに
- 最初に
第1章 最初に
- 1.1 コンピュータとバグ
- 1.2 本書の目標
- 1.3 方針と考え方
- 1.4 バグのタイプ
- 1.5 本書で扱うバグ
- 1.6 C言語の標準規格
第2章 初級コース―単純なバグ
- 2.1 タイプミス
- 2.1.1 演算子の書き間違い
- 2.1.2 数字の書き間違い
- 2.1.3 コンマ忘れ
- 2.1.4 気付かないラベル
- 2.1.5 コピー&ペースト
- 2.1.6 定数名の間違い
- 2.1.7 break忘れ
- 2.1.8 コメントの誤り
- 2.2 変数の使い方
- 2.2.1 整数型と実数型
- 2.2.2 配列のインデックス
- 2.3 演算子の優先順位
- 2.3.1 フラグの操作
- 2.3.2 優先順位の誤解
- 2.3.3 条件式の中での代入
- 2.4 マクロ
- 2.5 ブロック
- 2.5.1 変数名の重複
- 2.5.2 breakの飛び先
- 2.5.3 ぶら下がりelse問題
- 2.5.4 中カッコの不足
- 2.6 初級コースのまとめ
- 2.7 中級コースの前に.基本事項の整理
- 2.7.1 整数の表現と性質
- 2.7.2 実数の表現と性質
- コラム バグの語源
第3章 中級コース―よくあるバグ
- 3.1 整数型にまつわるバグ
- 3.1.1 オーバーフロー
- 3.1.2 負の値
- 3.1.3 ビット演算
- 3.1.4 シフト演算
- 3.1.5 符号拡張
- 3.1.6 式の評価順序
- 3.1.7 整数同士の除算
- 3.1.8 ゼロ除算
- 3.1.9 剰余算
- 3.1.10 ゼロの区別
- コラム 符号付きの加減算命令はない?
- 3.2 実数型にまつわるバグ
- 3.2.1 浮動小数点数の加減算
- 3.2.2 ループでの使用
- 3.2.3 浮動小数点数の比較
- 3.2.4 予期しない値
- 3.2.5 オーバーフローとアンダーフロー
- 3.3 暗黙の型変換
- 3.3.1 算術変換
- 3.3.2 符号の有無
- 3.3.3 汎整数拡張(整数への格上げ)
- 3.3.4 関数の引数の格上げ
- 3.4 配列にまつわるバグ
- 3.4.1 配列へのアクセス
- 3.4.2 不正なインデックス
- 3.4.3 不正メモリアクセス
- 3.4.4 動的な配列の作成
- 3.4.5 文字列の扱い
- 3.5 要注意な標準ライブラリ関数
- 3.5.1 ファイル入出力
- 3.5.2 文字列処理
- 3.5.3 時刻
- 3.5.4 数学関数
- 3.5.5 乱数
- 3.6 中級コースのまとめ
- 3.7 上級コースの前に.メモリの整理
- 3.7.1 関数への引数の受渡し
- 3.7.2 変数のスコープ
- 3.7.3 メモリ領域
- 3.7.4 ポインタ
- コラム CPUのバグ
第4章 上級コース―再現しないバグ
- 4.1 変数の実体
- 4.1.1 変数のメモリ領域
- 4.1.2 定数のメモリ領域
- 4.1.3 宣言と定義
- 4.1.4 関数への配列の受渡し
- 4.1.5 エンディアン
- 4.1.6 構造体のパディング
- 4.2 動的メモリ確保
- 4.2.1 メモリ管理
- 4.2.2 初期化忘れ
- 4.2.3 初期化もれ
- 4.2.4 初期化の必要性
- 4.2.5 領域不足
- 4.2.6 バッファオーバーラン
- 4.2.7 二重解放
- 4.2.8 解放済み領域参照
- 4.2.9 メモリ破壊
- 4.2.10 メモリリークとメモリ枯渇
- 4.2.11 メモリリーク関連のバグを検出させる
- 4.3 ポインタにまつわるバグ
- 4.3.1 NULL ポインタについて
- 4.3.2 余計なキャスト
- 4.3.3 不正メモリアクセスとポインタ演算
- 4.3.4 配列とポインタの違い
- 4.4 スタック領域
- 4.4.1 スタック破壊
- 4.5 関数呼出し
- 4.5.1 自動変数では戻せない
- 4.5.2 引数の評価順序
- 4.5.3 関数へのポインタ
- 4.6 割込み処理
- 4.6.1 シグナル
- 4.6.2 静的変数の書換え
- 4.6.3 同期と排他
- 4.6.4 リンクリストの操作
- 4.6.5 スタックと割込み
- 4.6.6 関数の再入
- 4.6.7 シグナル処理の書き方
- 4.6.8 volatile キーワード
- 4.6.9 再入を防ぐには
- 4.6.10 複数箇所での受信
- 4.7 ビルドの過程
- 4.7.1 ツールにチェックさせる
- 4.7.2 コンパイルされているか
- 4.7.3 リンカの処理
- 4.7.4 コンパイルオプション
- 4.7.5 重複シンボル
- 4.8 仕様書のバグ
- 4.9 レビューで見るべきもの
- 4.10 さらに上級を目指すために
第5章 デバッグ
- 5.1 デバッグ作業
- 5.1.1 デバッグのあらまし
- 5.1.2 移植でもデバッグは必要
- 5.2 デバッグのためのコーディング
- 5.2.1 プリプロセッサの利用
- 5.2.2 ログの出力
- 5.2.3 関数単位に分割する
- 5.2.4 インターフェースは安全に
- 5.2.5 関数ラッパ
- 5.2.6 パラメータをまとめる
- 5.2.7 未コーディング部分の対処
- 5.3 テスト
- 5.3.1 テストの効率
- 5.3.2 テストの意味
- 5.3.3 チェックは多面的に
- 5.3.4 バグの検出
- 5.3.5 境界に気をつける
- 5.3.6 単純なコードと結果を比較する
- 5.3.7 パラメータ値を変更してみる
- 5.3.8 異常系のテスト
- 5.3.9 異常系のテストで確認するもの
- 5.3.10 ランダムな入力を与える
- 5.3.11 状態遷移を網羅する
- 5.3.12 マトリクスを作成する
- 5.3.13 メモリ枯渇のテスト
- 5.3.14 長時間テスト・高負荷テスト
- 5.3.15 タイミング依存のバグ
- 5.3.16 記録をつける
- 5.3.17 仕様書に沿ったテストを
- 5.3.18 枯れたツールを利用する
- 5.4 調査
- 5.4.1 再現性
- 5.4.2 切分け
- 5.4.3 余計な条件を省く
- 5.4.4 トラップを仕掛ける
- 5.4.5 発生しやすくする
- 5.4.6 履歴を遡る
- 5.4.7 デバッガの利用
- 5.5 対策の検討・修正・確認
- 5.5.1 別のバグをつくらないように
- 5.5.2 対処漏れを防ぐ
- 5.5.3 修正は本当に必要か
- 6.1 なぜバグを出してはいけないのか
- 6.1.1 プログラミング言語の役割
- 6.1.2 プログラミングは共同作業
- 6.1.3 修正時にもバグは入る
- 6.1.4 バグで悩まないために
- 6.1.5 作業の標準化
- 6.2 「プログラミングをしない」ために
- 6.2.1 書かないことを考えてみる
- 6.2.2 流用・移植
- 6.2.3 ライブラリを利用する
- 6.2.4 定数は書かない
- 6.2.5 同じことを二ヶ所に書かない
- 6.2.6 入口と出口
- 6.2.7 修正量を減らす
- 6.2.8 チェックをしなくて済むように
- 6.3 「かもしれないプログラミング」のために
- 6.3.1 明確に規定されていない動作
- 6.3.2 C 言語は移植性がない
- 6.3.3 移植性を確保する
- 6.3.4 修正に備える
- 6.3.5 本当に備えておくべきか考える
- 6.3.6 論理に忠実に
- 6.3.7 安全に書く・無難に書く
- 6.3.8 将来的な変更を考える
- 6.4 「伝えるプログラミング」のために
- 6.4.1 読みやすく書く
- 6.4.2 流れをわかりやすく
- 6.4.3 使いどころを考える
- 6.4.4 単純に書く
- 6.4.5 イリーガルな書き方はしない
- 6.4.6 名前を適切につける
- 6.4.7 名前は規則的に
- 6.4.8 コメントに頼らない
- 6.4.9 コメントを入れる
- 6.4.10 最適化はしない
- 6.4.11 単位の標準化
- 6.4.12 インターフェースは明確に
- 6.5 楽をするために
- 6.5.1 設計が7割
- 6.5.2 自分は今,何を作ろうとしているのか
- 6.5.3 様々な書き方を知る
- 6.5.4 時間があるときには
- 6.5.5 他人に説明する
- 6.5.6 教育
第6章 バグの予防
第7章 最後に
- 7.1 そもそもプログラムとは何か
- 7.2 コンピュータの限界
- 7.3 バグの原則
- 7.4 プログラミング技術=伝える技術
- プログラミングのチェックポイント
この本に関連する書籍
-
C言語 入門書の次に読む本 [改訂新版]
C言語は,習得するのが難しいプログラミング言語です。誰もが最初は,文法入門書を読んだり,初めた学ぶ人向けの講義を受けたりして,C言語を学習していきます。しかし...
-
改訂第5版 ANSI C対応 はじめてのC
C言語解説書の定番中の定番『はじめてのC』が6年ぶりの改訂を迎えました。変数などの基本項目から低水準入出力関数まで網羅した徹底的な解説は,お手軽なC言語入門書に...