2011-10-27 34 views
35

他の質問と同様、like this onejavascriptデバッグ:変数値の変更を破る方法はありますか?

JavaScriptのデバッガで変数の値を変更する方法はありますか?

私はそれは "時計変数"のようなものだと思いますが、変数への変更が実際に発生したときに呼び出しスタックを表示して一時停止したいと考えています。

代わりに、カスタムセッターで値の設定を上書きし、ブレークポイントを設定することもできますが、残念ながらIE afaikでは機能しません。

UPDATE だから私はC++(GoogleのV8)で書かれたJavaScriptエンジンが同様の何かを持っている可能性があるかもしれないと思ったが、それは持っていないよう行動のこのタイプは、少なくとも、アンマネージコードwritten in C++のために利用可能であることが表示されます私もどちらかしたい。

+0

スレッドを完全に中断する単純な方法は、警告を表示することです。その迷惑なはいですが、実際に何が必要なのか、変数、文字列などを警告できます。火かき棒のようなものを使用し、コードにログがある場合は、アラートを使って簡単にプログラムを進めることができます。 – Ryan

+4

事は、変数がどこで変更されるのかわかりません。別のファイル(またはいくつかのファイルの1つ)で発生する可能性があります。私は、変更箇所を探すために、警告文で自分のコードを捨てるつもりはありません。その時点で、デバッガでコードを1行ずつ進めることもできます。しかし、ありがとう。 – user420667

答えて

16

あなたも、IDEを必要としない - あなたは "Object.watch()" を使用することができます:あなたがいずれかのデバッガを使用する場合は

Object.Watch Tutorial

、私は強くFirebugのをお勧めします。 Chromeでこのライブラリを持つ

http://getfirebug.com/javascript

+4

+1 b/cこれはうまくいくと思います。しかし、私はそれが非標準のjavascript 1.8.6であるブラウザのATM、b/cの多くと互換性があるとは思わない:https://developer.mozilla.org/ja/JavaScript/Reference/Global_Objects/Object/watch – user420667

+0

Haven 'それを試すことができましたが、上記のリンクがsetter/getterメソッドを使用して指定すると、より良いアプローチになる可能性があります。https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Working_with_Objects#Defining_getters_and_setters – GuruM

+8

2013年にはまだブラウザがObject.watch()をサポートしています... –

9

私がいるの成功と、それはすべての主要なブラウザをサポートするためになります。すべてのあなたのJavascriptを、HTMLやCSSについて:-)必要があります。

https://gist.github.com/eligrey/384583

だけ呼び出して、.jsファイルが含ま:

yourObject.watch('someProperty', function() { 
    doWhatYouWant(); 
    debugger; 
    console.write('this too'); 
    alert('Object Changed'); //etc 
}); 
+0

これはよく見えます。 http://stackoverflow.com/a/1848414/420667ありがとう。 – user420667

+0

Chromeを使用して私のために働かなかった。私は最初にGist JavaScriptを実行しました。それから、 'watch(myObject、 'propertyName'、function(){console.log( 'changed!');});'を実行しました。プロパティ値が変更されていても、console.logメッセージは決して出力されませんでした。 – Joncom

+0

watch()を呼び出すときにコンソールのエラーをチェックします。ライブラリが正常に動作するので、ロードしていないか、呼び出しが成功していないと思われます。 – rainabba

-2

私はあなたの質問を誤解している場合、私は知りません。式を見て、Chrome Developer Toolsのjsデバッグセッション中に式が特定の値に達したときに式を停止したい場合は、それはややこしいことです。

チェックしたい値の行にブレークポイントを置き、右クリックして "ブレークポイントの編集..."を選択するだけです。式の入力を促すダイアログが表示され、その値が真のときに実行が停止します。

n = i++;:例えば

、あなたはループを持っていて、その中の変数に1つのユニットを追加すると、変数はループ内の式は次のようになり3に等しいとき、実行を停止したいとしましょう

ブレークポイントをその行に設定し、(ブレークポイントの編集...というメッセージが表示された後に)式をn == 3にする必要があります。コードを実行するとき、変数がその値に達すると、コードはそこで停止します。

ブレークポイントが青色ではなくオレンジ色に変わったため、条件が設定されていることがわかります。

+1

隣接する行にn = i ++(今は2回インクリメントされているループがあります)し、隣接する行にブレークポイントを置かなかった場合、隣接する行でnが3になったときに停止しますか?そうでなければ、これは私が探していたことをしないでしょう。あるいは、nがオブジェクトのプロパティであり、たくさんの場所に設定できる場合、nの1つのセッターに時計を置くと、すべてのファイルのnのすべての設定をカバーするのに十分でしょうか? – user420667

+0

その正確な例を試したことはありませんが、私の知る限りでは、「ブレークポイントの編集...」ダイアログで評価する式はブレークポイントがある行のコードと同じである必要はないので、に置かれる。それは "var equals value"である必要はありません。たとえば、 'i + j <= k * n'のようなものを入れることができます。式をコメント化して無効にすることもできます。あなたのコードの中に 'if(n == 3){dummy = true}'を置いてブレークポイントを 'dummy'行に置くのと同じように動作しますが、ブレークポイントダイアログの" limbo "に保持するだけです。 )自分で試してみてください;) – Pere

+0

私は、式がブレークポイントに当たったときに評価されると信じています。したがって、n = i ++の2行の例では、ブレークポイントが1つだけの場合、ブレークポイントを置いた行とiの初期値によって、n == 3のブレークポイントがヒットしないことがあります。 – user420667

関連する問題