連載
» 2010年05月28日 10時00分 公開

開発環境を有効に使う目指せ! Cプログラマ(6)(1/3 ページ)

開発環境を使ったプログラミングについて解説します。プログラム上のミス、いわゆるバグを発見するのに役立つデバッガを使ったデバッグの基礎についても学びます。

[長沼立巳, 小山博史,@IT]

 前回は、演算子と式という、プログラムの基本的な要素について学びました。演算子と式を活用することで、さまざまな演算を実行することができます。

 できるようになったことは、すぐに試してみたいものです。今回は、まず、前回までの内容を復習しながら、開発環境を使ったプログラミングの実際に触れてみます。加えて、今後の学習の役に立つ知識をご紹介しましょう。

コンパイルについてもう少し詳しく

 この連載で使用しているPleiadesは、GUIの開発環境としてEclipseを使っています。Eclipseはプラグインという拡張機能をインストールすることで、さまざまな機能を追加できるようになっています。その中でもCプログラミングをサポートするプラグインがCDT(C/C++ Development Tools)というプラグインです。

 EclipseにCDTプラグインをインストールすることで、C言語ファイルを編集するためのエディタや、Cプロジェクトの管理機能、コンパイラやデバッガを利用するための仕組みなどが追加されるようになっています。

 Pleiadesではさらに、CコンパイラとしてMinGWを利用しています。MinGWはGCCをベースに、Windows上で動作するプログラムを開発するためにカスタマイズしたものです。CDTはMinGWを呼び出すための仕組みが備わっていますので、これを利用してEclipse上からCプログラムをコンパイルしているわけです。

 Pleiadesでプログラムをコンパイルしたときの様子を見てみましょう。

Pleiadesでプログラムをコンパイルしたときの様子

 画面はSample4.cをPleiades上で実行したときの様子です。画面左のプロジェクト・エクスプローラー ウィンドウにはプロジェクトに登録されているアイテムが、画面右のウィンドウにはSample4.cのソースプログラムが表示されています。

 画面下のコンソール ウィンドウには、Sample4.cの実行結果が表示されています。このスクリーンショットには表示されていませんが、コンパイルしたときの結果もコンソール ウィンドウに出ています。コンソール ウィンドウにあるモニターのアイコンの右にある下向きの矢印(▼)をクリックしてみましょう。

下向きの矢印(▼)をクリックした画面

 ここからウィンドウに表示するコンソールを選択できます。「C-ビルド[Sample4]」と表示されているコンソールが、コンパイルのときにGCCなどのビルドツールが出力した結果です。切り替えてみると次のように表示されます。

「C-ビルド[Sample4]」に切り替えてみると…

 残念ながら、何も行われていないようです。

 実は、自動ビルドが有効になっているときには、ソースコードを修正した時点でEclipseがバックグラウンドでコンパイルを実行してくれるのです。そのため、プログラムを実行しようとしたときにはすでにコンパイルが終了しています。もう一度コンパイルを実行させるには、プロジェクト・エクスプローラのプロジェクトを右クリックし、現れたメニューから[構成のビルド] → [ビルド] → [すべて]を選びます。

ビルドのログが表示された画面

 やっとビルドのログが表示されました。その中に、「gcc」という文字が見えます。このコンソールには、実際にgccコンパイラ(MinGW)を起動したときの様子が表示されていますので、どのようなコマンドが実行されてコンパイルが行われたのかを知ることができるのです。この例では、ソースコードであるSample4.cと、いくつかのオプションを付けてgccコンパイラを呼び出していることが分かります。

 Eclipseがこのようにコンパイルしているということは、私たちがコンソールを使って同じことをすれば、同じようにプログラムをコンパイルすることができます。そのためにはパスを通すなどの準備が必要ですが、実際にやってみましたので次の図を見てください。

Eclipseを使わずコンパイルした画面

 興味のある方は挑戦してみてください。

コンパイルしたプログラムを実行する

 これまでは、プログラムの実行もPleiades上で行ってきました。もちろん、Pleiadesで作ったプログラムはPleiadesを使わなくても実行することができます。

 Sample4プロジェクトのフォルダを確認してみましょう。プロジェクトは、Pleiadesのworkspaceフォルダにあります。よく分からないときは、Pleiadesのプロジェクト・エクスプローラーで、Sample4プロジェクトを右クリックして[プロパティ]を選ぶと、ロケーションとしてプロジェクトの場所が表示されます。

 プロジェクトの中にあるReleaseというフォルダの下に、ファイルの種類が“アプリケーション”になっているSample4というファイルが見えます。プロパティでファイルの種類を確認すると、.exeになっていることが分かります。

プロパティでファイルの種類を確認

 このSample4.exeはそのまま実行できます。ただ、そのままエクスプローラー上でダブルクリックしても、プログラムは結果を表示してすぐに終了するようになっていますので、ウィンドウがすぐに隠れてしまいます。コマンド プロンプトを開いて、実行してみましょう。

コマンド プロンプトで実行

 無事に実行されたでしょうか。このSample4.exeは、そのままほかのWindows環境へ持っていっても、同じように実行することができます。

 Visual C++の場合もPleiadesと同じようにSample4.exeができあがりますが、実行するときにはバージョンに応じたランタイム ライブラリが必要になります。Visual C++をインストールした環境ではインストールされていますが、それ以外の環境ではインストールされていないこともあります。

 できあがった.exeファイルが実行できないときは、ランタイム ライブラリ(*1)をMicrosoftのWebサイトからダウンロードしてインストールします。そのとき、コンパイルに使ったVisual C++のバージョンを確認し、それに合ったランタイム ライブラリを使います。

(*1) Microsoftのサイトでは“再配布可能パッケージ”としてダウンロードできるようになっています。例えばVisual C++ 2008を使った場合は、“Microsoft Visual C++ 2008 再配布可能パッケージ”を使ってください。


デバッガを使う

 プログラムの作成の半分は、バグとの戦いです。バグは、想定通りに動かないプログラムのミスのことで、優れたプログラマはバグを早く見付け、原因を的確に見付け出し、そして素早く修正することができます。

コラム●バグと仕様

 バグは、「想定通りに動かないプログラムのミス」ですから、想定しているものが何か明確になっている必要があります。要求定義がきちんされていて、その要求を満たすような仕様に対して、プログラムが正しく動作しない場合には、明らかにプログラムのバグといえます。しかし、実際の現場では、仕様がきれいに整理されているとは限りませんから、「この動作はバグか」という点について議論となることがあります。

バグであれば、プログラム作成側のミスですから当然直します。しかし、提示されていた仕様では想定されていなかった入力に対しての結果である場合は、本来はバグとはいえません。想定外なわけですから、これに対応する作業は別作業となります。真に優秀なプログラマは、要求定義から導かれる仕様であることを理解していて、仕様の抜けに対しては、納品前に問い合わせをするか、あらかじめ対応できるようにしておくことができます。例えば、「消費税込みの金額を計算するプログラム」と「合計を1.05倍した値を計算するプログラム」では別の物になります。読者の皆さんも要求定義から理解するようにしましょう。


 バグを修正することを、デバッグと言います。PleiadesやVisual C++などの統合開発環境では、デバッグを支援する機能がたくさんあります。それらを総称してデバッガと言います。特にバグの原因を探るときには、デバッガがとても役に立つのです。

 ここではPleiadesでのデバッグ方法を簡単に説明します。Visual C++や、ほかのデバッガでも同じようなやり方でデバッグをすることができますので試してみてください。

 まず、Pleiadesのデバッグ機能を利用できるようにしましょう。デバッグの時には、デバッグに適した環境とするために、パースペクティブを「デバッグ」に切り替えます。これまで使っていたCプログラミング環境は「C/C++」パースペクティブです。右上のパースペクティブ切り替えボタンから、虫の形をしたアイコンの[デバッグ]を選びます。

 デフォルトの状態では、C/C++パースペクティブでも表示されていたソースコードや「コンソール」などのウィンドウに加えて、「デバッグ」「変数」「ブレークポイント」といったウィンドウが表示されています。

 では、デバッグを実行してみましょう。

 前述の方法でデバッグ パースペクティブに切り替えても構いませんが、C/C++パースペクティブからデバッグ実行することで、自動的にデバッグ パースペクティブへ切り替えることができます。C/C++パースペクティブに戻り、Sample4プロジェクトを右クリックして、表示されたメニューから[デバッグ] → [ローカル C/C++ アプリケーション]を選びましょう。すると、「パースペクティブ切り替えの確認」ウィンドウが表示されますので、[はい]を選ぶとデバッグ パースペクティブへ切り替えられます。

[ローカル C/C++ アプリケーション]を選択

 ここまで手順通り進めると、デバッグ ウィンドウに“中断中”と表示され、ソースコードの “main”の行のところに矢印が付いた状態になります。これは、矢印の行でプログラムの実行が中断されているということを表しています。

デバッグ ウィンドウに“中断中”と表示されている

 さらにここから、デバッグ ウィンドウのツールバーにある、点の上を超えた矢印の形をした[ステップ・オーバー]アイコンをクリックしてみましょう。すると、ソースコード中の矢印の位置が、1つ下の行へ移動したことが分かります。プログラムの実行が次の行へ進みました。

[ステップ・オーバー]アイコンと[再開]アイコン

 さらに進んでいくと、プログラムの最後を超えたところで“No source available”(有効なソースコードがありません)という表示になります。ここから先はデバッグに必要ありませんので、実行を終了しましょう。1行ずつ実行するのではなく、プログラムを止めずに最後まで実行させるためには、黄色の四角と緑の三角の[再開]アイコンをクリックします。

Index

第6回開発環境を有効に使う

Page1
コンパイルについてもう少し詳しく
コンパイルしたプログラムを実行する
デバッガを使う

Page2
printfによるデバッグ
コメント(注釈)を使う
main関数

Page3
字句解析について知る
他人の書いたプログラムを読もう
今回学んだこと


       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。