2012年4月9日月曜日

Flash ActionScript2.0入門ノート: 2.2 スクリプトのデバッグ


(メインページへ)
2.2 スクリプトのデバッグ

スクリプトのシンタックスチェック

スクリプトを入力するアクションパネルにはシンタックスチェック、すなわち書式の間違いをチェックする機能があります。
 アクションパネルの[シンタックスチェック]ボタンをクリックするとシンタックスのチェックが行われ、エラーが見つかった場合には、エラーが見つかった行と内容が出力パネルに表示されます。シンタックスチェックでは、#includeで読み込まれるASファイルの有無と内容のチェックも行います。
 なお、[自動フォーマット]ボタンをクリックしたときにもシンタックスのチェックが行われますが、外部ASファイルのチェックは行われません。

図2-2-1 [シンタックスチェック]ボタンをクリックするとシンタックスエラーの内容が出力パネルに表示されます。

note:
出力パネルの結果はパネル右上のメニューの[ファイルに保存...]でテキストファイルに書き出せます。

・厳密なデータ型チェック
変数や関数の戻り値にデータ型を指定しておくと、シンタックスチェックの際にデータの型もチェックされます。たとえば、次のスクリプトでは変数msgのデータ型はストリングに限定されているので、数値を入力するステートメントはエラーになります。(厳密なデータ型→ p.???)


//データ型エラーになる式
var msg:String = 123;

関数の引数にデータ型を指定することもできます。ただし、データ型のチェックはあくまでもコンパイル時に行われるので、実行時に与えた引数はチェックされません。

//引数のデータ型を指定している関数
function test1(v:Number) {
  var ans = v*2;
  return ans;
}

test1()関数の引数のデータ型をNumberと指定しているので、次の行はコンパイル時にエラーになります

test1("テスト");


として選択されているかリフレッシュを編集

関数の戻り値にデータ型を指定することもできます。関数から戻る値のデータ型を指定できることから、データ型を指定した変数への代入の際などにデータ型を比較できるようになります。

//戻り値のデータ型を指定した関数
function test2():Number {
  var ans = 123;
  return ans;
}

 test2()の戻り値のデータ型はNumberなので、次の式ではmsg変数のString型と一致せずにエラーになります。

var msg:String = test2();

個別リンク | トラックバック

trace()で出力パネルに書き出す

スクリプトの中でtrace()ステートメントを使えば、ムービープレビューの際に変数の値などを出力パネルに書き出すことができます。
たとえば、ステージにムービークリップシンボルのインスタンスを作ってtest_mcと名前を付け、メインのタイムラインのフレーム1に次のフレームアクションを書き込みます。ムービーをプレビューしてインスタンスをクリックすると、クリックするたびにインスタンスの座標が少しずつ移動します。出力パネルには水平、垂直に移動する距離が書き出されます。trace([randx, randy])のようにリストの形式でと複数の値を指定すると、値はカンマ区切りで書き出されます。

sampleファイル→trace.fla

フレームアクション:フレーム1
test_mc.onPress = function() {
  //移動量をランダムに決める
  randx = Math.ceil(Math.random()*60-30);
  randy = Math.ceil(Math.random()*60-30);
  trace([randx, randy]);
  //座標の移動
  this._x += randx;
  this._y += randy;
  trace("移動しました"); //出力→ 移動しました
};

図2-2-2 動作確認の目的で変数の値とメッセージをtrace()を使って出力パネルに書き出します。

個別リンク


何が最適なサーバへの最大接続のために設定されてい

デバッガの活用

デバッガを利用するとインスタンスのプロパティや変数の値などをムービーを実行しながら見張ることができます。デバッガを使うには、制御メニューから[ムービーのデバッグ]を選択します。するとムービーのプレビューが表示され、同時にデバッガパネルも開きます。
[ムービーのデバッグ]を実行した直後はムービーの再生が停止した状態になっています。ムービーが停止した状態でもインスタンスのプロパティなどは値を調べることができます。ムービーの再生を開始するには、デバッガパネルの[続行]ボタンをクリックします。ムービーを再開すると変数の値などの変化をリアルタイムに見ることができます。

sampleファイル→debugger.fla

図2-2-3 [ムービーのデバッグ]を実行した直後は停止した状態になっています。[続行]ボタンで再開します。

デバッガの右にはスクリプトを選んで表示できます。行番号をクリックしてブレイクポイントを打てば、ムービーの再生を一旦停止して変数の値などを確認できます。[続行]ボタンをクリックすれば再びムービーが再開します。ただし、この機能はクラス定義ファイルなどの外部ActionScriptファイルでは使えません。


図2-2-4 ブレイクポイントを打ったステップで一旦停止します。

・デバッガメニュー
また、ムービープレビューを行っている最中にはデバッガメニューが利用できます。デバッグメニューの[オブジェクトのリストアップ]、[変数のリストアップ]を選択すると、オブジェクトや変数の情報が出力パネルに書き出されます。

個別リンク


実行からメインディッシュを削除する方法

Errorクラス

Errorクラスはスクリプト実行時にあらかじめ設定した条件が発生したときに例外処理を行うためのもので、デバッグの目的で利用するものではありません。Flash Playerの実行時エラーのイベントを自動的に処理するというものでもありません。
少し難しいですがここでErrorクラスを利用した例を示しておきましょう。次の例では、テキストフィールドmyURLに入力されたURLをチェックして、URLが空だった場合あるいは"http:"から始まっていないときにエラー処理を行います。エラーがない場合には指定のURLをブラウザで開きます。

sampleファイル→errorurl.fla

フレームアクショント:フレーム1
//webBtnボタンを設定する
webBtn.onRelease = function() {
  try {
    errMsgfld.text = ""; //エラーフィールドのクリア
    var testURL = myURL.text; // URLを取り込む
    var theURL:String = urlcheck(testURL); // URLのチェック
    getURL(theURL, "_blank"); // Webページの移動
  } catch (e_err:Error) {
    errMsg.text = "エラー;" + e_err.message;
  }
};
//URLをチェックする
function urlcheck(url:String):String {
  if (url == "") {
    throw new Error("URLが空です。");
  } else if (url.substr(0, 5) != "http:") {
    throw new Error("URLはhttp:から書いてください。");
  }
  return url;
}


このスクリプトを試すには、ステージにボタン、入力テキスト、ダイナミックテキストを配置し、プロパティインスペクタでそれぞれにwebBtn、myURL、errMsgというインスタンス名を付けます。そして、メインのタイムラインのフレーム1にこのフレームアクションを書き込みます。入力テキストmyURLにURLを書き込んでwebBtnボタンをクリックするとURLがチェックされます。urlcheck()メソッドに渡された引数urlの値が適当な値であるかどうかはif文でチェックします。問題なければ引数urlの値をそのままreturnで戻します。

図2-2-5 URLを入力するフィールドが空のままボタンをクリックしたとき。

図2-2-6 URLが"http:"からはじまっていなかったとき。

このスクリプトで注目する箇所は、webBtnボタンのonReleaseハンドラではtry~catchのブロック、urlcheck()メソッドではthrowです。先にurlcheck()メソッドを見るとわかるように、引数のurlが不適当だった場合にはErrorクラスのインスタンスを生成してそれをthrowしています。throwされたインスタンスはurlcheck()メソッドを呼び出したonReleaseハンドラのcatchブロックが受け取りe_err変数に入いります。e_errインスタンスのmessageプロパティにはErrorクラスでインスタンスを作る際に引数にしたメッセージ文が入ってます。なお、try~catchのブロックの最後に必ず実行するfinallyブロックを付けることができます。

note:
Errorクラスを拡張したカスタムクラスのErrorインスタンスをスローすれば、複数のcatchブロックで個別に受け取れます。その場合は引数のタイプ指定でインスタンスを振り分けます。

個別リンク



These are our most popular posts:

デバッグ技術編

すなわち、メインのプログラムは、大きくしすぎないで、部分的な働きをするいくつかの 関数を呼び出すように構成すべきであり、もし関数が大きくなったら、さらに ... トップ ダウン」の方法は、コードを書くときだけでなく、コードをデバッグするときにも使うべきです 。 read more

デバッガーの使用方法 - Cincom Smalltalk

簡単なプログラムではあまりデバッグをする必要がない場合もありますが、制作者 にとって新傾向のプログラムを作る場合には必ずと言ってよいくらいにデバッグが必要と なると考えた ... ブレークポイントを作成してから、メニューの「デバッグ」/「開始」を選ぶと 、ブレークポイントまで実行し、下のほうの窓に使用している変数の値が表示されます。 ... 上の場合は文字列 DEBUG が定義されているとき (すなわちデバッグモードのとき) printf. read more

Debug

しかし、よくよく話を聞いてみると、どうもその「チェックの仕方」、すなわち「デバッグ方法」 が十分ではないようなんです。なるほど、原因を追究する技術がわからなければ、作った プログラムが正しいかどうか不安になるのは当然です。 複雑な仕組みで動くゲーム ... read more

Emacsの機能を利用したプログラミング、コンパイル、デバッグ

デバッグをする方法として一番わかりやすいのはプログラムのところどころにプリント文( C言語であればfprintfなど)を入れる方法です。 うまく使えばこの方法 ... [ファイル名]に はデバッグしたいプログラム(実行形式、すなわちa.out) を指定します。 ブレークポイント の ... read more

Related Posts



1 コメント:

匿名 さんのコメント...

For anyone whom aren't happy with setting out, yet acquire transferring down into this authoring course of action a lot more profitable, turn back setting out is often very invaluable. http://9cu2iuru90.dip.jp https://imgur.com/a/zpYFmCV http://dew06hmyhk.dip.jp https://imgur.com/a/2NF5fqL https://imgur.com/a/rNoKCrK http://h9it15lz5x.dip.jp https://imgur.com/a/c9IRgNt

コメントを投稿