简介
FIBJS 在不同平台上都可以支持使用 clang 编译, 并且在 Posix 系统下推荐使用 clang, 不过在 Windows 环境下默认使用 VC++ 编译.
本文以 Windows 环境为例, 介绍如何在 Visual Studio Code 中,
- 使用 VSC 的扩展 codeLLDB 调试使用 clang 编译的 Debug 版 FIBJS
- 使用 VSC 自带的 Windows C++ Debugger 调试使用 VC++ 编译的 Debug 版 FIBJS
使用 Clang 编译
参考 官方的环境安装指南 , 确保你本地有:
- Visual Studio 2019 (With C++)
- Clang/LLVM >= 10, 可以从 LLVM 官方网站下载安装
- 确保
clang.exe
,lldb.exe
等命令在全局 PATH 中
- 确保
- Git Bash, 从 Git 官方网站下载 Git 安装, 并启用 Git Bash
- Visual Studio Code 中安装扩展 CodeLLDB
在本文中, 我们会在 Visual Studio Code 的集成式终端下使用 Git Bash, 你可以参考这篇文章将你的 Git Bash 集成到 Visual Studio Code 中
做好准备工作后, cd 到你 fibjs 项目下. 通过项目目录下的 ./build
脚本来编译. 如果你感兴趣, 可以运行 ./build --help
来了解其支持的选项:
release
/debug
: 指定编译类型, 默认为release
i386
/amd64
/arm
/arm64
/mips
/mips64
/ppc
/ppc64
: 指定编译结果要支持的目标架构, 默认与当前系统的架构一致. 比如在 Windows 64bit 上是amd64
,在 macOS intel 上是amd64
, 在 macOS M1 上是arm64
clean
:会清理掉本地的 cpp 编译 out 目录和 bin 目录-j
:指定编译时要使用的 CPU 核心数量. 默认为当前 {CPU 核心数的 * 4}--use-clang
: 仅对 Windows 有意义, 强制使用 clang 来编译
执行 ./build debug -j24 --use-clang
以开始编译 Debug 版本的 fibjs:
编译会耗一定的时间, CPU 的核心数和线程数越多编译越快, 我们可以去接杯水, 并放一首张敬轩的《断点》, 然后等待编译完成. 编译好之后你可以得到类似于右图的结果:
编译好后, 即可使用 Visual Studio Code 来调试 Debug 版本的 fibjs. 在项目下添加 .vscode/launch.json
文件, 并写入一下内容:
1 | { |
注意, 确保你的 Visual Studio Code 已经安装 CodeLLDB 扩展, 检查一下在之前的准备工作阶段你是否安装它. 然后我们就可以开始使用 lldb 来调试:
- 在 Visual Studio Code 中, 打开
program/src/fibjs.cpp
, 在 33 行旁边加一个 breakpoint, 启动调试 - 在 VSC 侧边栏中切换到 Debug 工具, 在调试栏上点击我们通过
.vscode/launch.json
定义的 “Debug FIBJS”
该调试动作相当于在 LLDB 上下文下执行 ./bin/Windows_amd64_debug/fibjs ./test
, 由于我们在 fibjs 程序启动的必经之路上打了个断点, 所以 Visual Studio Code 会在此处停下:
使用 VC++ 编译
在 Windows 上, 我们也可以单独使用 VC++ 编译. 参考 官方的环境安装指南, 确保你本地有:
- Visual Studio 2019
我们将使用 VS 提供的开发者终端 (Developer Command Prompt) 来编译
在 Prompt 中 cd 到 fibjs 项目目录下. 我们将使用 .\build.cmd
脚本来编译. 如果你感兴趣, 可以运行 .\build.cmd --help
来了解其支持的选项:
这里的各个选项和上文中提到的 Bash 版本的 ./build
是一致的, 不再赘述.
执行 .\build.cmd debug
以开始编译 Debug 版本的 fibjs. 编译会耗费一定的时间. 编译好之后你可以得到类似于下面右图的结果:
接下来, 我们就可以调试这个编译好的 VC++/debug 版 fibjs. 这里我们使用 Visual Studio Code 自带的 Windows Debugger 来调试的方法.
在项目下添加 .vscode/launch.json
文件, 并写入一下内容:
1 | { |
- 在 Visual Studio Code 中, 打开
program/src/fibjs.cpp
, 在 33 行旁边加一个 breakpoint, 启动调试, - 在 VSC 侧边栏中切换到 Debug 工具, 在调试栏上点击我们通过
.vscode/launch.json
定义的 “Debug FIBJS”
该调试动作相当于在 VSC 自带的 cpp debugger 上下文下执行 .\bin\Windows_amd64_debug\fibjs.exe .\test
, 由于我们在 fibjs 程序启动的必经之路上打了个断点, 所以 Visual Studio Code 会在此处停下:
结语
总结一些注意点:
- 要调试 fibjs, 需要编译为 Debug 版本, 否则无法通过断点来调试
- 我们可以使用 Visual Studio Code 自带的 C++ Debugger 来调试, 也可以使用 LLVM 工具集里面的 lldb 来调试.
- LLDB 不仅可以调试 clang 编译的 fibjs, 也可以编译 VC++ 编译的 fibjs.
- 在 Windows 上使用编译时, 在基于 VC++ 编译时, 如果没有特别的目的, 我们不必指定
-j
选项. 由于 VC++ 编译是由msbuild
驱动, 其默认即开启了动态并行编译,msbuild
会自动根据系统的 CPU 资源, 平衡好分配给 VC++ 编译的资源和系统中其它任务的资源.
在 macOS/Linux 环境下, 可以参考 Windows 环境下的调试, 我们同样可以通过 Visual Studio Code + lldb 的组合来调使用 clang 编译的 Debug 版 fibjs, 它们的原理是一样的.