故障(崩溃)通知及其分析
本文介绍了一些可以针对Julia出现问题时出现的常见症状执行的常见程序。 在报告中包含来自这些调试步骤的信息可以极大地帮助维护专业人员在监视崩溃或试图找出脚本运行速度比预期慢的原因时。
如果您被定向到此页面,请找到与情况最匹配的症状,并按照说明创建请求的调试信息。 症状表:
版本或环境信息
无论错误如何,我们总是需要知道您正在使用哪个版本的Julia。 当Julia首次启动时,会显示一个带有版本号和日期的标题。 在您正在创建的报表中,包括`versioninfo()`函数的输出(从标准库导出 'InteractiveUtils')。
julia> using InteractiveUtils
julia> versioninfo()
Julia Version 1.11.3
Commit d63adeda50d (2025-01-21 19:42 UTC)
Build Info:
Official https://julialang.org/ release
Platform Info:
OS: Linux (x86_64-linux-gnu)
CPU: 4 × 11th Gen Intel(R) Core(TM) i3-1115G4 @ 3.00GHz
WORD_SIZE: 64
LLVM: libLLVM-16.0.6 (ORCJIT, tigerlake)
Threads: 1 default, 0 interactive, 1 GC (on 4 virtual cores)
启动期间崩溃('sysimg.jl`)
Julia构建过程结束时的失败是在对base/文件夹中的大量代码进行初步分析时出错的常见症状。 许多因素可能导致此过程的意外终止,但大多数情况下它与Julia中C代码的一部分错误相关联,因此通常需要在gdb中执行调试构建。 按照以下步骤操作。
创建Julia调试构建。
$cd<julia_root> ⑤进行调试
请注意,此过程很可能会以与通常的"make"embed相同的错误结束,但是,它将创建一个调试可执行文件,该文件将为"gdb"提供获得准确回溯所需的调试符号。 然后在gdb内部手动启动引导过程。
$cd底座/ $gdb-x。./contrib/debug_bootstrap。gdb,gdb
将启动gdb,尝试使用Julia调试构建启动引导过程,如果(当)发生紧急情况,将输出回溯。 您可能需要多次按'<enter>'键才能获得完整的回溯。 创建https://gist …github.com [要旨]与回溯, 版本信息和您想要提供的任何其他必要信息,并打开一个新的https://github.com/JuliaLang/julia/issues ?Q=is%3aopen[the problem]on The GitHub site with a link to gist.
脚本执行期间崩溃
此过程与本节中描述的过程非常相似 Segfaults during bootstrap('sysimg.jl`)。 创建一个Julia调试构建并在正在调试的Julia进程中运行脚本。
$cd<julia_root> ⑤进行调试 $gdb--args usr/bin/julia-debug<path_to_your_script>
请注意,'gdb’将在那里等待指令。 键入’r’以启动进程,键入’bt’以在崩溃时生成回溯。
(gdb) r Starting program: /home/sabae/src/julia/usr/bin/julia-debug ./test.jl ... (gdb) bt
创建https://gist …github.com [要旨]与回溯, 版本信息和您想要提供的任何其他必要信息,并打开一个新的https://github.com/JuliaLang/julia/issues ?Q=is%3aopen[the problem]on The GitHub site with a link to gist.
Julia启动过程中的错误
有时在Julia启动过程中会出现错误(特别是在使用二进制发行版时,而不是从源代码编译时),例如:
$ julia
exec: error -5
这些错误通常表明某些内容在下载的最早阶段未正确加载。 识别问题的最佳方法是使用外部工具在整个过程中审核磁盘的操作。
-
在Linux上’使用’strace'。
$strace朱莉娅
-
在OSX上,使用’dtruss`:
$dtruss-f朱莉娅
创建https://gist …github.com [要点]输出’strace'/'dtruss`, 版本信息和任何其他必要的信息,并打开一个新的https://github.com/JuliaLang/julia/issues ?Q=is%3aopen[the problem]on The GitHub site with a link to gist.
其他常见错误或不可用
如前所述,'julia`与`rr’很好地集成以生成跟踪。 在Linux上,这包括在rr中自动运行julia并在崩溃后交换跟踪的能力。 这在调试此类故障时非常有用,强烈建议在JuliaLang或julia存储库中报告故障时使用。 要在`rr`中自动启动`julia',请执行以下操作。
julia --bug-report=rr
要在本地生成"rr"跟踪但不共享它,您可以执行以下操作。
julia --bug-report=rr-local
请注意,这只适用于Linux。 详细信息可以在博客文章中找到。 https://julialang.org/blog/2020/05/rr /[时间旅行错误报告]。