Αποσφαλμάτωση προγραμμάτων Perl#
Η Perl διαθέτει μια ασυνήθιστα πλήρη επιφάνεια αποσφαλμάτωσης: έναν ενσωματωμένο αποσφαλματωτή που δουλεύει δήλωση προς δήλωση, έναν ιχνηλάτη της μηχανής regex, ένα τεκμηριωμένο API για τη συγγραφή εναλλακτικών αποσφαλματωτών, και ένα οικοσύστημα στο CPAN από προφίλερ, εντοπιστές διαρροών, εργαλεία post-mortem, και ενσωματώσεις IDE. Η εκ νέου υλοποίηση της pperl διατηρεί τα σημεία hook του διερμηνέα, οπότε όλη η στοίβα δουλεύει: perl -d, Devel::NYTProf, Devel::Cover, Perl::LanguageServer, και η υπόλοιπη οικογένεια -d:Module.
Ποιο κεφάλαιο θέλω;#
Σύμπτωμα | Ξεκινήστε εδώ |
|---|---|
Το πρόγραμμα συμπεριφέρεται παράξενα και θέλω να το επιθεωρήσω ζωντανά | |
Το πρόγραμμα καταρρέει με ένα κρυπτικό μήνυμα | |
Θέλω να σκορπίσω print και dump | |
Θέλω να μετατρέψω περισσότερα λάθη σε σφάλματα μεταγλώττισης | |
Πρέπει να σταματήσω σε μια συγκεκριμένη γραμμή ή συνθήκη | |
Πρέπει να δω τι περιέχει πραγματικά μια δομή δεδομένων | |
Θέλω να βλέπω κάθε γραμμή / sub καθώς εκτελείται | |
Θέλω breakpoints στο VS Code / Neovim |
Τα τρία επίπεδα αυτού του οδηγού#
Προσανατολισμός - αυτή η σελίδα.
Προγραμματιστής στη δουλειά - τα κεφάλαια που αναφέρονται παραπάνω. Κάθε ένα είναι αυτοτελές· η ανάγνωση ενός μόνον αρκεί για να λύσει το πρόβλημα που κατονομάζει.
Γνωστά κενά#
Επιφάνειες αποσφαλμάτωσης όπου το ίδιο το οικοσύστημα είναι ισχνό, ή όπου η υλοποίηση της 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::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που αποτυγχάνει σε μια απομακρυσμένη επανάκληση δεν φέρει αυτόματη εγγραφή του ποιος το προγραμμάτισε.Breadcrumbs Sentry. Το
Sentry::Ravenείναι λειτουργικό αλλά μόνο σε φάση συντήρησης· δεν διαθέτει υποστήριξη breadcrumb πρώτης τάξης. Το OpenTelemetry Perl SDK είναι ο μελλοντικός δρόμος για νέες εγκαταστάσεις.Σύνδεση του
Perl::LanguageServerσε εκτελούμενη διεργασία. Η εκκίνηση υποστηρίζεται· η εκ των υστέρων σύνδεση όχι.
Δείτε επίσης#
perlfunc/die,perlfunc/warn,perlfunc/eval,perlfunc/caller- τα γλωσσικά πρωτογενή πάνω στα οποία οικοδομούνται ο αποσφαλματωτής και τα εργαλεία ίχνους στοίβας.PPerl Architecture guide - how pperl is built and why the debugger surface works as it does.