产品经理提需求的能力太屌,加上马上进入招聘季了,忙得不行。再忙下去感觉这个系列要太监了(捂脸。

终于抽空研究了下如何在Mac下debug V8,所幸找到了答案。

Run debug build

首先,我们要重新编译V8,因为上次编译的是release版本,并不能用来debug…

只能说官方wiki害人啊!所以重新build:

1
2
3
4
5
6
7
8
# list all build configurations
tools/dev/v8gen.py list

# set debug build
tools/dev/v8gen.py x64.debug

# build
ninja -C out.gn/x64.debug

又是漫长的等待…

Debug V8 by LLDB or GDB

用来断点调试的工具就是GDB这货了!

安装很简单不表,但是安装完后在Mac下是有问题的。

其实官方的wiki里也写了具体的解决方案,但是我照着做了一遍没有成功。

Google大法后发现,原来XCode用来debug的类似这货,只不过叫LLDB,所以macOS的命令行里实际是有LLDB这个东西可以用的。lldb -v看一下,果然有!

PS:如果没有的话估计是没有装XCode Command Line Tool

PPS:如果LLDB也有Code Sign的问题的话,照着GDB的wiki设置下可以解决,反正我是这么解决的

LLDB的命令和GDB很像(NodeJS的debug和他们也很像,看起来还是比较熟悉的),但是命令也稍有区别,具体的命令以及和GDB的区别列举在这里,这两者命令的shortland基本都是差不多的。

OK,现在来试着debug一下之前的v8_hello_world程序。

输入lldb v8_hello_world进入debug shell。(在我的Mac上,实际上这句命令还是有问题的,会报NameError: name ‘run_one_line’ is not defined这个错,但是好像并不影响debug,所以不管它)

然后依次执行以下命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# set breakpoint in main function
b main

# run hello world program
run

# next step
n

...

# step in
s

# step out
finish

这样就可以开始debug了!最后debug效果大概是这样:

开心,总算能愉快debug V8了,万里长征总算走出了第一步。

下一篇应该开始真正开始分析V8代码了,应该会写得正式点。最近太忙,不知道要到什么时候了…