- 适用于 JDK 24 的 GraalVM(最新)
- 适用于 JDK 25 的 GraalVM(早期访问)
- 适用于 JDK 21 的 GraalVM
- 适用于 JDK 17 的 GraalVM
- 存档
- 开发构建
在 GraalVM LLVM 运行时上调试
GraalVM LLVM 运行时支持使用 GraalVM 的 Chrome Inspector 实现通过 Chrome Developer Tools 进行源代码级别(例如,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>
选项指定搜索路径(多个路径可以由 :
分隔)。