GNAT编译器需单独安装:Linux用sudo apt install gnat gprbuild,Windows通过MSYS2装mingw-w64-x86_64-gcc-ada,macOS用brew install gnat;验证需gnat --version和gprbuild --version均成功输出。

确认 GNAT 编译器是否可用
VSCode 本身不带 Ada 编译器,必须先装 gnat 和 gprbuild,否则所有后续配置都无效。Linux 上执行 sudo apt install gnat gprbuild;Windows 推荐用 MSYS2 安装 mingw-w64-x86_64-gcc-ada(不是仅装 gcc),macOS 可用 Homebrew brew install gnat。验证方式:终端运行 gnat --version 和 gprbuild --version,两者都应输出版本号。若只装了 gnat 没装 gprbuild,tasks.json 里调用 gprbuild 会直接报错 command not found。
.vscode/tasks.json 必须用 gprbuild 而非 gcc
Ada 不像 C 那样靠单个 gcc 命令编译,它依赖项目文件(.gpr)和构建工具链。tasks.json 中的 command 字段必须设为 gprbuild,不能写成 gnatmake 或 gcc。常见错误是照搬 C 的配置模板,把 args 设成 ["${file}"] —— 这对 Ada 无效,因为 gprbuild 需要明确指定项目文件路径。
"command": "gprbuild"-
"args": ["-P", "${workspaceFolder}/hello.gpr", "-p"](-p确保自动生成obj目录) - 不要加
-g参数:它已在.gpr的package Compiler段里声明,重复传入可能触发警告
launch.json 的 target 路径必须指向可执行文件,不是 .adb 源码
调试时 target 字段填的是最终生成的二进制路径,不是 hello.adb。GNAT 默认把可执行文件放在 obj/ 下,文件名与项目名一致(不含扩展名)。例如项目名为 Hello,hello.gpr 中 for Main use("hello.adb"),则可执行文件是 obj/hello(Linux/macOS)或 obj/hello.exe(Windows)。若写成 "target": "${file}" 或 "target": "${workspaceFolder}/hello.adb",GDB 会报错 No executable specified。
- Linux/macOS:
"target": "${workspaceFolder}/obj/hello" - Windows:
"target": "${workspaceFolder}/obj/hello.exe" -
miDebuggerPath在 Windows 上必须指向gdb.exe,不是gnat.exe;常见误配为"miDebuggerPath": "C:/msys64/mingw64/bin/gnat.exe",实际应为"miDebuggerPath": "C:/msys64/mingw64/bin/gdb.exe"
AdaCore 插件不提供调试能力,仅补全和语法检查
VSCode 扩展市场里的 AdaCore 插件(官方出品)只负责语言服务:高亮、跳转定义、实时语法校验。它**不包含调试器后端**,也不修改 launch.json 的行为。调试完全依赖 VSCode 的 cppdbg 或 gdb 类型配置,以及系统已安装的 GDB。如果你发现断点不命中、变量显示为 <optimized out></optimized>,大概率是编译时没加调试信息——检查 hello.gpr 中 package Compiler 是否有 for Default_Switches ("Ada") use("-g");,且 gprbuild 确实执行了该开关(可通过 gprbuild -v -P hello.gpr 查看详细命令)。
最易被忽略的一点:GNAT 构建产物默认不带调试符号,哪怕写了 -g,如果 gprbuild 没读到 .gpr 文件里的设置,或者 tasks.json 绕过了项目文件直接调用 gnatmake,生成的二进制就是“黑盒”。调试前务必确认 obj/hello 文件大小明显大于无 -g 版本,且 file obj/hello 输出含 debug 字样。











