visual c++ c - fc2moeprog.web.fc2.com/m_net_sc/manual/paypal100/... · ワンポイント講座...
TRANSCRIPT
ワンポイント講座
『デバッガで言語
文法を理解する』
M.NET.SC
デバッガで言語仕様(文法)の実体(コンパイラの解
釈と振る舞い)を理解する。プログラムでできること
を習得する。
Visual C++ 使用
C言語
プログラミング入門講座『デバッガで言語文法を理解する』
1
©Maruyama Programming School All Rights Reserved
【著作権について】
本レポート及びソフトウェアは著作権法で保護されている著作物です。
下記の点にご注意戴きご利用下さい。
▼本レポートの著作権は丸山プログラミング塾に属します。
著作権者の許可なく、このレポートの全部又は一部をいかなる手段においても複製、転載、流用、
転売等することを禁じます。
このレポートの開封をもって下記の事項に同意したものとみなします。
このレポートは秘匿性が高いものであるため、著作権者の許可なく、このレポートの全部又は一
部をいかなる手段においても複製、転載、流用、転売等することを禁じます。
著作権等違反の行為を行った時、その他不法行為に該当する行為を行った時は、関係法規に基づ
き損害賠償請求を行う等、民事・刑事を問わず法的手段による解決を行う場合があります。
このレポートに書かれた情報は、作成時点での著者の見解等です。著者は事前許可を得ずに誤り
の訂正、情報の最新化、見解の変更等を行う権利を有します。
このレポートの作成には万全を期しておりますが、万一誤り、不正確な情報等がありましても、
著者・パートナー等の業務提携者は、一切の責任を負わないことをご了承願います。
このレポートを利用することにより生じたいかなる結果につきましても、著者・パートナー等の
業務提携者は、一切の責任を負わないことをご了承願います。
▼著作権者の丸山プログラミング塾の許可を得ずに、本レポートの全部や一部を、印刷物、PDF、
電子データ、ビデオ、インターネットなど、どの場合の伝達手段によっても複製、転載する事を
禁じます。
▼本レポート(PDF ファイル、または PDF ファイルを印刷したもの)を開封、または印刷す
る事により、あなたは、私、丸山プログラミング塾と、以下の契約に同意したとみなします。契
約に同意できない場合は、丸山プログラミング塾にその旨を通知し、本レポートの返却と削除を
求めます。
■一般公開の禁止
本レポートを、あらゆる出版、メディア、インターネットで配付、複製、一般公開、販売をする
事を禁じます。
プログラミング入門講座『デバッガで言語文法を理解する』
2
©Maruyama Programming School All Rights Reserved
INDEX
1 はじめに ................................................................................................................................. 5
1.1 本書の目的 ..................................................................................................................... 5
1.2 疑問や問題は全て解決する ............................................................................................ 5
1.3 名前について .................................................................................................................. 5
1.4 注意事項 ......................................................................................................................... 6
1.4.1 解説が前後します ................................................................................................... 6
1.4.2 画像について .......................................................................................................... 6
1.4.3 分からないと悩む前に先へ進めましょう ............................................................... 6
2 プロジェクト(ソリューション)操作 ................................................................................. 7
2.1 新規プロジェクトの作成 ................................................................................................ 7
2.2 ソースファイルの追加 ................................................................................................... 8
2.3 その他の操作 ................................................................................................................ 10
2.3.1 プロジェクトの保存 ............................................................................................. 10
2.3.2 ソリューションを閉じる ...................................................................................... 10
2.3.3 プロジェクトの開く ............................................................................................. 10
3 プログラム言語の確認 ......................................................................................................... 11
3.1 プログラムの構成要素 ................................................................................................. 11
3.2 変数について ................................................................................................................ 11
3.2.1 ローカル変数 ........................................................................................................ 11
3.3 制御文(ステートメント)の判定 ............................................................................... 11
3.4 関数…プログラムの最小単位 ...................................................................................... 11
3.5 変数とメモリ ................................................................................................................ 11
プログラミング入門講座『デバッガで言語文法を理解する』
3
©Maruyama Programming School All Rights Reserved
3.6 配列、文字列配列の危険性 .......................................................................................... 12
4 デバッグの基本操作 ............................................................................................................ 13
4.1 デバッグモードによるコンパイル&実行 ..................................................................... 13
4.2 ブレークポイント(実行の一時停止機能) ................................................................. 13
4.2.1 ブレークポイントの条件 ...................................................................................... 14
4.3 プログラムの実行 ........................................................................................................ 19
4.4 実行中のブレーク・中断 .............................................................................................. 20
4.4.1 ブレークポイントを忘れて実行した場合 ............................................................. 20
4.4.2 バグ対応:プログラムが終了しない .................................................................... 20
4.5 ブレーク状態(一時停止) .......................................................................................... 21
4.5.1 一時停止マーク..................................................................................................... 21
4.5.2 ブレークしたときのローカル変数の状態です。 .................................................. 21
4.6 ステップ実行 ................................................................................................................ 22
4.6.1 Step1・・・最初のブレークポイント.................................................................. 22
4.6.2 Step2・・・次のブレークポイントへ.................................................................. 24
4.6.3 Step3・・・ステップ実行 .................................................................................... 25
4.6.4 Step4・・・プログラムの完了 ............................................................................ 30
5 プログラム実行状態を確認する方法 ................................................................................... 31
5.1 実行中の変数値を確認する .......................................................................................... 31
5.1.1 初期化なしの場合 ................................................................................................. 31
5.1.2 初期化有りの場合 ................................................................................................. 33
5.2 メモリでローカル変数の値を確認する方法 ................................................................. 35
5.2.1 ローカル変数のアドレスを知る方法 .................................................................... 36
プログラミング入門講座『デバッガで言語文法を理解する』
4
©Maruyama Programming School All Rights Reserved
5.3 実行中の配列変数値を確認する ................................................................................... 37
5.4 文字列配列(正しいコード) ...................................................................................... 40
5.4.1 文字列配列の内容 ................................................................................................. 41
5.4.2 ASCII 文字コード表 ............................................................................................. 41
5.5 文字列配列(不正コード) .......................................................................................... 42
5.6 文字列を関数に渡す方法 .............................................................................................. 43
5.7 配列の仮引数(配列で受け取る)方法 ........................................................................ 44
5.8 間接的に値や計算を調べる方法 ................................................................................... 46
5.8.1 コマンド ウィンドウを使用 ................................................................................. 46
5.8.2 計算結果を確認する方法 ...................................................................................... 46
5.8.3 変数のアドレスを確認する方法 ........................................................................... 46
6 言語文法をデバッガで学ぶ方法 .......................................................................................... 47
6.1 除算と剰余・・・剰余の使い方 ................................................................................... 47
6.2 四則演算 ....................................................................................................................... 48
6.3 インクリメントとデクリメント ................................................................................... 48
6.3.1 インクリメント..................................................................................................... 48
6.3.2 デクリメント ........................................................................................................ 49
6.4 比較式 ........................................................................................................................... 49
6.5 論理演算 ....................................................................................................................... 50
6.6 ビット論理演算 ............................................................................................................ 50
6.7 デバッグ情報出力で計算結果や状態を検証する ......................................................... 50
プログラミング入門講座『デバッガで言語文法を理解する』
5
©Maruyama Programming School All Rights Reserved
デバッガで言語文法を理解する
1 はじめに
言語仕様(文法)とは、コンパイラがどのように解釈し実行モジュールを生成するかというルー
ルです。
1.1 本書の目的
デバッガは、プログラムコードをコンパイラの解釈通りにステップ実行しながら変数状態や処理
の流れを確認するためのツールです。
デバッガを通してコードがどのように解釈されるのか、実行されるのかという事実を学ぶことが
できます。知りたいことを詳細に調べることで、文法を正しく理解しプログラムのテスト方法を
学びます。
こうすればどうなるのか、こんなコードはどう扱われるのか、といった感じで独自の工夫を交え
て試して確認するようにしましょう!
1.2 疑問や問題は全て解決する
「言語基礎」の範囲で疑問や問題は全て解決することです。
文法やプログラムを書いていて、自分の認識と一致しない場合は、事実を優先し「なぜ認識と一
致しないのか」を真剣に考え原因を追及します。決して曖昧にするのではなく、納得できないこ
とは徹底的に調査することが重要です。
1.3 名前について
名前は、プログラムを読みやすくする一つの手段です。短すぎる名前、省略名、など読み辛く誤
解を招きやすくなります。メモリも少なく貧弱なコンパイラ時代の名残はすてて、認識しやすい
名前にするようにしましょう。テストや実験コードでもできるだけこのルールに則るほうが習慣
にしやすくなります。
プログラミング入門講座『デバッガで言語文法を理解する』
6
©Maruyama Programming School All Rights Reserved
1.4 注意事項
1.4.1 解説が前後します
該当ページで記述していなくても後から詳細な説明がある場合がありますので、一通り全体を読
んでから、一つ一つを確認するようにしてください。
1.4.2 画像について
なお本書での画像は、Visual Studio 2010 を使用しています。また、Visual Studio Express 版
では表示されないメニューや対応していない機能が含まれているかもしれません。Express 版を
お使いの方は気にせず無視してください。
1.4.3 分からないと悩む前に先へ進めましょう
何度も繰り返したり、先へ進むことで分かったりすることがあります。詰まったからといって、
そこで停滞しないようにしましょう!
プログラミング入門講座『デバッガで言語文法を理解する』
7
©Maruyama Programming School All Rights Reserved
2 プロジェクト(ソリューション)操作
2.1 新規プロジェクトの作成
プロジェクトを作成後、ソースファイルを追加してプログラムを記述するまでの流れを解説しま
す。
「メインメニュー」-「新規作成」-「プロジェクト」を選択します。
参考:オプション指定で、Visual Studio 起動時に「前回保存時のソリューション」を開くこと
もできます。
プログラミング入門講座『デバッガで言語文法を理解する』
8
©Maruyama Programming School All Rights Reserved
「新しいプロジェクト」ダイアログ
作成するフォルダを指定して、ファイル名記述してプロジェクトを作成します。
2.2 ソースファイルの追加
ソリューション エクスプローラーから「ソース ファイル」上で右クリックして、サブメニュー
「追加」-「新しい項目」を選択します。
プログラミング入門講座『デバッガで言語文法を理解する』
9
©Maruyama Programming School All Rights Reserved
「新しい項目の追加」ダイアログ
1. 左ペインの「コード」を選択します。
2. 右ペインの「C++ファイル(.cpp)」を選択します。
3. 名前の欄に任意のソースファイル名+拡張子は“.c”を入力します。
なお、拡張子”.cpp”は C++用です。
4. 「追加」ボタンをクリックします。
プログラミング入門講座『デバッガで言語文法を理解する』
10
©Maruyama Programming School All Rights Reserved
ファイルが追加された状態の Visual Studio
空のファイルが作成されます。
2.3 その他の操作
以下の操作を確認しておきましょう。操作は一般的なアプリケーションと同じです。
※画面は省略します。
2.3.1 プロジェクトの保存
2.3.2 ソリューションを閉じる
2.3.3 プロジェクトの開く
プログラミング入門講座『デバッガで言語文法を理解する』
11
©Maruyama Programming School All Rights Reserved
3 プログラム言語の確認
3.1 プログラムの構成要素
変数、配列、式、判定、制御で構成されます。
3.2 変数について
変数はメモリ上に領域を確保します。デバッガは、変数状態の確認および変数が割り当てられた
メモリを表示する機能があります。
3.2.1 ローカル変数
関数内の変数のことをローカル変数と呼びます。関数の実行が終了すると同時に変数も消去され
るためローカルと呼ばれます。
ローカル変数は、メモリのスタック領域に確保されます。
ローカル変数は、初期化しない場合値は不定(実行時のメモリ値のまま)です。
3.3 制御文(ステートメント)の判定
制御文で、計算結果、変数、数値を判定する場合、0 値を真と判断します。それ以外は偽と判断
します。
3.4 関数…プログラムの最小単位
プログラムの構成要素を一つにまとめたものが関数です。
関数は、別の関数を呼ぶことができます。関数と関数の間には、引数と呼ぶ値を渡すことで柔軟
なプログラムが作れます。関数は、結果を戻り値として返すことができます。
3.5 変数とメモリ
変数(データ)は、全てメモリに保存されます。
メモリのアクセスはアドレスと呼ばれる番地が 0 からの連番です。
プログラミング入門講座『デバッガで言語文法を理解する』
12
©Maruyama Programming School All Rights Reserved
3.6 配列、文字列配列の危険性
配列の操作、特に文字列配列は、プログラム上でバグの元になるため十分注意しましょう。
配列の要素数および次元数は、宣言だけでなく、ロジックとしても明確に記述する必要がありま
す。
プログラムで配列の要素数を取得する術はありません
配列変数の宣言した要素数以上を指定してもエラーにはなりません
C 言語は、配列の要素数は一切関知しません。したがって、配列の要素数は常にプログラ
ムで(超えないように)意識する必要があります。
したがって、プログラムで要素数を 10 個で宣言した場合、10 個以上の配列要素数を絶対
に指定しないようにする必要があります。
文字列は char 型の配列として定義し、終端は NULL であることが暗黙のルールです
(言語仕様ではなく、共通ライブラリの仕様です)。
strlen()関数は NULL 迄の長さを返します。万が一文字列配列の要素数内に NULL が無い
場合、文字列配列の要素数を超えて NULL を探してたまたま見つかった NULL 迄の長さ
を返します(その間に様々な変数が含まれています)。
例えば、その長さ分の領域全てを 0 値で初期化したら・・・0 値で初期化された変数の用途
によってどんなトラブルになるか不定です。・・・プログラムコードをチェックしても見つ
けにくく解決が長期化する可能性がありますので十分に注意しましょう。
プログラミング入門講座『デバッガで言語文法を理解する』
13
©Maruyama Programming School All Rights Reserved
4 デバッグの基本操作
4.1 デバッグモードによるコンパイル&実行
ソースコードのデバッグを行うためには、デバッグモード(上記コンボボックスより「Debug」
を選択)でコンパイル&実行します。
4.2 ブレークポイント(実行の一時停止機能)
ブレークポイントとは、実行時にブレークポイント行に到達したときに一時停止する機能のこと
です。行の左端に表示される●マークがブレークポイント行を示します。
デバッグするためには、一時停止状態にする必要があります。
カーソルを止めたい位置に移動して「F9」(設定/解除)またはメインメニューの「デバッグ」-
「ブレークポイントの設定/解除」を選択します。