Reporting and analyzing crashes (segfaults)

ジュリアを壊すことに成功しましたね。おめでとうございます!ここには、何かがうまくいかないときに遭遇する一般的な症状に対処するための手順がまとめられています。これらのデバッグ手順の情報を含めることで、セグメンテーションフォルトを追跡したり、スクリプトが予想よりも遅く実行される理由を理解したりする際に、メンテナが大いに助けられるでしょう。

このページにアクセスするよう指示された場合は、あなたが経験している症状に最も合致するものを見つけ、要求されたデバッグ情報を生成するための指示に従ってください。 症状の表:

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上でjuliarrの下で自動的に実行し、クラッシュ後にトレースを共有する機能が含まれています。これは、そのようなクラッシュをデバッグする際に非常に役立ち、JuliaLang/juliaリポジトリにクラッシュの問題を報告する際には強く推奨されます。juliarrの下で自動的に実行するには、次のようにします:

julia --bug-report=rr

ローカルで rr トレースを生成するが、共有しない場合は、次のようにします:

julia --bug-report=rr-local

この内容はLinuxでのみ動作することに注意してください。Time Travelling Bug Reportingに関するブログ投稿には、さらに多くの詳細が記載されています。

Glossary

このガイドでは、いくつかの用語が略語として使用されています:

  • <julia_root>は、Juliaソースツリーのルートディレクトリを指します。例えば、basedepssrctestなどのフォルダが含まれている必要があります.....