使用vscode调试dart虚拟机(宇宙第一IDE非vscode莫属)

注:本人编译环境为macOS 10.15.4 Xcode 11.5

一 下载源代码以及编译debug版本

  1. 按照官方文档下载dart源代码以及编译工具 (注意dart的编译环境使用的python2)

  2. 切换到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。

  1. 生成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

  1. vscode打开sdk目录并创建.vscode文件夹

  2. .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
}

  1. 使用lldb调试dart源代码


    当前没有任何调试配置
新建一个调试配置
选择CDB/LLDB

这时候就会在.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! 现在可以愉快的调试源代码了

你可能感兴趣的:(使用vscode调试dart虚拟机(宇宙第一IDE非vscode莫属))