Πρόσφατα, ένα έργο αναπτύχθηκε σε περιβάλλον παραγωγής και ανακαλύφθηκε ότι ορισμένες μέθοδοι έριχναν ανώμαλα μηνύματα
Ωστόσο, δίνονται μόνο μη φυσιολογικές πληροφορίες σφάλματος και δεν υπάρχει μη φυσιολογικός αριθμός γραμμής, μόνο ότι υπάρχει πρόβλημα με τη μετατροπή του μοντέλου σε μια συγκεκριμένη μέθοδο
Αλλά επιτρέψτε μου να τα συγκρίνω ένα προς ένα, είναι πολύ ενοχλητικό, γιατί να μην καταγράψετε λάθος αριθμό γραμμής;
Η διαμόρφωση του log4net log έχει ως εξής:
Έγραψα σκόπιμα ένα μήνυμα εξαίρεσης στη μέθοδο Home/Index στον τοπικό μου υπολογιστή για να δω αν θα καταγραφεί ο αριθμός γραμμής:
Διαπίστωσα ότι το αρχείο καταγραφής σφαλμάτων θα καταγράφει τον αριθμό γραμμής, κάτι που σίγουρα δεν είναι πρόβλημα με τη διαμόρφωση του log4net, επειδή η διαμόρφωση και στις δύο πλευρές είναι η ίδια
Θα μπορούσε να είναι πρόβλημα με τη λειτουργία μεταγλώττισης???
Ο τοπικός μου υπολογιστής βρίσκεται σε λειτουργία εντοπισμού σφαλμάτων και το dll που μεταγλωττίζεται από τον επίσημο διακομιστή βρίσκεται σε λειτουργία έκδοσης
Στη συνέχεια, άλλαξα το τοπικό έργο σε λειτουργία κυκλοφορίας και διαπίστωσα ότι ήταν ακόμα ένας αριθμός γραμμής εγγραφής.
Στη συνέχεια, Baidu, η πρώτη πρόταση:Πρέπει να αντιγράψετε το αρχείο .pdb που αντιστοιχεί στο dll”
Λοιπόν, είναι αυτό πρόβλημα; Στη συνέχεια, πήγα απευθείας στον κατάλογο bin, διέγραψα το αρχείο .pdb που αντιστοιχεί στο dll και, στη συνέχεια, ανανέωσα τον ιστότοπο και βρήκα το αρχείο καταγραφής εξαιρέσεων ως εξής:
Σίγουρα, ο μη φυσιολογικός αριθμός γραμμής δεν καταγράφεται!!!!
Είναι πραγματικά πρόβλημα .pdb!! Πρέπει να διατηρήσετε το αρχείο .pdb έτσι ώστε ο αριθμός γραμμής να καταγραφεί εάν δεν είναι φυσιολογικός!!
Σε τι χρησιμεύει ένα αρχείο PDB;
Αρχεία PDB: Τι πρέπει να γνωρίζει κάθε προγραμματιστής
Τι είναι ένα αρχείο PDB;
Οι περισσότεροι προγραμματιστές πρέπει να γνωρίζουν ότι τα αρχεία PDB χρησιμοποιούνται για να βοηθήσουν στον εντοπισμό σφαλμάτων λογισμικού. Αλλά πώς ακριβώς λειτουργεί, μπορεί να μην γνωρίζουμε. Αυτό το άρθρο περιγράφει την αποθήκευση και τα περιεχόμενα των αρχείων PDB. Περιγράφει επίσης πώς το πρόγραμμα εντοπισμού σφαλμάτων βρίσκει το αρχείο PDB που αντιστοιχεί στο binay και πώς το πρόγραμμα εντοπισμού σφαλμάτων βρίσκει το αρχείο πηγαίου κώδικα που αντιστοιχεί στο binay. Αυτό το άρθρο απευθύνεται σε όλους τους εγγενείς και διαχειριζόμενους προγραμματιστές.
Πριν ξεκινήσουμε, ας ορίσουμε δύο όρους: ιδιωτική κατασκευή, η οποία χρησιμοποιείται για να δηλώσει μια κατασκευή που δημιουργείται στο μηχάνημα του ίδιου του προγραμματιστή. δημόσια κατασκευή, που σημαίνει μια κατασκευή που δημιουργείται σε μια μηχανή δημόσιας κατασκευής. Η ιδιωτική κατασκευή είναι σχετικά απλή, επειδή το PDB και το binay βρίσκονται στο ίδιο μέρος και συνήθως τα προβλήματα που έχουμε αφορούν τη δημόσια κατασκευή.
Το πιο σημαντικό πράγμα που πρέπει να γνωρίζουν όλοι οι προγραμματιστές είναι ότι "τα αρχεία PDB είναι εξίσου σημαντικά με τον πηγαίο κώδικα", χωρίς τα οποία δεν μπορείτε καν να κάνετε εντοπισμό σφαλμάτων. Για δημόσια έκδοση, ο διακομιστής συμβόλων πρέπει να αποθηκεύσει όλα τα PDB και, στη συνέχεια, όταν ο χρήστης αναφέρει ένα σφάλμα, το πρόγραμμα εντοπισμού σφαλμάτων μπορεί να βρει αυτόματα το αντίστοιχο αρχείο PDB στο binay και τόσο το Visual Studio όσο και το Windbg γνωρίζουν πώς να έχουν πρόσβαση στον διακομιστή συμβόλων. Πριν αποθηκεύσετε το PDB και το binay στον διακομιστή συμβόλων, πρέπει επίσης να δημιουργήσετε ευρετήριο προέλευσης της εκτέλεσης PDB, το οποίο είναι να συσχετίσετε το PDB και την πηγή.
Το επόμενο μέρος υποθέτει ότι ο διακομιστής συμβόλων και η ευρετηρίαση διακομιστή προέλευσης έχουν ήδη ρυθμιστεί. TFS2010 μπορεί να γίνει τόσο απλά όσο η ευρετηρίαση πηγής και η αντιγραφή διακομιστή συμβόλων για μια νέα έκδοση.
2. Το περιεχόμενο του αρχείου ΠΣΠ
Ξεκινώντας επίσημα το περιεχόμενο του PDB, το PDB δεν είναι μια δημόσια διαθέσιμη μορφή αρχείου, αλλά η Microsoft παρέχει ένα API για να βοηθήσει στη λήψη δεδομένων από το PDB.
Το εγγενές PDB της C++ περιέχει τις ακόλουθες πληροφορίες: * δημόσιες, ιδιωτικές και στατικές διευθύνσεις λειτουργιών. * Το όνομα και η διεύθυνση της καθολικής μεταβλητής. * Ονόματα και μετατοπίσεις παραμέτρων και τοπικών μεταβλητών στη στοίβα. * τύποιορισμοί κλάσης, δομής και δεδομένων. * Δεδομένα παράλειψης δείκτη πλαισίου για τη διέλευση της εγγενούς στοίβας στο x86. * Το όνομα και ο αριθμός των γραμμών στο αρχείο πηγαίου κώδικα.
Το .NET PDB περιέχει μόνο 2 μέρη πληροφοριών: * Όνομα αρχείου πηγαίου κώδικα και αριθμός γραμμών. * και το όνομα της τοπικής μεταβλητής. * Όλα τα άλλα δεδομένα περιλαμβάνονται ήδη στο . NET Μεταδεδομένα;
|