独り言

プログラミングの講師をしています。新人研修で扱う技術の解説と個人の技術メモ、技術書の紹介など

【プログラミング全般】デバッグの基本

ここではデバッグについて解説します。

デバッグとは

プログラム(ソフトウェア・アプリケーション)の不具合のことをバグと呼びます。
そしてバグを取り除く(プログラムの不具合を修正する)ことをデバッグと呼びます。
バグは日本語では虫の意味があります。
なぜプログラムの不具合のことをバグと呼ぶかというと、昔、コンピュータの隙間に虫(蛾)が入り込み、コンピュータが正常に動かなくなることがあったそうです。
そこで、リアルに虫を取り除いてコンピュータの不具合を取り除いていたそうです。
その名残で、ソフトウェアの不具合もバグと呼ぶようになり、不具合の修正をデバッグを呼ぶようになったそうです。

プログラムの不具合と言っても色々な種類があります。
プログラムの文法が間違っている場合のエラー、実行したときに発生するエラーもあります。
また、エラーが発生しなくても、プログラムが意図した通りに動かない場合は不具合になります。
(例えば計算結果が想定した通りにならない、など)
そういった不具合の原因を調べて解決していく作業のことをデバッグと呼びます。

デバッグ力の重要性

デバッグの能力はエンジニア(プログラマー)として働いていく上では非常に重要なスキルで、デバッグ力=プログラミング力と言っても過言ではありません。
どんなにプログラミングの知識があって経験のあるエンジニアだとしても、作るプログラムの規模が大きくなると、エラーやバグのないプログラムを作ることは不可能に近いです。
人間はミスをする生き物ですし、どんなに頭の良い人でも1人の頭で考えたことは漏れがある可能性も高く、全体を把握するのも難しいです。
プログラムは人が書く以上バグが混在すると思って作る必要があります。
つまりプログラミングをする中でバグを解決する力というのは、プログラミングの基本的な知識と同じレベルで求められる能力になります。

デバッグ関連用語

デバッガ

大抵のプログラミング言語では、開発環境の中にデバッグをサポートするための機能が組み込まれています。
このような機能のことをデバッガと呼びます。
デバッガを使うと、実行中の処理を途中で止めることができます。
そして、その時点で使用することができる変数の値を確認したり、処理を1行ずつ進めながらどこでエラーが発生するかを確認したりすることができます。

ブレークポイント

デバッガを使うと、プログラム実行中に処理を止めることができますが、ソースコード上のどこで処理を止めるかを事前に設定する必要があります。
その処理を止める場所のことをブレークポイントと呼びます。
ブレークポイントを設定した後、デバッグモードでプログラムを実行すると、処理がブレークポイントに到達した時点で一度処理が止まります。
処理が止まると、その時点で使用することができる変数の中身を確認することができます。
また、そこから処理を再開したり、処理を1行ずつ進める(ステップ実行)ことができます。

ステップ実行

プログラムの処理をソースコードの1ステップずつ実行することをステップ実行と呼びます。
デバッグを行うときによく使用します。
ステップ実行にはステップオーバーとステップインの2つがあります。

ステップオーバー

ステップオーバーはステップ実行の1つです。
ステップ実行をしている中でメソッドや関数を呼び出していることもありますが、ステップオーバーの場合はそのメソッドや関数の中には入りこまず、あくまでも現在実行中のメソッド・関数の中を1行ずつ実行します。

ステップイン

ステップインでは、メソッドや関数を呼び出している場合、呼び出し先の処理の中にも入りこんでステップ実行します。

ステップリターン

ステップリターンでは、現在処理中のメソッドや関数の終了まで処理を実行し、呼び出し元まで戻ります。

デバッグの方法はプログラミング言語・開発環境によって異なりますが、ブレークポイント、ステップオーバー、ステップインといった用語は共通していることがほとんどです。
どの言語、環境であっても、デバッグに慣れることで、他の言語で応用が効くようになります。

標準出力とデバッグ

ほとんどのプログラミング言語では、標準出力(コンソールへの出力)を行う命令が用意されています。
Javaの場合は「System.out.print」メソッド。
JavaScriptの場合は「console.log」メソッド。
PHPの場合はvardump関数など。(これはブラウザへの出力ですが)
これらの出力の命令を駆使して、変数の値を確認することでデバッグをすることもあります。
むしろプログラミングを学習したばかりの頃はこの手法で確認をする方が一般的かもしれません。
デバッガを使ったデバッグは、慣れるまでは面倒に感じます。
しかし、プログラムの規模が大きくなったりすると、デバッガを使ってデバッグする方が圧倒的に効率的になりますので、なれて使いこなせるようにしておきましょう。

言語・環境ごとのデバッグ方法

いくつかの言語・環境のデバッグ方法を紹介します。

JavaScript

JavaScriptWebブラウザデバッグを行うことができます。
Google Chromeの場合、F12、またはCtrl + Shift + I でディベロッパーツールが起動します。
ディベロッパーツールのSourceタブを開くと、現在表示されているWebページ上のJavaScriptソースコードを確認できます。
ソースコードの行数の個所をクリックすると、ブレークポイントを設定することができます。
Webページの読み込みや、画面上のイベントなど、該当のソースコードを実行される処理が走るとブレークポイントで処理を止めることができます。
そこからステップ実行したり、変数の値を確認することができます。