在 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> 選項指定搜尋路徑(多個路徑可以用 : 分隔)。

與我們聯繫