- 用于 JDK 23 的 GraalVM (最新)
- 用于 JDK 24 的 GraalVM (抢先体验)
- 用于 JDK 21 的 GraalVM
- 用于 JDK 17 的 GraalVM
- 存档
- 开发版构建
GraalVM LLVM 运行时的调试
GraalVM LLVM 运行时支持使用 GraalVM 的 Chrome Inspector 实现,通过 Chrome 开发者工具 进行源代码级(例如 C 语言)调试。这包括对单步执行、断点以及本地和全局变量检查的支持。
要使用此功能,请确保使用 -g
参数编译时启用调试信息,然后编译您的程序。使用 clang
进行编译时,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>
选项指定搜索路径(多个路径可以用 :
分隔)。