记录一些奇技淫巧,方便查阅

0.调试环境配置

v8调试环境可以使用v8安装目录下的/tools/gdbinit并将它加入根目录下.gdbinit配置里,修改.gdbinit配置

1
sudo gedit ~/.gdbinit

添加配置(可以配合其他gdb插件如pwndbg使用),

1
source path/to/gdbinit

使用gdb调试时可以先加载要调试的d8文件,然后设置启动参数

1
set args --allow-natives-syntax xxx.js

其中xxx.js可以在要调试的地方设置输出点和断点

1
2
%DebugPrint(obj)    // 输出对象地址
%SystemBreak() // 触发调试中断

使用d8 –help | grep print可以查看d8的辅助调试命令,以下纪录一些常用的

1.job addr查看addr处的js数据类型结构体

2.–print-ast 查看v8生成的抽象语法树

3.–print-bytecode 查看生成的字节码

4.–trace-parse 查看v8解析编译代码的顺序和生成时间(v8解析js代码时并没有解析编译全部代码,因为不是所有代码都会马上执行,使用此命令可以查看js中v8立即运行的解析编译的代码部分)

5.–trace-opt-verbose 查看代码优化情况和优化原因,–trace-deopt 查看代码去优化的情况和原因

6.–print-opt-code 查看优化过的汇编代码(%OptimizeFunctionOnNextCall())

7.–trace-gc 查看gc

8.–trace-ic 查看函数使用的对象类型

9.–code-comments 优化代码注释

10.–trace-bailout 查找不能被优化的代码

11.–expose-gc 允许手动执行垃圾回收机制