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
بغض النظر عن الخطأ، سنحتاج دائمًا إلى معرفة إصدار جوليا الذي تستخدمه. عند بدء جوليا لأول مرة، يتم طباعة رأس يحتوي على رقم الإصدار والتاريخ. يرجى أيضًا تضمين ناتج versioninfo()
(المصدر من مكتبة InteractiveUtils
) في أي تقرير تقوم بإنشائه:
julia> using InteractiveUtils
julia> versioninfo()
Julia Version 1.11.5 Commit 760b2e5* (2025-04-14 06:53 UTC) Platform Info: OS: Linux (x86_64-linux-gnu) CPU: 2 × AMD EPYC 7763 64-Core Processor WORD_SIZE: 64 LLVM: libLLVM-16.0.6 (ORCJIT, znver3) Threads: 64 default, 0 interactive, 2 GC (on 2 virtual cores) Environment: JULIA_NUM_THREADS = 64
Segfaults during bootstrap (sysimg.jl
)
تعتبر الأخطاء الفادحة (Segfaults) في نهاية عملية make
لبناء جوليا (Julia) عرضًا شائعًا لحدوث خطأ ما أثناء قيام جوليا بتحليل مجموعة التعليمات البرمجية في مجلد base/
. يمكن أن تساهم العديد من العوامل في وفاة هذه العملية بشكل غير متوقع، ومع ذلك، غالبًا ما يكون ذلك بسبب خطأ في جزء كود C من جوليا، وبالتالي يجب عادةً تصحيح الأخطاء باستخدام بناء تصحيح داخل gdb
. بشكل صريح:
إنشاء بناء تصحيح لـ Julia:
$ cd <julia_root>
$ make debug
لاحظ أن هذه العملية من المحتمل أن تفشل بنفس الخطأ مثل تعويذة make
العادية، ومع ذلك، ستقوم هذه العملية بإنشاء ملف تنفيذي للتصحيح سيقدم لـ gdb
الرموز التصحيحية اللازمة للحصول على تتبعات دقيقة. بعد ذلك، قم بتشغيل عملية التمهيد يدويًا داخل gdb
:
$ cd base/
$ gdb -x ../contrib/debug_bootstrap.gdb
سيبدأ هذا gdb
، وسيحاول تشغيل عملية التمهيد باستخدام بناء جوليّا التصحيحي، وسيطبع تتبعًا للخلف إذا (عندما) يحدث خطأ في الذاكرة. قد تحتاج إلى الضغط على <enter>
عدة مرات للحصول على تتبع كامل للخلف. أنشئ gist مع تتبع الخلف، و version info، وأي معلومات أخرى ذات صلة يمكنك التفكير فيها، وافتح issue جديد على GitHub مع رابط إلى الجست.
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 مع رابط إلى الجست.
Errors during Julia startup
أحيانًا تحدث أخطاء أثناء عملية بدء تشغيل جوليا (خاصة عند استخدام التوزيعات الثنائية، بدلاً من التجميع من المصدر) مثل ما يلي:
$ julia
exec: error -5
تشير هذه الأخطاء عادةً إلى أن شيئًا ما لا يتم تحميله بشكل صحيح في وقت مبكر جدًا من مرحلة الإقلاع، وأفضل رهان لدينا في تحديد ما هو الخطأ هو استخدام أدوات خارجية لمراجعة نشاط القرص لعملية julia
:
على لينكس، استخدم
strace
:$ strace julia
على نظام OSX، استخدم
dtruss
:$ dtruss -f julia
إنشاء gist مع مخرجات strace
/ dtruss
، و version info، وأي معلومات ذات صلة أخرى وفتح issue جديدة على GitHub مع رابط إلى الجست.
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
لاحظ أن هذا يعمل فقط على لينكس. تحتوي التدوينة على Time Travelling Bug Reporting على مزيد من التفاصيل.
Glossary
تم استخدام بعض المصطلحات كاختصارات في هذا الدليل:
<julia_root>
يشير إلى الدليل الجذري لشجرة مصدر جوليا؛ على سبيل المثال، يجب أن يحتوي على مجلدات مثلbase
وdeps
وsrc
وtest
وغيرها.....