记录一些奇技淫巧,方便查阅
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 | %DebugPrint(obj) // 输出对象地址 |
使用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 允许手动执行垃圾回收机制