デバッガとは?ソフトウェアの完成度を高める必須機能について解説!
thumb_debuggertowa_01
デバッガとは?ソフトウェアの完成度を高める必須機能について解説!
アンドエンジニア編集部
2023.04.15
この記事でわかること
デバッガ(debugger)とはプログラムの欠陥(バグ)を見つけ、デバッグ作業を支援してくれるソフトウェアのこと
プログラムには必ずバグがあるという疑いを持ち、テスト指示書に従ってテストを行うことが重要
主なデバッグツールとしてはLinux系のGDB、VS Codeで動く各言語別のデバッガなどがある

デバッガとは

img_debuggertowa_01

デバッガ(debugger)とは、プログラミングで用いる開発ツールの1種で、プログラムの欠陥(バグ)を見つけ、デバッグ作業を支援してくれるソフトウェアのことです。デバッガはバグの発見には有効ですが、デバッグ自体を自動的には行ってくれません。

デバッガは対象プログラムの実行状態に介入して、対話的に動作を一時停止させ、コード中の変数やメモリの番地、CPU内部のレジスタの値を表示するなどの機能があります。最近ではIDE(統合開発環境)にデバッガがコンパイラと同様に含まれているのが一般的です。

また、インタプリタ言語であるRuby・Python・Perlなどには標準でデバッガが付属しています。ゲーム業界などではデバッグ作業を行う人を「ゲームデバッガー」と呼び、求人情報でも見かけることがあります。

ゲームデバッガーはチームを編成し、アルバイトも採用して、プレイヤー目線でゲームソフトのデバッグ作業を行っていますが、この記事では、主に開発ツールとしてのデバッガにフォーカスして、その目的や機能などを紹介をします。

Rubyの用途・できること・向いていないことを初心者向けに解説!
Pythonでつくるゲーム開発とは?入門情報をまとめて解説!
Perlとは?できることやメリット・デメリットについて解説!

デバッガの目的と機能

img_debuggertowa_02

デバッガの目的は、ソフトウェアの不具合の原因となるバグ(欠陥)を取り除くことにあります。ソフトウェアはプログラミングのミスを完全に防ぐことは難しく、設計書の読み込み不足、理解不足によるコーディングミスや、思い込み、ケアレスミスなど、様々な要因によってバグが生まれます。

そこで、プログラムを実行させながら動作を確認し、正しく動作するようにプログラムを修正し、バグを取り除く作業、すなわちデバッグを行う必要があるのです。

そもそもデバッグとは

デバッグ(debug)とはプログラム内にあるバグ(bug)を探して、修正した後に設計通りの動作をさせる作業のことです。バグ(bug)とは虫を意味する言葉ですが、接頭辞の(de)をつけて、「虫を駆除する」という意味から「debug」と名付けられました。

コンピュータ内部に小さな虫が入り込んだことが原因でコンピューターが故障し、虫を取り除いて故障を修理した際に、"虫=bug=不具合"という連想から、バグを修正することをデバッグ(debug)と呼ぶようになったというのが名前の由来※だと言われています。

【参考】:※デバッグ - Wikipedia

デバッグの方法

ここでは、デバッグの基本的な考えかたやデバッグ方法について紹介します。デバッグツールを使う方法、使わずに行う方法もありますので、それぞれについて確認していきましょう。

1.デバッグの基本 デバッグは性悪説に立ち、必ずバグがあるという前提でテスト指示書を作成し、指示書に従ってテストを行います。

2.バグは再現条件を見出す 同じプログラムの処理でバグが発生したり、発生しなかったりすることがあります。どのような条件の時にバグが発生するのかを特定化できなければ、バグは修正できません。

3.分割統治法によってバグの範囲を絞る プログラムの規模が大きくなると、バグの個所を絞り込むためには時間や手間が掛かります。そこで、プログラム内を小さな機能に分割して、機能ごとに少しずつ実行して、バグの範囲を絞り込みます。これを分割統治法といいます。

4.デバッグ用のコードを使う デバッグ用のコードとは、ソースコードの中に埋め込み、実行結果を表示させるコードのことです。これを用いることで、プログラムの実行結果を細かくモニタリングでき、バグの発見に役立ちます。

デバッグコードとしてはassert関数が有名ですが、デバッグコードの乱用はプログラムのメンテナンス性を阻害することがあるため、適切な使い方が求められます。

5.目視で見つける ソースコードの規模が小さいケースでは、ソースコードに手を加えず目視でバグを探すことがありますが、目視の方が効率的にバグを発見できる場合があります。これは経験を積んだプログラマ向きの方法で経験と勘に依存するため、初心者にはおすすめできません。

6.デバッガを利用する デバッグコードを用いても根本的なバグが見つからない場合には、専用ツールのデバッガを利用するのも1つの方法です。デバッガを利用すると、変数の値を確認したり、停止した箇所を詳細に確認できたりするため、バグが潜んでいる部分を効率的に見つけることができます。

7.バグに関する情報を集める ここまでの方法で集めた情報をもとに、バグの発生箇所を特定化し、ソースコードの修正を行います。修正個所が大きいケースでは新たなバグを発生させる可能性があるため、改めてテスト仕様書に従ってテストを行い、バグがないことを確認します。

デバッガの機能

多くのOS(Operating System)やプログラング処理ツールには、コマンドラインで利用できるデバッガが付属していますが、機能や仕組みはほぼ同じです。またIDE(統合開発環境)では、GUIベースの視覚的なデバッグが行えるビジュアルデバッガが付属しています。

それぞれのデバッガにはほぼ以下の機能が備わっており、その機能を利用することで効率的にデバッグを行えます。

■ ブレークポイント(Break Point) プログラマがソースコードの中で、任意のステップにポイントを置き、プログラム実行を一時的に止めることができる機能です。

ブレークポイントを置くことにより、任意の位置で実行状況(コード内の変数の値、メモリ内容)を確認することができます。また、一時停止した後に処理を継続して実行させることも可能です。

■ ステップ実行 ステップ実行は、プログラムを1ステップ(1行や1命令)ごとに実行させて、処理の内容を確認する機能です。ブレークポイントを指定しておき、そこからプログラマがキー操作などで指示を与えながら、実行と一時停止を繰り返し、処理状況を確認します。

▪ステップイン ステップ実行中に関数(サブルーチン)呼び出しなどに遭遇した際に、関数などの内部に移動してステップ実行を進める機能のことです。

▪ステップアウト ステップインによって関数呼び出しした後、関数などの処理を一気に終了まで進める機能のことです。関数にバグがないことを確認できている場合にはステップアウトを利用します。

▪ステップオーバー ステップ実行において、関数などの呼び出しをスキップする機能です。

■変数確認・変数書き換え コード内で指定した変数の中身を出力したり、変数の中身を任意の値に書き換えて実行したりする機能です。バグによって、変数の値が異常値になっているかどうかを確認でき、正しい値を入れて正常に動くか否かを見ます。これにより、バグの特定化、バグ修正を効率的に行うことができます。

IDEとは?詳細やメリット、おすすめのIDEを紹介します!

主なデバッグツール

img_debuggertowa_03

デバッガはOSの標準機能となっているもの、プログラミング言語に付属するもの、統合開発環境(IDE)の機能となったもの、汎用エディタに組み込まれたものなど、様々な種類があります。

ここでは、Linux(Unix)系でよく使われるデバッガの「GDB」と、汎用エディタとして人気の「VS Code」のデバッグ機能について紹介します。

GDBとGCC

GDBの正式名称は「The GNU Project Debugger」で、Linux(Unix)系OSで一般的に利用されているデバッガです。GNU(Unix、Linux系のOSSを開発するプロジェクト)が開発し、OSS(オープンソースソフトウェア)として配布されています。

GDB は GCC※を使ってコンパイルしたプログラムでのデバッグに利用します。コンパイル時に、

GCC -g -O0 <ソースファイル名>

と「-g -O0」オプションをつけてコンパイルすることで、デバッグモードでプログラムを実行できるようになります。この結果、プログラムに対しコマンドで「ブレークポイント」や「ステップ実行」を指示できるようになり、デバッグが行えます。

※GCCは「GNU Compiler Collection」の略で、 C言語、C++、Objective-C、Javaなどのプログラミング言語に対応するコンパイラで、現在では、Linux系をはじめとして様々なUNIX系OSに標準搭載されています。

【参考】: GDB: The GNU Project Debugger 【参考】:※ GCC, the GNU Compiler Collection - GNU Project

Javaでできることとは?メリット・デメリットについても解説!

VS Code

Visual Studio Code(通称、VS Code)はMicrosoft提供のエンジニア向け汎用エディタとして知られています。テキストエディタ機能以外にも様々な機能がある高機能エディタとして人気があり、その機能の1つにデバッグ機能があります。

VS Codeが標準でサポートしているのはJavaScriptのデバッグ機能ですが、拡張機能を利用することで様々な言語のデバッグが可能になり、C言語・C++・C#・Python・PHP・Rubyなど多くの言語に対応できます。

これらはVS Codeの拡張機能にあるサイドバーから閲覧、インストールができます。他、Visual Studioの「Marketplace」からも閲覧できます。

【参考】: デバッガーのドキュメント - Visual Studio | Microsoft Learn 【参考】: Visual Studio Code - Code Editing. Redefined 【参考】: Debuggers Extensions - Visual Studio Code

VS Code Serverが登場!インストール方法や使い方・開発方法を解説

デバッガを活用してプログラミングの精度を高めよう

img_debuggertowa_04

この記事では、デバッガの概要、デバッグの目的やデバッガの機能、代表的なデバッガの使い方などについて解説しました。システム開発に関わるエンジニアを悩ませるバグはソフトウェアの品質を低下させるだけではなく、時にはシステムダウンを招き、多くの人に多大な迷惑を及ぼします。

このバグをできるだけなくすことがソフトウェアの品質を担保する上で大変重要です。そのためには、エンジニアとしてデバッガに関するスキルを高める必要があります。記事を読まれた皆さんは、精度の高いソフトウェアを目指して、ぜひデバッグに強いエンジニアを目指してみてください。

デバッガーの仕事はつらい?実はやりがいがある理由と転職で知っておきたいことを解説
気になる人のXをフォローしよう!
アンドエンジニア公式LINEでは
新着記事やエンジニアに役立つ情報をお届け!
日々のキャッチアップをお手伝いします!
マイナビITエージェント

編集部オススメコンテンツ

Sponsored
【年収±診断】6つの質問に答えて、真の市場価値をチェック!
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

お問い合わせ・情報提供
はじめて転職される方へ
SE・システムエンジニア(IT/通信/インターネット) 求人一覧

編集部おすすめコンテンツ

Sponsored
【年収±診断】6つの質問に答えて、真の市場価値をチェック!
マイナビITエージェント
Sponsored

アンドエンジニアへの取材依頼、情報提供などはこちらから

Powered by マイナビ AGENT