- GraalVM for JDK 23 (最新)
- GraalVM for JDK 24 (早期アクセス)
- GraalVM for JDK 21
- GraalVM for JDK 17
- アーカイブ
- 開発ビルド
デバッグアダプタープロトコル
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. View > Runに移動して、起動構成を作成します(Ctrl+Shift+D):
7. 次に、以下の内容でlaunch.jsonファイルを作成します
{
"version": "0.2.0",
"configurations": [
{
"name": "Attach",
"type": "node",
"request": "attach",
"debugServer": 4711
}
]
}
8. デバッグを開始します(F5)。
もう1つの方法は、GraalVM拡張機能をインストールしたVS Codeを使用することです。Node.jsおよびJavaScriptのデバッグに記載されている手順に従って、デバッグ中のアプリケーションをVS Codeから直接起動します。VS Codeからゲスト言語アプリケーションをデバッグする場合、ユーザーは、対応するデバッグ構成でprotocol属性を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 Dev Toolsよりもデバッグアダプタープロトコルを使用する利点は、(1)Visual Studio Code(VS Code)に「ネイティブ」であり、中間翻訳が不要であること、(2)マルチスレッドをサポートしているため、たとえばRubyアプリケーションをデバッグするのに特に役立つことです。