ソフトウェア技術者のためのバグ百科事典(13)デバッガとビルド構成のバグ:山浦恒央の“くみこみ”な話(134)(3/3 ページ)
ソフトウェア技術者に向けて、バグに関する基礎知識をまとめていく新シリーズ「バグ百科事典」。第13回は、「デバッガの使用方法」と「ビルド構成に関するバグ」を取り上げます。
5.ビルド構成で表面化するバグ
上記に紹介した通り、デバッガは非常に有用ですが、以下のように、デバッガ使用時に特有のトリッキーなバグが発生する可能性があります。
5.1 ビルド構成を切り替えると再現しない
成果物にもよりますが、ビルド構成を切り替えるとバグが再現しない場合があります。例えば、デバッグビルドで一通り作成し、リリースビルドでテストすると、意図した動作となりません。事象を再確認するために、デバッグビルドに変更すると、事象が再現されなくなります。理由の一つが最適化で、デバッグビルドとリリースビルドのメモリ配置が異なっていることが原因かもしれません。
5.2 ビルド構成特有の処理
エンジニアにもよるでしょうが、デバッグ時にはデバッグ特有の処理を記述することがあります。例えば、ifdefなどを使用してデバッグビルドとリリースビルドの使い分けをします。その際、「デバッグ用の処理がなくなることによるタイミングのずれ」や「どちらかの差分にバグを作りこんだ」ことにより、意図した動作をしない可能性があります。
5.3 処理時間の未達を見落とす可能性がある
デバッガは、プログラムを一時停止しながら実行するので、「処理時間がオーバーしてプログラムが停止する」などのバグを見つけることは非常に困難です。ロジックが正しくないと思ってデバッガでチェックしても見つかりません。周波数100Hzの処理なのに1秒間に10回ではなく、8回しか実行しないなど、処理時間関係のバグは別の深い箇所に原因があります。
6.バグの兆候
バグの兆候は、ビルド構成を変更すると、意図した動作とならない場合です。その場合は、デバッグビルドとリリースビルドにログや標準出力などの目に見える差分がないか確認しましょう。その後、最初に取り上げたデバッグ作業(標準出力、ログ、コメントアウト)を活用しバグの場所を絞り込みましょう。
7.対策
このバグの有効な対策はあまりありませんが、成果物のバグ発生が収束してきたら、リリースビルドを使用して回帰テストを実施しましょう。くれぐれも、リリース直前までデバッグビルドで確認し続けないことが重要です。
8.終わりに
思い通りのプログラムを作ることは簡単ではありません。今回は、デバッガの使い方とビルド構成に関連するバグを紹介しました。もし、プログラムの動作に悩んでいる新人を見かけたら、デバッガの具体的な使用方法を教えるといいでしょう。
また、ビルド構成の違いでバグが発生すると、原因が分からず悩みます。デバッグビルドで正常動作を確認しても、安心できません。リリースビルドで再確認し、ビルド構成が変わっても問題ないか確認しておきましょう。
山浦先生執筆の書籍「ソフトウェア技術者のためのバグ検出ドリル」が発売中!
山浦恒央先生が執筆した書籍「ソフトウェア技術者のためのバグ検出ドリル」が日科技連出版から発売中です。本連載「山浦恒央の“くみこみ”な話」とTechFactoryの連載「組み込みエンジニアの現場力養成演習ドリル」をベースに、大幅加筆、改訂した内容になっています。
内容は、「デバッグの詰将棋」で、要求仕様定義、設計、コーディング、テスト、保守の5フェーズでの「バグを埋め込んだ仕様記述やソースコード」を読んで、バグをピンポイントで見つける問題集になっています。全部で31問あり、難易度は初級から上級まで、いろいろです。興味のある方は、Amazon.comや書店でチェックしてください!
東海大学 大学院 組込み技術研究科 非常勤講師(工学博士)
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- ≫連載「山浦恒央の“くみこみ”な話」バックナンバー
- ソフトウェア技術者のためのバグ百科事典(12)デスマーチを呼ぶ処理時間のバグ
ソフトウェア技術者に向けて、バグに関する基礎知識をまとめていく新シリーズ「バグ百科事典」。第12回は、開発のデスマーチを呼び起こしかねない、処理時間のバグを取り上げます。 - ソフトウェア技術者のためのバグ百科事典(11)「数値演算」のバグは奥が深い
ソフトウェア技術者に向けて、バグに関する基礎知識をまとめていく新シリーズ「バグ百科事典」。第11回は、意外と奥が深い、数値演算のバグを取り上げます。 - ソフトウェア技術者のためのバグ百科事典(10)デバッグの強力な手掛かり「ログ」のバグ
ソフトウェア技術者に向けて、バグに関する基礎知識をまとめていく新シリーズ「バグ百科事典」。第10回は、デバッグの強力な手掛かりとなる「ログ」にまつわるバグを取り上げます。 - ソフトウェア技術者のためのバグ百科事典(9)境界値のバグ
ソフトウェア技術者に向けて、バグに関する基礎知識をまとめていく新シリーズ「バグ百科事典」。第9回は、常連バグの代表格である、境界値に関する仕様の不良や勘違いのバグ「境界値のバグ」を取り上げます。 - ソフトウェア技術者のためのバグ百科事典(8)バグを見つけるテストがバグってる
ソフトウェア技術者に向けて、バグに関する基礎知識をまとめていく新シリーズ「バグ百科事典」。第7回は、プログラムのバグを見つける作業である「テスト」がテーマです。テストの作業次第では逆にバグを作り込むこともあり、「テストのテストのテスト」のように無限ループに陥りかねません。