Αποσφαλμάτωση προγραμμάτων Perl#

Η Perl διαθέτει μια ασυνήθιστα πλήρη επιφάνεια αποσφαλμάτωσης: έναν ενσωματωμένο αποσφαλματωτή που δουλεύει δήλωση προς δήλωση, έναν ιχνηλάτη της μηχανής regex, ένα τεκμηριωμένο API για τη συγγραφή εναλλακτικών αποσφαλματωτών, και ένα οικοσύστημα στο CPAN από προφίλερ, εντοπιστές διαρροών, εργαλεία post-mortem, και ενσωματώσεις IDE. Η εκ νέου υλοποίηση της pperl διατηρεί τα σημεία hook του διερμηνέα, οπότε όλη η στοίβα δουλεύει: perl -d, Devel::NYTProf, Devel::Cover, Perl::LanguageServer, και η υπόλοιπη οικογένεια -d:Module.

Ποιο κεφάλαιο θέλω;#

Σύμπτωμα

Ξεκινήστε εδώ

Το πρόγραμμα συμπεριφέρεται παράξενα και θέλω να το επιθεωρήσω ζωντανά

interactive-debugger

Το πρόγραμμα καταρρέει με ένα κρυπτικό μήνυμα

exceptions

Θέλω να σκορπίσω print και dump

print-and-die

Θέλω να μετατρέψω περισσότερα λάθη σε σφάλματα μεταγλώττισης

preflight

Πρέπει να σταματήσω σε μια συγκεκριμένη γραμμή ή συνθήκη

breakpoints

Πρέπει να δω τι περιέχει πραγματικά μια δομή δεδομένων

inspecting-state

Θέλω να βλέπω κάθε γραμμή / sub καθώς εκτελείται

tracing

Θέλω breakpoints στο VS Code / Neovim

ide-dap

Τα τρία επίπεδα αυτού του οδηγού#

  • Προσανατολισμός - αυτή η σελίδα.

  • Προγραμματιστής στη δουλειά - τα κεφάλαια που αναφέρονται παραπάνω. Κάθε ένα είναι αυτοτελές· η ανάγνωση ενός μόνον αρκεί για να λύσει το πρόβλημα που κατονομάζει.

Γνωστά κενά#

Επιφάνειες αποσφαλμάτωσης όπου το ίδιο το οικοσύστημα είναι ισχνό, ή όπου η υλοποίηση της pperl δεν έχει φτάσει σε ισοτιμία με το upstream. Κατονομάζονται εδώ ώστε οι αναγνώστες να μη σπαταλούν χρόνο σε αυτές.

  • Μορφή εξόδου του ιχνηλάτη regex. Η μηχανή regex της pperl είναι μια ντόπια εκ νέου υλοποίηση· το use re 'debug' παράγει ίχνος αλλά τα ονόματα κόμβων και οι μορφές πεδίων δεν είναι byte-πανομοιότυπες με αυτές της 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 που αποτυγχάνει σε μια απομακρυσμένη επανάκληση δεν φέρει αυτόματη εγγραφή του ποιος το προγραμμάτισε.

  • Breadcrumbs Sentry. Το Sentry::Raven είναι λειτουργικό αλλά μόνο σε φάση συντήρησης· δεν διαθέτει υποστήριξη breadcrumb πρώτης τάξης. Το OpenTelemetry Perl SDK είναι ο μελλοντικός δρόμος για νέες εγκαταστάσεις.

  • Σύνδεση του Perl::LanguageServer σε εκτελούμενη διεργασία. Η εκκίνηση υποστηρίζεται· η εκ των υστέρων σύνδεση όχι.

Δείτε επίσης#