Home > SpiderMonkey > [SpiderMonkey] 利用 IonSpew 输出调试信息

[SpiderMonkey] 利用 IonSpew 输出调试信息

SpiderMonkey 中默认提供了 IonSpew, 可以用来输出JIT编译器的内部信息. 使用方法是通过 debug 模式编译 JSShell, 然后在调用 ./js 的时候设置 IONFLAGS 宏. 例如:

JSShell 会在屏幕上输出 IonMonkey JIT 各个编译阶段的 IR 内容, 以及代码生成(CodeGen)的内容. 同时, 还会将完整的  MIR 信息输出到 /tmp/ion.json 和 /tmp/ion.cfg 两个文件中, 分别可以被 IonGraph[1] 和 C1visualizer[2] 图形化的显示.

IonSpew 有一个”通道”的概念, 类似于系统log中的”info”, “verbose”, “error” 等类型, 不同的是 IonSpew 中的通道都是独立的, 没有等级的概念.

可以很方便的在 IonSpew 中建立自己的”通道”, 用于程序的调试或性能分析. 只需要三步:

第一步, 添加通道的名称. 在”mozilla-central/js/src/ion/IonSpewer.h”中找到”IONSPEW_CHANNEL_LIST”宏, 在最后追加一个通道的名字, 这里假设叫”HelloIonSpew”:

第二步, 激活通道. 在”mozilla-central/js/src/ion/IonSpewer.cpp”中找到”ion::CheckLogging()”函数, 照葫芦画瓢的添加两行代码:

第三步, 调用 IonSpew. 在文件中包含”IonSpew.h”, 就可以通过”IonSpew()”输出信息了.

Enjoy. 🙂

[1]: https://github.com/sstangl/iongraph‎

[2]: http://c1visualizer.java.net

  1. No comments yet.
  1. No trackbacks yet.