2

jsinterp.cpp ファイルを編集して、SpiderMonkey でスレッド化されたデバッグ ダンプを有効にしようとしています。基本的に、私がやろうとしていることは次のとおりです。

  1. Interpret() のメイン ループが始まる前に JSScript をキャッチします。
  2. 別のスレッドを開きます。
  3. そのスレッドで、スクリプトを使用して js_Disassembly を呼び出し、マシン コードを取得します。
  4. マシン コードをファイルに書き込みます。

スレッド化されたバージョンを試す理由は、単純にパフォーマンスの問題です。disassmeble を実行して出力を同じスレッドに書き込むと、一部のアドオンが「応答しなくなります」。単一のスレッドである程度の出力を取得できますが、遅すぎます。

スレッドの作成については、 https://developer.mozilla.org/en/Making_Cross-Thread_Calls_Using_Runnablesのチュートリアルに従いました。しかし、ビルドすると、11 の「未解決の外部シンボル エラー」に直面しました。再びグーグルで調べたところ、#define XPCOM_GLUE 1 で XPCOM_GLUE を設定することがわかりました。ただし、今回は「基本クラス nsRunnable が定義されていません」という新しい問題に直面しています。これに対する解決策が見つかりません。

どんな助けでも大歓迎です。ありがとう、

4

1 に答える 1

0

これに別のスレッドを安全に使用することはできません。ガベージ コレクションはメイン スレッドで実行され、あなたの下からアウトを収集する可能性がありJSScriptます。その後、プロセスがクラッシュします。

js_Interpretは、SpiderMonkey がインタープリターに入るたびに呼び出されます。これは、ブラウザーが<script>関数またはonclick=イベント リスナーを実行しているか、単に呼び出しているかにかかわらずです。そのため、おそらく同じスクリプトを何度もダンプすることになります。多分それがとても遅い理由です。代わりに、コンパイル時にバイトコードをダンプすることを検討してください。

于 2012-04-25T16:35:36.757 に答える