vscode 调试Lua5.4源码

654 阅读1分钟

配置文件

tasks.json文件中,配置编译和运行的cmd:

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build_multi_c",
            "type": "shell",
            "command": "gcc", 
            "args": [
                "${fileDirname}\\*.c",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe",
                "-g",
                "-Wall", 
                "-static-libgcc",   
                "-fexec-charset=GBK",
                "-std=c11",  //写c++换成c++标准
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "echo": true,
                "reveal": "always",
                "focus": false,
                "panel": "shared"
            },
            "problemMatcher": "$gcc"
        },
        {
            "label": "run_multi_c",
            "type": "shell",
            "dependsOn": "build_multi_c",
            "command": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "group": {
                "kind": "test",
                "isDefault": true
            },
            "presentation": {
                "echo": true,
                "reveal": "always",
                "focus": true,
                "panel": "shared"
            }
        }
    ]
}

launch.json文件中,配置调试lua的命令

{
    "version": "0.2.0",
    "configurations": [
        {//这个大括号里是我们的‘调试(Debug)’配置
        "name": "Debug_multi_c", // 配置名称
        "type": "cppdbg", // 配置类型,cppdbg对应cpptools提供的调试功能;可以认为此处只能是cppdbg
        "request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
        "program": "${fileDirname}\\${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径
        "args": [], // 程序调试时传递给程序的命令行参数,这里设为空即可
        "stopAtEntry": false, // 设为true时程序将暂停在程序入口处,相当于在main上打断点
        "cwd": "${fileDirname}", // 调试程序时的工作目录,此处为源码文件所在目录
        "environment": [], // 环境变量,这里设为空即可
        "externalConsole": false, // 为true时使用单独的cmd窗口,跳出小黑框;设为false则是用vscode的内置终端,建议用内置终端
        "internalConsoleOptions": "neverOpen", // 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡,新手调试用不到
        "MIMode": "gdb", // 指定连接的调试器,gdb是minGW中的调试程序
        "miDebuggerPath": "C:\\Program Files\\mingw64\\bin\\gdb.exe", // 指定调试器所在路径,如果你的minGW装在别的地方,则要改成你自己的路径,注意间隔是\\
        "preLaunchTask": "build_multi_c" // 调试开始前执行的任务,我们在调试前要编译构建。与tasks.json的label相对应,名字要一样
    }
    ]
}

文件结构

下载Lua源码,组织工程的文件结构如下图所示 1.jpg

编译

如果要编译生成lua.exe,则先注释luac.c的main函数。将当前文件打开为lua.c, 其后 Terminal->Run Task...->build_multi_c编译生成lua.exe。