Reporting and analyzing crashes (segfaults)
Julia'yı kırmayı başardın. Tebrikler! Burada, bir şeyler ters gittiğinde karşılaşılan yaygın semptomlar için uygulayabileceğiniz bazı genel prosedürler toplanmıştır. Bu hata ayıklama adımlarından elde edilen bilgileri dahil etmek, bir segfault'u izlerken veya betiğinizin beklenenden daha yavaş çalışmasının nedenini anlamaya çalışırken bakım yapanlara büyük ölçüde yardımcı olabilir.
Eğer bu sayfaya yönlendirildiyseniz, yaşadığınız duruma en uygun semptomu bulun ve istenen hata ayıklama bilgilerini oluşturmak için talimatları izleyin. Semptomlar tablosu:
- Segfaults during bootstrap (
sysimg.jl
) - Segfaults when running a script
- Errors during Julia startup
- Other generic segfaults or unreachables reached
Version/Environment info
Hata ne olursa olsun, hangi Julia sürümünü kullandığımızı her zaman bilmemiz gerekecek. Julia ilk başlatıldığında, bir sürüm numarası ve tarih ile birlikte bir başlık yazdırılır. Ayrıca, oluşturduğunuz herhangi bir raporda versioninfo()
çıktısını (standart kütüphaneden InteractiveUtils
olarak dışa aktarılmıştır) da eklemeyi unutmayın:
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: 128 default, 0 interactive, 8 GC (on 8 virtual cores) Environment: JULIA_PKG_USE_CLI_GIT = true JULIA_PROJECT = @. JULIA_NUM_THREADS = 128
Segfaults during bootstrap (sysimg.jl
)
Segfaultlar, Julia'nın base/
klasöründeki kod derleme sürecinin sonunda make
işleminin bir belirtisi olarak yaygındır. Bu sürecin beklenmedik bir şekilde sona ermesine birçok faktör katkıda bulunabilir, ancak genellikle Julia'nın C kodu bölümündeki bir hatadan kaynaklanır ve bu nedenle genellikle gdb
içinde bir hata ayıklama derlemesi ile hata ayıklanması gerekir. Açıkça:
Julia'nın bir hata ayıklama derlemesini oluşturun:
$ cd <julia_root>
$ make debug
Bu sürecin muhtemelen normal bir make
komutuyla aynı hata ile başarısız olacağını unutmayın, ancak bu, gdb
'ye doğru geri izlemeler almak için gereken hata ayıklama sembollerini sunan bir hata ayıklama yürütülebilir dosya oluşturacaktır. Sonra, gdb
içinde bootstrap sürecini manuel olarak çalıştırın:
$ cd base/
$ gdb -x ../contrib/debug_bootstrap.gdb
Bu, gdb
'yi başlatacak, Julia'nın hata ayıklama sürümünü kullanarak bootstrap sürecini çalıştırmaya çalışacak ve (ne zaman olursa olsun) bir segfault oluşursa bir geri izleme (backtrace) yazdıracaktır. Tam geri izlemeyi almak için birkaç kez <enter>
tuşuna basmanız gerekebilir. Geri izleme ile birlikte gist oluşturun, version info ve aklınıza gelebilecek diğer ilgili bilgileri ekleyin ve yeni bir issue açın ve giste bir bağlantı ekleyin.
Segfaults when running a script
Prosedür, Segfaults during bootstrap (sysimg.jl
) ile çok benzer. Julia'nın bir hata ayıklama derlemesini oluşturun ve scriptinizi hata ayıklanmış bir Julia süreci içinde çalıştırın:
$ cd <julia_root>
$ make debug
$ gdb --args usr/bin/julia-debug <path_to_your_script>
Not edin ki gdb
burada, talimatlar bekliyor olacak. Süreci çalıştırmak için r
yazın ve segfault oluştuğunda bir geri izleme oluşturmak için bt
yazın:
(gdb) r
Starting program: /home/sabae/src/julia/usr/bin/julia-debug ./test.jl
...
(gdb) bt
Oluşturun bir gist ile geri izleme, version info ve düşünebileceğiniz diğer ilgili bilgileri ve yeni bir issue açın Github'da bir bağlantı ile gist'e.
Errors during Julia startup
Bazen Julia'nın başlatma sürecinde (özellikle ikili dağıtımlar kullanıldığında, kaynak koddan derlemek yerine) aşağıdaki gibi hatalar meydana gelir:
$ julia
exec: error -5
Bu hatalar genellikle bir şeyin önyükleme aşamasının çok erken bir aşamasında düzgün bir şekilde yüklenmediğini gösterir ve neyin yanlış gittiğini belirlemenin en iyi yolu, julia
sürecinin disk etkinliğini denetlemek için harici araçlar kullanmaktır:
Linux'ta
strace
kullanın:$ strace julia
OSX'te
dtruss
kullanın:$ dtruss -f julia
Create a gist with the strace
/ dtruss
output, the version info, and any other pertinent information and open a new issue on Github with a link to the gist.
Other generic segfaults or unreachables reached
Belirtilen diğer yerlerde, julia
'nın rr
ile izler oluşturma konusunda iyi bir entegrasyonu olduğu belirtilmiştir; bu, Linux'ta, bir çökme sonrası julia
'yı otomatik olarak rr
altında çalıştırma ve izleri paylaşma yeteneğini içerir. Bu, böyle çökme durumlarını hata ayıklarken son derece faydalı olabilir ve JuliaLang/julia deposuna çökme sorunları bildirilirken güçlü bir şekilde teşvik edilmektedir. julia
'yı otomatik olarak rr
altında çalıştırmak için:
julia --bug-report=rr
Yerel olarak rr
izini oluşturmak, ancak paylaşmamak için şunları yapabilirsiniz:
julia --bug-report=rr-local
Not edin ki bu yalnızca Linux'ta çalışır. Time Travelling Bug Reporting üzerindeki blog yazısında daha fazla ayrıntı bulunmaktadır.
Glossary
Bu kılavuzda kısayol olarak kullanılan birkaç terim bulunmaktadır:
<julia_root>
Julia kaynak ağacının kök dizinini ifade eder; örneğin,base
,deps
,src
,test
gibi klasörler içermelidir.....