web-dev-qa-db-ja.com

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

このコードにブレークポイントがあります(Firebugを使用)。

_if (validator.formValidate([dom.forumid]))
_

_dom.forumid_が無効な場合、つまりformValidate()の呼び出しがifを返す場合でも、この検証部分をスキップしてfalse句に入るにはどうすればよいですか?それで、どのようにtrueを返すようにできますか?

私はJavaScriptを変更することを考えていましたが、それがどのように行われるのかわかりません。

15
user1534664

Firebugでは、ウォッチ入力フィールドに割り当てを入力してこれを行います

  • 新しい値を割り当てる
  • 期待する値を返す新しい関数を割り当てる

これはChrome〜33(テスト済み)execptでも機能します。割り当てをコンソールに入力する必要があります(実際にはFirefoxでも機能しますが、ウォッチパネルを使用すると高速になります)。

Firebugでは、各ブレークで入力に入力された割り当てを編集して再保存する必要があります。

もちろん、関数を置き換えると、その後の実行でコードが正常に機能しなくなります。これを回避するには、元の値を_window._savedFnX_に保存してから、保存された関数/値を再度割り当ててください。ただし、これは、コードを何度もステップ実行して目的のポイントに到達するまでの保存からの回避策だと思います。悪い状態があることに気づき、コードの残りの部分をテストするために(コードはそうではないが)続行したいと思います。

これらのスクリーンショットを見てください:

コードの背景

スクリーンショットのphotoは、次のコードを持つインスタンスです。

_{
   ...
   _loaded: false, // set to true on some condition
   ...
   isLoaded: function(){
       return this._loaded;
   },
   ...
}
_

メソッドisLoaded()は、常にtrueを返すように例で置き換えられます。 :)

ファイアバグ

(Firebug〜1.12に適用)

  • ブレークポイントで停止
  • コンソールに移動
  • 目的の値を返す関数を変数に割り当てますスコープ内(または到達可能)_[ORANGE]_

_[BLUE]_ボックスは、isLoaded()によって返される値と、置き換えられた関数によって返される値を強調表示します。

Screenshot of Firebug showing the watch panel with replaced function

Chrome

(Chrome〜34.0に適用)

注:in Chromeまた、ソースコードを編集して、変更したバージョンを再実行することもできます。

  • ブレークポイントで停止
  • コンソールに移動
  • 目的の値を返す関数を変数に割り当てますスコープ内(または到達可能)_[ORANGE]_
  • (結果を確認するには更新してください)_[GREEN]_

_[BLUE]_ボックスは、isLoaded()によって返される値と、置き換えられた関数によって返される値を強調表示します。

Screenshot of Chome console showing the console with replaced function and the watch panel with new return value

6

現在(Chrome 67)の時点で、右側の[スコープ]セクションの下にある変数をダブルクリックして、リアルタイムで編集できます。

enter image description here

11
Nick Steele