2

我正在尝试通过编辑 jsinterp.cpp 文件在 SpiderMonkey 中启用线程调试转储。基本上,我想做的事情如下:

  1. 在 Interpret() 的主循环开始之前捕获一个 JSScript。
  2. 打开一个单独的线程。
  3. 在该线程中,使用脚本调用 js_Disassemble 以获取机器代码。
  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 回答