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 InteractiveUtilsjulia> 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وغيرها.....