2

ブラウザで実行されているコードのインタラクティブなデバッグ機能を実装しています。「ブレークポイント」に到達したら、デバッガーを呼び出して、必要なアクションを待つ必要があります。これには、もちろん「続行」コマンドが含まれている場合があり、スクリプトの実行がさらに進みます。

これを行うために、長いポーリング手法を使用してこれらの「デバッグ」要求を処理する小さなnode.jsWebサーバーを作成しました。デバッガーインターフェイスは別のブラウザーウィンドウで実行されており、node.js Webサーバーと通信するため、コマンドを他のブラウザーからデバッグ中のスクリプトに効果的に送信できます。

デバッグ中のスクリプトの「停止」は、コマンドの受信for(;;)時に終了できるループで最大N秒かかる同期要求を使用して実装されます。"cont"プログラマーが制限内でデバッガーインターフェイスを使用してコマンドを送信しない場合、サーバーは自動的に「待機」応答を送信し、スクリプトは無限ループのままになります。

しばらくするとブラウザ(この場合はChrome)がダイアログをポップアップして、デバッグ中のスクリプトがスタックしていることを通知し、スクリプトを強制終了するためのオプションを提供することを除いて、すべてがうまく機能します。これは、Nの値に関係なく発生します。

ブラウザにスクリプトを強制終了せずにコマンドを待つ方法はありますか?タイムアウトを変更できますか?

ブラウザでプログラミングすることが不可能な場合に通常行われるようなコールバックロジックを使用するようにスクリプトを変更することに注意してください(ジェネリックプログラムで完全なCPS変換を実行することについて話していて、そこに行きたくない場合を除きます)。

4

2 に答える 2

3

firebugなどのブラウザ拡張機能で使用されるJSデバッグインターフェイスを使用せずに、スクリプトを適切に停止することはできません。

現在のようにアクティブ待機でブロックすることは、CPUパワーを大量に消費し、ブラウザー全体をブロックするため(少なくともFirefoxでは)、非常に悪い考えです。

于 2012-05-13T20:36:20.180 に答える
0

実行に時間がかかりすぎるとブラウザが判断したときに、ブラウザがスクリプトを強制終了するのを防ぐポータブル(クロスブラウザ)の方法はありません。また、ネストされたイベントループを開始して、GUIライブラリで通常行われるようなブロッキング操作を実装することはできません。

Chromeで機能するソリューションは、オプションを使用してブラウザを起動することです。

--disable-hang-monitor
于 2012-05-20T08:15:23.007 に答える