ניפוי שגיאות בתוכניות Perl#
Perl מגיעה עם מערך כלי ניפוי שגיאות מלא באופן יוצא דופן: מנפה שגיאות מובנה הפועל הוראה־אחר־הוראה, מסַייר של מנוע הביטויים הרגולריים, API מתועד לכתיבת מנפי שגיאות חלופיים, ומערכת אקולוגית של CPAN הכוללת פרופיילרים, מאתרי דליפות, כלי post-mortem, ושילובי IDE. המימוש מחדש של pperl משמר את נקודות ה־hook של הפרשן, ולכן כל הערימה עובדת: perl -d, Devel::NYTProf, Devel::Cover, Perl::LanguageServer, ושאר משפחת -d:Module.
איזה פרק רלוונטי עבורי?#
תסמין | התחילו כאן |
|---|---|
התוכנית מתנהגת באופן שגוי ואני רוצה לבחון אותה בזמן ריצה | |
התוכנית קורסת עם הודעה סתומה | |
אני רוצה לפזר prints ו־dumps | |
אני רוצה להפוך טעויות נוספות לשגיאות הידור | |
אני צריך לעצור בשורה מסוימת או בתנאי מסוים | |
אני צריך לראות מה מבנה נתונים מחזיק בפועל | |
אני רוצה לראות כל שורה / sub בעת הביצוע | |
אני רוצה breakpoints ב־VS Code / Neovim |
שלוש שכבות המדריך#
התמצאות - דף זה.
המתכנת בעבודה - הפרקים שלעיל. כל אחד עומד בפני עצמו; קריאת פרק יחיד מספיקה לפתרון הבעיה שהוא מציין.
פערים ידועים#
תחומי ניפוי שגיאות שבהם המערכת האקולוגית עצמה דלילה, או שבהם המימוש של pperl עדיין לא הגיע לשוויון עם upstream. הם מצוינים כאן כדי שהקוראים לא יבזבזו זמן עליהם.
פורמט פלט של ה־regex tracer. מנוע ה־regex של pperl הוא מימוש מחדש מקומי;
use re 'debug'מפיק עקבה אך שמות הצמתים ופורמטי השדות אינם זהים בית־לבית לאלה של perl5. צרכנים המנתחים את העקבה (קיימים מעטים) יזדקקו להתאמה.מודולי אינטרוספקציה
B::*.B::Deparse,B::Concise, ומקביליהם חושפים את גרף ה־op של perl5. ייצוג ה־op של pperl שונה; המקבילים המקומיים בעבודה.XS-dependent introspection modules.
Devel::Peek,Devel::FindRef,Devel::Gladiator,Devel::Refcount,Devel::Size,Devel::MAT::Dumper,Devel::Leakfamily - all reach the SV through XS (C-level macros against the SV pointer). pperl mirrors perl5’s SV layout faithfully, but XS loading is not supported; these modules therefore need native (Rust) reimplementations that expose the same Perl-level API. Pure-PerlDevel::Peek-workalike functionality is already provided natively by the built-inDevel::Peek; the others are in progress.Enbuggerב־Perl ≥ 5.38. המהדורה האחרונה משנת 2012; פועלת באופן אנקדוטלי בגרסאות perl מודרניות אך אין לה מתחזק פעיל. המסלול שלgdb-inject-perlאמין יותר.מקור async. אין מקבילה ב־Perl ל־
AsyncLocalStorageשל Node:Futureשנכשל ב־callback מרוחק אינו נושא רישום אוטומטי של מי שתִזמן אותו.Breadcrumbs של Sentry.
Sentry::Ravenפונקציונלי אך במצב תחזוקה־בלבד; אין תמיכה מדרגה־ראשונה ב־breadcrumbs. OpenTelemetry Perl SDK הוא המסלול קדימה להתקנות חדשות.Perl::LanguageServerattach-to-running-process. הפעלה (launch) נתמכת; חיבור post-hoc אינו נתמך.
ראו גם#
perlfunc/die,perlfunc/warn,perlfunc/eval,perlfunc/caller- פרימיטיבי השפה שעליהם בנויים מנפה השגיאות וכלי ה־stack-trace.PPerl Architecture guide - how pperl is built and why the debugger surface works as it does.