ブラウザで実行されているコードのインタラクティブなデバッグ機能を実装しています。「ブレークポイント」に到達したら、デバッガーを呼び出して、必要なアクションを待つ必要があります。これには、もちろん「続行」コマンドが含まれている場合があり、スクリプトの実行がさらに進みます。
これを行うために、長いポーリング手法を使用してこれらの「デバッグ」要求を処理する小さなnode.jsWebサーバーを作成しました。デバッガーインターフェイスは別のブラウザーウィンドウで実行されており、node.js Webサーバーと通信するため、コマンドを他のブラウザーからデバッグ中のスクリプトに効果的に送信できます。
デバッグ中のスクリプトの「停止」は、コマンドの受信for(;;)
時に終了できるループで最大N秒かかる同期要求を使用して実装されます。"cont"
プログラマーが制限内でデバッガーインターフェイスを使用してコマンドを送信しない場合、サーバーは自動的に「待機」応答を送信し、スクリプトは無限ループのままになります。
しばらくするとブラウザ(この場合はChrome)がダイアログをポップアップして、デバッグ中のスクリプトがスタックしていることを通知し、スクリプトを強制終了するためのオプションを提供することを除いて、すべてがうまく機能します。これは、Nの値に関係なく発生します。
ブラウザにスクリプトを強制終了せずにコマンドを待つ方法はありますか?タイムアウトを変更できますか?
ブラウザでプログラミングすることが不可能な場合に通常行われるようなコールバックロジックを使用するようにスクリプトを変更することに注意してください(ジェネリックプログラムで完全なCPS変換を実行することについて話していて、そこに行きたくない場合を除きます)。