Κατά τη διάρκεια της στατικής ανάλυσης δίνεται η δυνατότητα στο χρήστη του ArrayTracer να ζητήσει επιλεκτικά την ιχνοληψία ορισμένων μόνο γεγονότων που σχετίζονται με την ενδοδιεργασιακή επικοινωνία, τον τρόπο προσπέλασης της μνήμης, την κλήση υπορουτινών (συναρτήσεων) και την εκτέλεση βρόγχων επανάληψης. Αυτή η επιλεκτική δυνατότητα μπορεί να δημιουργήσει προβλήματα στη διαδικασία ανάλυσης, στην περίπτωση της ενδοεπικοινωνίας των διεργασιών.
πχ. Εστω ότι ο χρήστης ζητάει την ιχνοληψία της κλήσης μιας ρουτίνας παραλαβής μηνύματος ενώ δεν ισχύει το ίδιο και για την αντίστοιχη κλήση της ρουτίνας αποστολής του μηνύματος. Τότε στην καλύτερη περίπτωση, κατά την ανάλυση θα παραχθεί ένα γεγονός παραλαβής μηνύματος χωρίς να υπάρχει το αντίστοιχο γεγονός αποστολής του. Στην χειρότερη περίπτωση, λόγω της ύπαρξης πιο πολύπλοκων εξαρτήσεων μεταξύ των διεργασιών, δεν θα είναι δυνατή η συνέχιση της διαδικασίας ανάλυσης.
Για την επίλυση του προβλήματος αυτού υλοποιήθηκε μια τεχνική ανίχνευσης της ύπαρξης ελλειπούς πληροφορίας.
Figure: Μηχανισμός ανίχνευσης της ύπαρξης ελλειπούς πληροφορίας.
Με βάση την τεχνική αυτή, σε κάθε περίπτωση που μια διεργασία
εισέρχεται σε κατάσταση αναμονής μηνύματος (RecvBlocked), δημιουργείται
ένας κατευθυνόμενος γράφος αναμονής με κόμβους τις διεργασίες
και
k ;SPMlt; N, όπου Ν ο αριθμός των διεργασιών που αποτελούν την εφαρμογή.
Για δύο συνεχόμενους κόμβους ισχύει
ανν η
διεργασία
περιμένει μήνυμα από τη διεργασία
Καθε μια διεργασία που συμμετέχει στο γράφο δεν παράγει
πλέον γεγονότα εως ότου να παραχθεί το γεγονός αποστολής μηνύματος που
θα την αποδεσμεύσει από την κατάσταση αναμονής. Συνεπώς αν ο γράφος που
παράγεται είναι κυκλικός τότε θα ισχύει , για
i=1,...,k, k ;SPMlt; N και επιπλέον
.
Αρα είναι αδύνατον να παραχθεί έστω και ένα γεγονός αποστολής μηνύματος με συνέπεια η διαδικασία ανάλυσης να οδηγηθεί σε αδιέξοδο. Η ανίχνευση του αδιεξόδου ισοδυναμεί με ανίχνευση της ύπαρξης ελλειπούς πληροφορίας.
Αν ο γράφος που παράγεται δεν είναι κυκλικός τότε προς το παρόν αναμένουμε την εμφάνιση των αντίστοιχων γεγονότων αποστολής μηνυμάτων.
Στο παράδειγμα που ακολουθεί, σχ., περιγράφεται μια
περίπτωση αδιεξόδου. Πχ. η διεργασία 1 στην οποία αναφέρεται το ίχνος αναμένει
το μήνυμα από τη διεργασία 2 και η διεργασία 2 βρίσκεται ήδη
σε κατάσταση αναμονής μηνύματος από τη διεργασία 3.
Τότε η πρώτη εξάρτηση στο γράφο θα είναι η
και η
επόμενη η
. Συνεχίζοντας με τον τρόπο αυτό
παράγονται όλες οι έξαρτήσεις αναμονής που ξεκινούν από τη διεργασία
1 σχήμα
(a).
Ο γράφος που παράγεται είναι κυκλικός συνεπώς ανιχνεύεται έλλειψη
πληροφορίας, καθώς θα έπρεπε ήδη να έχει εμφανιστεί τουλάχιστον ένα ίχνος αποστολής
μηνύματος. Το συμπέρασμα αυτό προκύπτει και τον κώδικα της
εφαρμογής που θα μπορούσε να έχει τη μορφή που αναγράφεται στο
(b).