2016-12-06 8 views
1

私はこのゲームをデバッグしようとしています。 forループで何か問題があり、それが何であるかわからない。基本的には、ユーザーが準備完了をクリックした後、キャンバス上に矩形を生成させようとしています。論理エラーをデバッグする方法は何ですか?それをカナケナディでやっている。ロジックエラーをデバッグまたは絞り込む方法は?

私はdrawRects関数を印刷します。コンソールは無限ループを示し、forループを指します。 snippet1

私が準備完了をクリックすると、毎回コンソールが1ずつ増加し、levelUp機能が動作していることがわかります。

snippet2

私は十分ではないため、別の担当者リンクを投稿カントが、私はrandomRectsをprintlnをするとき、何もコンソールに表示されません。

したがって、levelUp関数は機能するがランダムな四角形は表示されないので、私のforループで何か問題があると推測することは安全だと思います。問題を絞り込むために使用できる他のデバッグ手法は何ですか?

+0

最初のリンクでは '.push(randomRects)'、2番目に '.push(randRect)'になります。それはどれでしょうか?そして、あなたが推進しているものはどこに定義されていますか?あなたは '.push(randRect())'(関数を呼び出す)を試すべきですか? –

+0

私はそれがどんなべきであるか分からない、私は本質的に推測していた。 'var randomRects = [];'は2行目で定義されたグローバル変数です。私は 'randomRects.push(randRect());'しようとしましたが、何もしません。 randRectは、ランダムなx、y、幅、高さ、および色を含む定義済みの関数です。 – Smokeyflo

+0

従来のデバッグ方法では、 'for'ループを入力する直前のように、特定の変数の値をクリティカルポイントでチェックするために' console.log() 'をコードに配置します。あなたのケースでは、あなたのループの1つが、オブジェクトの 'length'プロパティをチェックする条件を持っていることに気付きました。そのプロパティの値が 'undefined'か何か変わった場合は、常にfalseを返して無限ループを作成できます。私があなたのケースで行う最初のことは、自分の変数が存在することを二重にチェックすることです(それらは '!== undefined'です)、必要なプロパティも存在し、 –

答えて

1

問題のデバッグは、コードが行っていることを正確に把握することによって行います。

それを行うには、いくつかの方法があります。

は、あなたの頭を使用してください。これは防衛の第一線です。あなたの頭のコードを実行するか、紙と鉛筆でコードを実行します。あなたの入力にいくつかの値の例を使用し、行ごとに歩いて、コードが何をするかを見てください。大声で話し、物を書いて、これを何度も繰り返してください。これはプログラマであることの大きな部分です。

コンソールを使用します。処理にはprintln()機能があり、ブラウザのJavaScriptコンソールに移動する必要があります。これはあなたの新しい親友です。このように、あなたが知りたい任意の変数の値をプリントアウト:

println("x: " + x); 

または単純なprintln("here")if文内そのif文が実行されているwhetehrを伝えることができます。アプローチ1と組み合わせて、すべての仮定を実際にチェックしてください。

デバッガを使用してください。それ以外の場合は、デバッガでコードをステップ実行します。これは、基本的にコンピュータを使用して最初の2つのアプローチを実行することです。

実際には、上記のすべての組み合わせを使用して問題をデバッグします。しかし、基本的な考え方はこれです。コードが何をしているのかを理解する必要があります。頭や紙のコードを最初に実行し、何かの前提や何かを印刷することで確実ではないことをテストします。

関連する問題