Σημεία διακοπής

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

Εάν η πρόσθετη λειτουργία σας χρειάζεται να εμφανίσει τα σημεία διακοπής στο περιβάλλον χρήστη της, μπορείτε να προσθέσετε μια IBreakpointListener στη IBreakpointManager. Η IBreakpointManager αποτελεί την κεντρική εξουσία για όλα τα σημεία διακοπής. Τα σημεία διακοπής προστίθενται και αφαιρούνται με τη χρήση της λειτουργίας διαχείρισης σημείων διακοπής, η οποία με τη σειρά της πληροφορεί οποιεσδήποτε λειτουργίες ακρόασης για τη δραστηριότητα των σημείων διακοπής. Η λειτουργία των σημείων διακοπής μπορεί να ενεργοποιηθεί ή να απενεργοποιηθεί με τη χρήση της λειτουργίας διαχείρισης σημείων διακοπής. Η λειτουργία διαχείρισης των σημείων διακοπής μπορεί να αποκτηθεί από τη DebugPlugin:

IBreakpointManager mgr = DebugPlugin.getDefault().getBreakpointManager();

Οι πρόσθετες λειτουργίες που ορίζουν τα δικά τους μοντέλα εντοπισμού και διόρθωσης σφαλμάτων και ρυθμίσεις εκκίνησης συχνά χρειάζεται να ορίσουν τα δικά τους είδη σημείων διακοπής. Μπορείτε να υλοποιήσετε σημεία διακοπής για το δικό σας συγκεκριμένο μοντέλο εντοπισμού και διόρθωσης σφαλμάτων ορίζοντας μια κλάση που υλοποιεί την IBreakpoint.

Τα σημεία διακοπής υλοποιούνται με τη χρήση δεικτών πόρων. Θυμηθείτε ότι οι δείκτες πόρων σας επιτρέπουν να συσχετίσετε τις μετα-πληροφορίες για έναν πόρο με τη μορφή γνωρισμάτων με όνομα. Υλοποιώντας ένα σημείο διακοπής με τη χρήση δεικτών, το μοντέλο εντοπισμού και διόρθωσης σφαλμάτων μπορεί να χρησιμοποιήσει όλες τις υπάρχουσες λειτουργίες δεικτών όπως τη μονιμοποίηση, την αναζήτηση, την προσθήκη, την διαγραφή και την εμφάνιση σε λειτουργίες επεξεργασίας.

Γιατί είναι σημαντικό να γνωρίζουμε σχετικά με τους δείκτες όταν χρησιμοποιούμε σημεία διακοπής;  Όταν δημιουργείτε ένα είδος σημείου διακοπής, πρέπει επίσης να προσδιορίσετε ένα συσχετισμένο είδος δείκτη. Κάθε επέκταση του org.eclipse.debug.core.breakpoints θα πρέπει να συνοδεύεται από μια επέκταση του org.eclipse.core.resources.markers.  Αυτό περιγράφεται καλύτερα εάν κοιτάξουμε στις επεκτάσεις που ορίζονται από τα εργαλεία Java για τα σημεία διακοπής Java.

<extension id="javaBreakpointMarker" point="org.eclipse.core.resources.markers">
	<super type="org.eclipse.debug.core.breakpointMarker"/>
</extension>

<extension id="javaExceptionBreakpointMarker" point="org.eclipse.core.resources.markers">
	<super type="org.eclipse.jdt.debug.javaBreakpointMarker"/>
	<persistent value="true"/>
	<attribute name="org.eclipse.jdt.debug.core.caught"/>
	<attribute name="org.eclipse.jdt.debug.core.uncaught"/>
	<attribute name="org.eclipse.jdt.debug.core.checked"/>
   </extension>
<extension point="org.eclipse.debug.core.breakpoints">
	<breakpoint
		id="javaExceptionBreakpoint"
		markerType="org.eclipse.jdt.debug.javaExceptionBreakpointMarker"
		class="org.eclipse.jdt.internal.debug.core.breakpoints.JavaExceptionBreakpoint">
	</breakpoint>
   </extension>

Η πρόσθετη λειτουργία εντοπισμού και διόρθωσης σφαλμάτων ορίζει ένα ειδικό είδος δείκτη, org.eclipse.debug.core.breakpointMarker. Όταν ορίζετε ένα δείκτη του σημείου διακοπής για τη δική σας λειτουργία εντοπισμού και διόρθωσης σφαλμάτων, θα πρέπει να το δηλώσετε χρησιμοποιώντας αυτό το δείκτη ως ένα υπερ-είδος. Αυτό επιτρέπει στο μοντέλο εντοπισμού και διόρθωσης σφαλμάτων να εντοπίζει όλα τα πιθανά σημεία διακοπής εντός ενός αρχείου πρωτογενούς κώδικα αναζητώντας για υπο-είδη του δείκτη του. Στο παραπάνω παράδειγμα, το javaExceptionBreakpointMarker διαθέτει ένα υπερ-είδος, το javaBreakpointMarker, του οποίου το υπερ-είδος αποτελεί το breakpointMarker. Το javaExceptionBreakpoint (το οποίο ορίζεται στην επέκταση του σημείου διακοπής) καθορίζει το javaExceptionBreakpointMarker ως το δείκτη του.

Τι σημαίνουν όλα αυτά; Όταν ο κώδικας εντοπισμού και διόρθωσης σφαλμάτων λάβει ένα αρχείο πρωτογενή κώδικα, μπορεί να αναζητήσει όλους τους δείκτες των οποίων το υπερ-είδος είναι το org.eclipse.debug.core.breakpointMarker. Αφού εντοπίσει όλους τους δείκτες, μπορεί στη συνέχεια να χρησιμοποιήσει το μητρώο επεκτάσεων για να αντιστοιχίσει τους δείκτες με τις δικές τους συσχετισμένες κλάσεις των σημείων διακοπής. Με αυτόν τον τρόπο, ο κώδικας εντοπισμού και διόρθωσης σφαλμάτων της πλατφόρμας μπορεί εντοπίσει γενικά όλα τα είδη σημείων διακοπής που έχουν οριστεί σε ένα συγκεκριμένο αρχείο πρωτογενούς κώδικα.