- 面向 JDK 23 的 GraalVM(最新)
- 面向 JDK 24 的 GraalVM(抢先体验)
- 面向 JDK 21 的 GraalVM
- 面向 JDK 17 的 GraalVM
- 存档
- 开发版本
调试适配器协议
GraalVM 支持调试以任何支持语言(JavaScript/TypeScript、Python、R 或 Ruby)编写的访客语言应用程序,并提供 调试适配器协议 (DAP) 的内置实现。根据定义,调试适配器协议用于标准化调试组件和具体调试器或运行时之间的“通信”。这使您能够将兼容的调试器(如 Visual Studio Code (VS Code))附加到 GraalVM。
要打开一个提供调试适配器协议的调试器端口,您需要将 --dap
选项传递给命令行启动器。调试适配器协议的使用类似于 GraalVM 运行时中现有的 Chrome DevTools 协议实现
--dap.Suspend=false
:禁用在第一行源代码处暂停执行,默认情况下启用。--dap.WaitAttached
:在调试器客户端连接之前不执行任何源代码。默认值为 false。--dap=<[[host:]port]>
:在与默认端口(<host>:4711
)不同的端口上启动调试器。
然后,您需要一个 DAP 客户端连接到打开的 DAP 端口。将使用 VS Code 作为示例。
1. 将此 Node.js 应用程序保存在名为 App.js 的文件中
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => {
res.send('Hello World!')
})
app.get('/neverCalled', (req, res) => {
res.send('You should not be here')
})
app.get('/shutdown', (req, res) => {
process.exit();
})
app.listen(port, () => console.log(`Example app listening on port ${port}!`))
2. 在保存文件的目录中安装 express
模块依赖项
$JAVA_HOME/bin/npm install express
3. 使用 DAP 启用运行应用程序
$JAVA_HOME/bin/node --dap App.js
[Graal DAP] Starting server and listening on localhost/127.0.0.1:4711
4. 启动 VS Code,新安装且没有扩展
code .
5. 在 VS Code 中打开 App.js 源代码,并在其中设置断点,例如在第 6 行(res.send('Hello World!')
)设置。
6. 导航到“查看” > “运行” 以创建启动配置(Ctrl+Shift+D):
7. 然后使用以下内容创建 launch.json 文件
{
"version": "0.2.0",
"configurations": [
{
"name": "Attach",
"type": "node",
"request": "attach",
"debugServer": 4711
}
]
}
8. 开始调试 (F5)。
另一种方法是使用安装了 GraalVM 扩展的 VS Code。按照 Node.js 和 JavaScript 调试 中描述的步骤操作,直接从 VS Code 启动要调试的应用程序。从 VS Code 调试访客语言应用程序时,用户可以通过将相应调试配置中的协议属性设置为 chromeDevTools
或 debugAdapter
来选择要使用的协议。要在这种情况下连接到打开的 DAP 端口,launch.json 的内容应为
{
"version": "0.2.0",
"configurations": [
{
"type": "graalvm",
"request": "launch",
"name": "Launch Node App",
"outputCapture": "std",
"protocol": "debugAdapter",
"program": "${workspaceFolder}/App.js"
}
]
}
使用调试适配器协议而不是 Chrome DevTools 的优势在于:(1)它对 Visual Studio Code (VS Code) 来说是“本地的”,这意味着它不需要任何中间转换,以及(2)它支持多线程,这在调试(例如,Ruby 应用程序)时可能特别有用。