11

私は Firebug を使用して JavaScript で何百回もデバッグを行ってきましたが、そこで何が起こっているのかを気にすることはありませんでした。Firebug が JavaScript/DOM デバッグをどのように正確に処理するかを知りたいです。

メソッド内のステートメントにブレークポイントを設定し、デバッグを開始するとします。私はそこで何が起こっているのか知りたいですか?

4

2 に答える 2

8

行をクリックしてブレークポイントを設定すると、ページをリロードした場合に備えて、FirebugはファイルのURLと行番号を記録します。次に、内部データ構造でURL /行を検索して、ブレークポイントを設定するJavascript関数(Mozillaでは「スクリプト」と呼ばれます)を決定します。次に、Mozillaプラットフォーム関数を呼び出して、関数の開始に関連するプログラムカウンターに行番号をマップします。最後に、プラットフォームを呼び出して、プログラムカウンターにブレークポイントを設定します。

スクリプトパネルをアクティブにしたとき、Firebugはプラットフォームにコールバックを登録しました。それらの1つであるonBreakは、ブレークポイントを処理します。プラットフォームがJSコードを実行すると、その内部構造をチェックして、現在のプログラムカウンターにブレークポイントが設定されているかどうかを確認します。その場合、JSの実行を停止し、firebugにコールバックします。

次に、Firebugはブレークポイントを調べて、これが条件付きブレークポイントであるかどうか、このブレークポイントでデバッガーUIをサポートするための正しいデータがあるかどうかなどを判断します。条件に問題がない場合は、デバッグ、WebページのJavascript実行、およびWebページのプラットフォームイベントを一時停止するようにプラットフォームに指示します。次に、ブレークポイントのソースファイルを表示し、その行を強調表示します。状態が良くない場合は、そのまま続行します。

複雑な部分は、プラットフォームがカウンターマッピングをプログラムするための正しい行番号をサポートしていない場合に発生します。たとえば、Firebugには、eval()およびブラウザーで生成されたイベントハンドラーを処理するためのコードがたくさんあります。

私の意見では、このような質問はFirebugニュースグループの方が優れています。

于 2010-08-10T14:47:32.877 に答える
2

Firebug は、デバッガー サービスであるjsdIDebuggerServiceを使用しています。

このページには、 firebug の内部に関する情報と、ソース コードへのリンクが含まれています。すべての詳細を正確に指定しているわけではありませんが、出発点として役立つはずです。

于 2010-08-10T13:52:18.563 に答える