Λήψη πρωτογενή κώδικα προγράμματος

Για ορισμένα είδη καταστάσεων λειτουργίας εκκίνησης, μπορεί να είναι σημαντική η λήψη του πρωτογενή κώδικα που αντιστοιχεί με το τρέχον σημείο εκτέλεσης στον κώδικα. Αυτό συνήθως είναι σημαντικό κατά τον εντοπισμό και διόρθωση σφαλμάτων ή τη δημιουργία προφίλ ενός προγράμματος. Παρέχονται αρκετά διαφορετικά σημεία επέκτασης από την πρόσθετη λειτουργία εντοπισμού και διόρθωσης σφαλμάτων τα οποία επιτρέπουν στην πρόσθετη λειτουργία να καταχωρεί κλάσεις οι οποίες μπορούν να βοηθήσουν στον εντοπισμό πρωτογενή κώδικα.

Ρουτίνες εντοπισμού πρωτογενούς κώδικα

Τα ISourceLocator και IPersistableSourceLocator ορίζουν διεπαφές για την αντιστοίχιση από ένα πρόγραμμα που εκτελείται πίσω στον πρωτογενή κώδικα.

Οι ρουτίνες εντοπισμού πρωτογενούς κώδικα συνήθως υλοποιούνται για εργασία με τις αντίστοιχες ρυθμίσεις εκκίνησης και τον εκπρόσωπο ρυθμίσεων εκκίνησης. Μια ταυτότητα ρουτίνας εντοπισμού πρωτογενούς κώδικα μπορεί να προσδιοριστεί κατά τον ορισμό του είδους ρυθμίσεων εκκίνησης ή μπορεί να συσχετιστεί με προγραμματισμό με ρυθμίσεις εκκίνησης χρησιμοποιώντας γνώρισμα ILaunchConfiguration.ATTR_SOURCE_LOCATOR_ID. Σε οποιαδήποτε περίπτωση, κάποια στιγμή η ταυτότητα μιας ρουτίνας εντοπισμού πρωτογενούς κώδικα για κάποιες ρυθμίσεις πρέπει να αναλυθεί στην κλάση που στην πραγματικότητα υλοποιεί IPersistableSourceLocator. Η συσχέτιση ανάμεσα σε μια ταυτότητα ρουτίνας εντοπισμού πρωτογενούς κώδικα και την κλάση της επιτυγχάνεται με τη χρήση σημείου επέκτασης org.eclipse.debug.core.sourceLocators.

Ο κώδικας που ακολουθεί ανήκει στα εργαλεία Java:

<extension point = "org.eclipse.debug.core.sourceLocators">
	<sourceLocator
		id = "org.eclipse.jdt.debug.ui.javaSourceLocator"
	   	class="org.eclipse.jdt.debug.ui.JavaUISourceLocator"
	   	name="%javaSourceLocator"/>
   </extension>

Αφού οι ρυθμίσεις εκκίνησης μπορούν να μονιμοποιηθούν, οι ταυτότητες ρουτίνας εντοπισμού πρωτογενούς κώδικα θα μπορούν να αποθηκευτούν με τις ρυθμίσεις εκκίνησης. Όταν πρόκειται να δημιουργηθεί χρήση μιας ρουτίνας εντοπισμού πρωτογενούς κώδικα, η πρόσθετη λειτουργία εντοπισμού και διόρθωσης σφαλμάτων αναζητάει το γνώρισμα της ταυτότητας της ρουτίνας εντοπισμού πρωτογενούς κώδικα και δημιουργεί μια χρήση της κλάσης που συσχετίζεται με αυτή την ταυτότητα.

Η υλοποίηση της αναζήτησης πρωτογενούς κώδικα αναγκαστικά εξαρτάται από το είδος του προγράμματος του οποίου γίνεται εκκίνηση. Ωστόσο, η πλατφόρμα ορίζει μια αφηρημένη υλοποίηση για μια ρουτίνα εντοπισμού πρωτογενούς κώδικα η οποία αναζητάει αρχεία πρωτογενούς κώδικα σε μια δεδομένη διαδρομή που περιλαμβάνει καταλόγους, αρχεία zip, αρχεία jar και άλλα παρόμοια. Για να εκμεταλλευτείτε αυτή την υλοποίηση, η πρόσθετη λειτουργία σας μπορεί να επεκτείνει το AbstractSourceLookupDirector. Το μόνο που χρειάζεται από την συγκεκριμένη υλοποίηση είναι η δυνατότητα να παρέχει ένα κατάλληλο ISourceLookupParticipant, το οποίο μπορεί να αντιστοιχίσει ένα πλαίσιο στοίβας σε ένα όνομα αρχείου. Δείτε τις επεκτάσεις του AbstractSourceLookupDirector για παραδείγματα.

Υπολογιστές διαδρομής πρωτογενούς κώδικα

Το AbstractSourceLookupDirector αναζητάει για αρχεία πρωτογενή κώδικα σύμφωνα με μια συγκεκριμένη διαδρομή αναζήτησης πρωτογενούς κώδικα. Αυτή η διαδρομή εκφράζεται ως ένας πίνακας του ISourceContainer. Οι θέσεις υποδοχής πρωτογενούς κώδικα, οι οποίες πρέπει να αναζητηθούν για τον πρωτογενή κώδικα, συνήθως υπολογίζονται σύμφωνα με τα συγκεκριμένα στοιχεία των ρυθμίσεων πρωτογενούς κώδικα του οποίου γίνεται εκκίνηση. Το ISourcePathComputer ορίζει τη διεπαφή για ένα αντικείμενο το οποίο υπολογίζει την κατάλληλη διαδρομή πρωτογενούς κώδικα για κάποιες ρυθμίσεις εκκίνησης. Ένας υπολογιστής διαδρομής πρωτογενούς κώδικα, όπως και μια ρουτίνα εντοπισμού πρωτογενούς κώδικα, ορίζεται από ταυτότητα και μπορεί να προσδιοριστεί στον ορισμό επέκτασης για ένα είδος ρυθμίσεων εκκίνησης ή να συσχετιστεί με προγραμματισμό ορίζοντας το γνώρισμα ISourceLocator.ATTR_SOURCE_PATH_COMPUTER_ID για τις ρυθμίσεις εκκίνησης. Η ταυτότητα για έναν υπολογιστή διαδρομής πρωτογενούς κώδικα συσχετίζεται με την κλάση υλοποίησης του στο σημείο επέκτασης org.eclipse.debug.core.sourcePathComputers. Ο κώδικας που ακολουθεί δείχνει τον ορισμό που χρησιμοποιείται από το JDT για το δικό του υπολογιστή διαδρομής πρωτογενούς κώδικα Java:

<extension point="org.eclipse.debug.core.sourcePathComputers">
	<sourcePathComputer
		id="org.eclipse.jdt.launching.sourceLookup.javaSourcePathComputer"
		class="org.eclipse.jdt.launching.sourcelookup.containers.JavaSourcePathComputer">
 	</sourcePathComputer>
 	...

Ο υπολογιστής διαδρομής πρωτογενούς κώδικα ευθύνεται για τον υπολογισμό ενός πίνακα του ISourceContainer που αντιπροσωπεύει τη διαδρομή αναζήτησης πρωτογενούς κώδικα. Για παράδειγμα, ο υπολογιστής πρωτογενούς κώδικα Java εξετάζει τη διαδρομή κλάσεων κατά τη δόμηση της διαδρομής.

Είδη θέσεων υποδοχής πρωτογενούς κώδικα

Οι θέσεις υποδοχής που προσδιορίζονται ως μέρος μιας διαδρομής αναζήτησης πρωτογενούς κώδικα πρέπει να υλοποιούν το ISourceContainer, το οποίο μπορεί να αναζητάει τη θέση υποδοχής που αντιπροσωπεύεται για στοιχείο πρωτογενούς κώδικα με όνομα. Μπορεί να χρειαστούν διάφορα είδη θέσεων υποδοχής πρωτογενούς κώδικα για την αντιπροσώπηση των διαφόρων ειδών θέσεων αποθήκευσης του πρωτογενούς κώδικα. Για παράδειγμα, το JDT ορίζει θέσεις υποδοχής πρωτογενούς κώδικα που αντιπροσωπεύουν πρωτογενή κώδικα σε ένα έργο , πρωτογενή κώδικα στη διαδρομή κλάσεων και πρωτογενή κώδικα σε ένα τμήμα πακέτου. Οι θέσεις υποδοχής πρωτογενούς κώδικα που χρησιμοποιούνται για ρυθμίσεις εκκίνησης μπορούν να αποθηκευτούν από την ταυτότητα στις ρυθμίσεις εκκίνησης. Αφού οι ρυθμίσεις εκκίνησης μπορούν να μονιμοποιηθούν, πρέπει να υπάρχει ένας τρόπος για να συσχετιστεί η ταυτότητα μιας θέσης υποδοχής πρωτογενούς κώδικα με την κλάση υλοποίησής της. Αυτό επιτυγχάνεται με τη χρήση του σημείου επέκτασης org.eclipse.debug.core.sourceContainerTypes. Το ακόλουθο παράδειγμα προέρχεται από το JDT:

<extension point="org.eclipse.debug.core.sourceContainerTypes">
	<sourceContainerType
		id="org.eclipse.jdt.launching.sourceContainer.javaProject"
		name="%javaProjectSourceContainerType.name"
		description="%javaProjectSourceContainerType.description"
		class="org.eclipse.jdt.internal.launching.JavaProjectSourceContainerTypeDelegate">
	</sourceContainerType> 
	...