- 適用於 JDK 23 的 GraalVM (最新版)
- 適用於 JDK 24 的 GraalVM (搶先體驗版)
- 適用於 JDK 21 的 GraalVM
- 適用於 JDK 17 的 GraalVM
- 封存
- 開發版本
在 GraalVM LLVM 執行階段進行除錯
GraalVM LLVM 執行階段支援使用 GraalVM 的 Chrome Inspector 實作,以 Chrome 開發人員工具進行原始碼層級(例如 C 語言)的除錯。這包括單步執行、中斷點以及檢查區域和全域變數的支援。
若要使用此功能,請務必在以 clang
編譯時指定 -g
引數,啟用除錯資訊來編譯您的程式(GraalVM 隨附的 LLVM 工具鏈會自動啟用除錯資訊)。這可讓您逐步執行程式的原始碼,並在其中設定中斷點。
若要開始除錯,請使用 --inspect
選項執行 lli
$JAVA_HOME/bin/lli --inspect <bitcode file>
啟動後,檢測器會在程式的第一個指令暫停執行,並將連結列印到主控台。將此連結貼到 Chrome 的網址列中,就會為您開啟開發人員工具。
中斷點 #
中斷點只能設定在已剖析的函式中。GraalVM 預設只會在首次執行時剖析 LLVM 位元碼檔案中的函式。若要改為搶先剖析函式,並能夠在尚未執行的函式中設定中斷點,您可以使用 lli --llvm.lazyParsing=false
選項。
使用 __builtin_debugtrap()
定義的程式中斷點 #
使用 __builtin_debugtrap
函式定義的程式中斷點可讓您標記程式中您明確希望 GraalVM 暫停程式並切換到除錯器的位置。除錯器會自動在每次呼叫此函式時暫停,如同在呼叫時設定了中斷點一樣。您可以使用此功能快速到達您實際嘗試除錯的程式碼,而不必在啟動應用程式後先尋找並設定中斷點。您也可以指示 Chrome Inspector 不要讓您的程式在執行第一個原始碼層級陳述式時暫停。這樣做時,GraalVM 會改為執行您的程式,直到它在叫用除錯器之前呼叫 __builtin_debugtrap()
為止。若要啟用此行為,您需要傳遞引數 lli --inspect.Suspend=false --inspect.WaitAttached=true
。
尋找原始檔 #
LLVM 位元碼檔案中的除錯資訊包含絕對搜尋路徑,以識別原始碼的位置。如果原始檔沒有移動,應該會自動找到。
如果原始檔已移動或是在不同的電腦上編譯,可以使用 --inspect.SourcePath=<path>
選項指定搜尋路徑(多個路徑可以用 :
分隔)。