私はHTML 5でWebワーカーを扱ってきましたが、それらをデバッグする方法を探しています。 firebugやchromeデバッガーのようなものが理想的です。コンソールやDOMへのアクセスがなく、デバッグが難しいiffyコードに対して、これに対する良い解決策はありますか?
不足しているconsole.logの高速ソリューションとして、throw JSON.stringify({data:data})
を使用できます
Dev ChannelバージョンのChromeは、ワーカーのクライアントページ内でiframeを使用してワーカーをシミュレートする偽のワーカー実装を挿入することにより、ワーカーのデバッグをサポートします。[スクリプト]ペインに移動し、このシミュレーションには特定の制限がありますが、ワーカースクリプトはクライアントページスレッドで実行されるため、ワーカーで長時間実行される操作はフリーズしますブラウザUI。
WebWorkerは、通常のWebページと同じようにデバッグできます。 Chromeはchrome:// inspect /#workersでWebWorkersの開発ツールのデバッグを提供します。
目的の実行中のWebworkerを見つけて、「検査」をクリックします。そのWebworker専用の別の開発ツールウィンドウが開きます。公式の[指示] [2]は確認する価値があります。
chromeデバッガーの[スクリプト]タブで、ワーカーパネルまでスクロールし、[開始時に一時停止]を選択します。これにより、ワーカーをデバッグし、ブレークポイントを挿入できます。別のウィンドウですべて
Chrome v35
以下に示すように、開始の一時停止チェックボックスをチェックします。
ページをリロードすると、新しいウィンドウではありますが、デバッガーはWebワーカーで一時停止します!
編集:Chrome(v39を使用しています)の新しいバージョンでは、ワーカーは独自の[ワーカー]タブではなく[スレッド]タブの下にあります([スレッド]タブは実行中のワーカーがいます)。
self.console.log('your debugging message')
を使用できます
受け入れられた答えは、本当に誰にとっても解決策ではありません。
その場合、FirefoxのWeb Workersでconsole.log
またはconsole.debug
またはconsole.error
を使用できます。 バグ#620935 および バグ#1058644 を参照してください。
chromeを使用している場合は、通常のスクリプトをデバッグするのと同じようにWebワーカーをデバッグできます。そうすると、console.logがタブに出力されます。ただし、ワーカーが共有されている場合は、chrome://inspect
をご覧ください。
特別なヒント:Javascriptを初めて使用する場合、ワーカーを習得するのは非常に難しいため、両方のタイプのワーカー間で一貫したAPIを提供する非常に軽量なラッパーを作成しました。 Worker-Exchange と呼ばれます。
デバッグ目的でワーカーからメッセージ/データにアクセスする簡単な解決策は、ワーカースレッド内からpostMessage()
を使用して、必要なデバッグ情報を返すことです。
これらのメッセージは、親プロセスで「キャッチ」される可能性がありますonmessage
ハンドラー。たとえば、ワーカーからコンソールに返されたメッセージ/データをログに記録できます。これには、ノンブロッキングアプローチであるという利点があり、ワーカープロセスを実際のスレッドとして実行し、通常のブラウザー環境内でデバッグすることができます。このようなソリューションは、ワーカープロセスコードのブレークポイントレベルの検査を有効にしませんが、多くの状況で、デバッグを支援するためにワーカープロセス内から必要なデータを公開する機能を提供します。
単純な実装は次のようになります(関連する抜粋を示します)。
//ワーカーのonmessage
関数スコープ内のどこか(必要に応じて何度でも使用):
postMessage({debug:{message:"This is a debug message"}});
//親のonmessage
ハンドラー内:
myWorker.onmessage = function(event) {
if(event.data && event.data.debug) {
// handle debug message processing here...
if(event.data.debug.message) {
console.log("message from worker: %o", event.data.debug.message);
}
} else {
// handle regular message processing here...
}
};
2016年2月、WebStormは Webワーカーのデバッグ のサポートをリリースしました。
WebStorm JavaScriptデバッガーは、これらのバックグラウンドワーカー内のブレークポイントにヒットできるようになりました。フレームを調べて、以前と同じように変数を探索できます。左側のドロップダウンリストで、ワーカーのスレッドとメインアプリケーションスレッドの間をジャンプできます。
JSON.stringify()の他に、port.postMessage( (new Object({o: object})) )
もあります。たぶん、JSON.stringify
がより役立ちます。
これがお役に立てば幸いです!