Reporting and analyzing crashes (segfaults)
ジュリアを壊すことに成功しましたね。おめでとうございます!ここには、何かがうまくいかないときに遭遇する一般的な症状に対処するための手順がまとめられています。これらのデバッグ手順の情報を含めることで、セグメンテーションフォルトを追跡したり、スクリプトが予想よりも遅く実行される理由を理解したりする際に、メンテナが大いに助けられるでしょう。
このページにアクセスするよう指示された場合は、あなたが経験している症状に最も合致するものを見つけ、要求されたデバッグ情報を生成するための指示に従ってください。 症状の表:
- Segfaults during bootstrap (
sysimg.jl
) - Segfaults when running a script
- Errors during Julia startup
- Other generic segfaults or unreachables reached
Version/Environment info
エラーに関係なく、私たちは常にあなたが実行しているJuliaのバージョンを知る必要があります。Juliaが最初に起動すると、バージョン番号と日付が印刷されたヘッダーが表示されます。また、作成するレポートには、versioninfo()
(InteractiveUtils
標準ライブラリからエクスポート) の出力も含めてください。
julia> using InteractiveUtils
julia> versioninfo()
Julia Version 1.11.4 Commit 8561cc3d68* (2025-03-10 11:36 UTC) Build Info: Note: This is an unofficial build, please report bugs to the project responsible for this build and not to the Julia project unless you can reproduce the issue using official builds available at https://julialang.org/downloads Platform Info: OS: macOS (arm64-apple-darwin24.3.0) CPU: 12 × Apple M2 Max WORD_SIZE: 64 LLVM: libLLVM-16.0.6 (ORCJIT, apple-m2) Threads: 1 default, 0 interactive, 1 GC (on 8 virtual cores) Environment: JULIA_PKG_USE_CLI_GIT = true JULIA_PROJECT = @.
Segfaults during bootstrap (sysimg.jl
)
make
プロセスの終わりにおけるセグメンテーションフォルトは、Juliaがbase/
フォルダー内のコードのコーパスを事前解析している際に何かがうまくいかない一般的な症状です。このプロセスが予期せず終了する要因は多岐にわたりますが、JuliaのCコード部分のエラーが原因であることが多く、そのため通常はgdb
内でデバッグビルドを使用してデバッグする必要があります。明示的には:
Juliaのデバッグビルドを作成するには:
$ cd <julia_root>
$ make debug
このプロセスは、通常の make
コマンドと同じエラーで失敗する可能性が高いことに注意してください。ただし、これにより、正確なバックトレースを取得するために必要なデバッグシンボルを gdb
に提供するデバッグ実行可能ファイルが作成されます。次に、gdb
内でブートストラッププロセスを手動で実行します:
$ cd base/
$ gdb -x ../contrib/debug_bootstrap.gdb
このコマンドは gdb
を起動し、Juliaのデバッグビルドを使用してブートストラッププロセスを実行し、セグメンテーションフォルトが発生した場合にバックトレースを出力します。完全なバックトレースを取得するには、<enter>
を数回押す必要があるかもしれません。バックトレース、version info、および考えられるその他の関連情報を含む gist を作成し、GitHubで新しい issue を開いて、gistへのリンクを追加してください。
Segfaults when running a script
手順は Segfaults during bootstrap (sysimg.jl
) と非常に似ています。Juliaのデバッグビルドを作成し、デバッグされたJuliaプロセス内でスクリプトを実行します:
$ cd <julia_root>
$ make debug
$ 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
作成する gist のバックトレース、version info、および考えられるその他の関連情報を収集し、新しい issue をGithubで開き、gistへのリンクを含めてください。
Errors during Julia startup
時折、Juliaの起動プロセス中にエラーが発生することがあります(特にバイナリディストリビューションを使用している場合、ソースからコンパイルするのではなく)次のようなエラーです:
$ julia
exec: error -5
これらのエラーは通常、ブートアップフェーズの初期段階で何かが正しく読み込まれていないことを示しています。何が問題なのかを特定するための最善の方法は、外部ツールを使用して julia
プロセスのディスクアクティビティを監査することです。
Linuxでは、
strace
を使用します:$ strace julia
OSXでは、
dtruss
を使用します:$ dtruss -f julia
gistを作成し、strace
/ dtruss
の出力、version info、およびその他の関連情報を含め、新しいissueをGithubで開き、gistへのリンクを作成してください。
Other generic segfaults or unreachables reached
他の場所でも述べたように、julia
はトレースを生成するためにrr
との良好な統合を持っています。これには、Linux上でjulia
をrr
の下で自動的に実行し、クラッシュ後にトレースを共有する機能が含まれています。これは、そのようなクラッシュをデバッグする際に非常に役立ち、JuliaLang/juliaリポジトリにクラッシュの問題を報告する際には強く推奨されます。julia
をrr
の下で自動的に実行するには、次のようにします:
julia --bug-report=rr
ローカルで rr
トレースを生成するが、共有しない場合は、次のようにします:
julia --bug-report=rr-local
この内容はLinuxでのみ動作することに注意してください。Time Travelling Bug Reportingに関するブログ投稿には、さらに多くの詳細が記載されています。
Glossary
このガイドでは、いくつかの用語が略語として使用されています:
<julia_root>
は、Juliaソースツリーのルートディレクトリを指します。例えば、base
、deps
、src
、test
などのフォルダが含まれている必要があります.....