ניפוי שגיאות בתוכניות Perl#

Perl מגיעה עם מערך כלי ניפוי שגיאות מלא באופן יוצא דופן: מנפה שגיאות מובנה הפועל הוראה־אחר־הוראה, מסַייר של מנוע הביטויים הרגולריים, API מתועד לכתיבת מנפי שגיאות חלופיים, ומערכת אקולוגית של CPAN הכוללת פרופיילרים, מאתרי דליפות, כלי post-mortem, ושילובי IDE. המימוש מחדש של pperl משמר את נקודות ה־hook של הפרשן, ולכן כל הערימה עובדת: perl -d, Devel::NYTProf, Devel::Cover, Perl::LanguageServer, ושאר משפחת -d:Module.

איזה פרק רלוונטי עבורי?#

תסמין

התחילו כאן

התוכנית מתנהגת באופן שגוי ואני רוצה לבחון אותה בזמן ריצה

interactive-debugger

התוכנית קורסת עם הודעה סתומה

exceptions

אני רוצה לפזר prints ו־dumps

print-and-die

אני רוצה להפוך טעויות נוספות לשגיאות הידור

preflight

אני צריך לעצור בשורה מסוימת או בתנאי מסוים

breakpoints

אני צריך לראות מה מבנה נתונים מחזיק בפועל

inspecting-state

אני רוצה לראות כל שורה / sub בעת הביצוע

tracing

אני רוצה breakpoints ב־VS Code / Neovim

ide-dap

שלוש שכבות המדריך#

  • התמצאות - דף זה.

  • המתכנת בעבודה - הפרקים שלעיל. כל אחד עומד בפני עצמו; קריאת פרק יחיד מספיקה לפתרון הבעיה שהוא מציין.

פערים ידועים#

תחומי ניפוי שגיאות שבהם המערכת האקולוגית עצמה דלילה, או שבהם המימוש של 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::Leak family - 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-Perl Devel::Peek-workalike functionality is already provided natively by the built-in Devel::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::LanguageServer attach-to-running-process. הפעלה (launch) נתמכת; חיבור post-hoc אינו נתמך.

ראו גם#