注:本人编译环境为macOS 10.15.4 Xcode 11.5
一 下载源代码以及编译debug版本
-
按照官方文档下载dart源代码以及编译工具 (注意dart的编译环境使用的python2)
-
切换到sdk目录下,编译dart的debug版本
./tools/build.py --mode debug --arch x64 create_sdk
编译后的dart可执行文件
dart 即dart虚拟机采用jit模式运行,可以运行dart源代码,kernel(ast序列化后的产物),字节码
dart_precompiled_runtime即aot运行时环境,无法编译源码, 只能够运行aot文件,flutter打包relase时装载的就是这个dart。
- 生成compile_commands.json文件
# 目的是为了vscode能够识别源代码方便代码跳转、补全等功
# compile_commands.json里面记录了每一个源代码文件对应的编译命令
# 待编译完成后切换到编译目录
cd xcodebuild/DebugX64
# 生成compile_commands.json
ninja -t compdb > compile_commands.json
二 vscode 必备插件
C/C++ Dart Python GN语法高亮(推荐安装)三 配置vscode
-
vscode打开sdk目录并创建.vscode文件夹
-
.vscode目录下创建c_cpp_properties.json文件, 内容如下:
{
"configurations": [
{
"name": "Mac",
"defines": [
],
"macFrameworkPath": [
"/System/Library/Frameworks",
"/Library/Frameworks"
],
"compileCommands": "${workspaceFolder}/xcodebuild/DebugX64/compile_commands.json",
"intelliSenseMode": "clang-x64",
"compilerPath": "/usr/bin/clang",
"cStandard": "c11",
"cppStandard": "c++17"
}
],
"version": 4
}
-
使用lldb调试dart源代码
当前没有任何调试配置
这时候就会在.vscode 生成一个luanch.json文件
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(lldb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "输入程序名称,例如 ${workspaceFolder}/a.out",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "lldb"
}
]
}
修改program的值, 由于移动端flutter的使用的aot runtime模式,所以我主要分析这块的代码。
"program": "${workspaceFolder}/xcodebuild/DebugX64/dart_precompiled_runtime"
接着在/runtime/bin/main.cc的main函数打断点试试看
打断点
启动!
糟糕报错了! 估计是路径出错了
Could not load source '../../runtime/bin/main.cc': 'SourceRequest' not supported..
luanch.json新增一个路径映射的配置
"sourceFileMap": {
"../../": "${workspaceFolder}/"
}
完整的luanch.json文件
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(lldb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/xcodebuild/DebugX64/dart_precompiled_runtime",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "lldb",
"sourceFileMap": {
"../../": "${workspaceFolder}/"
}
}
]
}
在运行一次试试
ok! 现在可以愉快的调试源代码了
网友评论