Ιχνηλάτηση και έλεγχος τύπων
Επισκόπηση
Η αποσφαλμάτωση δικτύων τύπων σε μεγάλα μοντέλα Delphi απαιτεί την ιχνηλάτηση του τρόπου με τον οποίο ρέουν οι τιμές των κελιών από τις μεταβλητές εισόδου στις συγκεντρωτικές αθροίσεις· το HotXLS παρέχει APIs ελέγχου για την ιχνηλάτηση των precedents και dependents ενός τύπου βήμα προς βήμα
Διεπαφή ιχνηλάτησης τύπων
Η TXLSFormulaTracer αναγάγει έναν τύπο από τις εσωτερικότερες παραστάσεις του και καταγράφει source spans, αντικατεστημένες παραστάσεις, ενδιάμεσες τιμές, είδη βημάτων και την ακριβή κατάσταση της operand stack πριν και μετά από κάθε βήμα
TXLSFormulaStepKind = (stPush, stReduce, stFunction);
TXLSFormulaStep = record
Depth: Integer;
Source: WideString;
Expression: WideString;
Value: Variant;
StepKind: TXLSFormulaStepKind;
StackBefore: WideString;
StackAfter: WideString;
TokenStart: Integer;
TokenEnd: Integer;
end;
Το Source είναι το αρχικό κείμενο της υπο-παράστασης, η Expression αντικαθιστά τους ήδη αξιολογημένους τελεστές με τις τιμές τους, και η Value είναι το αποτέλεσμα του βήματος· τα StackBefore / StackAfter είναι στιγμιότυπα της operand stack διαχωρισμένα με κόμμα, και τα TokenStart / TokenEnd προσδένουν το βήμα σε ένα διάστημα χαρακτήρων με βάση το 1 στον τύπο πηγής
Η TraceReversed επιστρέφει τα ίδια αμετάβλητα δεδομένα βημάτων σε αντίστροφη σειρά αξιολόγησης, για περιβάλλοντα με βήμα προς τα πίσω
Διαδραστικός debugger
Ο TXLSFormulaDebugger χτίζει ένα πλήρες μοντέλο parsed κόμβων και μετά καταγράφει την πραγματική εκτέλεση, χωρίς να αξιολογεί τους ανεπίλεκτους lazy κλάδους
TXLSFormulaDebugNodeKind = (fdnNumber, fdnString, fdnBoolean, fdnReference,
fdnRange, fdnParentheses, fdnUnary, fdnPercent, fdnBinary, fdnFunction);
TXLSFormulaDebugState = (fdsPending, fdsEvaluated, fdsSkipped, fdsError);
TXLSFormulaDebugBranch = (fdbNone, fdbIfTrue, fdbIfFalse, fdbIfErrorValue,
fdbIfErrorFallback, fdbChoose, fdbIfs, fdbSwitch);
TXLSFormulaDependencyKind = (fdkCell, fdkRange, fdkDefinedName);
Η επιστρεφόμενη συνεδρία εκθέτει τελεστές, ενδιάμεσες τιμές, source spans, στατικά dependencies, σειρά αξιολόγησης, επιλογές κλάδων, παραλειπόμενους κόμβους, στάνταρ σφάλματα τύπων και τις πηγές προέλευσης των διαδιδόμενων σφαλμάτων. Κάθε TXLSFormulaDebugNode αναφέρει τη θέση του στο δέντρο (NodeId, ParentNodeId, Depth), το Kind και το State, το source span, τα ids και τις τιμές των κόμβων-τελεστών, τον επιλεγμένο Branch και το καταγεγραμμένο τρίπτυχο σφάλματος (ErrorCode, ErrorText, ErrorOriginNodeId)· κάθε TXLSFormulaDependency αναφέρει το Kind μαζί με το επιλυμένο φύλλο, το κείμενο αναφοράς, τα όρια και την κατάσταση αξιολόγησης ενός precedent
Οι μέθοδοι cursor επιτρέπουν στην εφαρμογή να κινείται μπροστά ή πίσω στη συνεδρία ή να μεταβεί απευθείας σε έναν κόμβο, χωρίς επανυπολογισμό του τύπου
Δυνατότητες ελέγχου
Ελέγξτε τις βασικές διεπαφές για τον έλεγχο τύπων παρακάτω
- Η ιδιότητα HasFormula — Εντοπισμός του αν ένα κελί περιέχει τύπο
- Η ιδιότητα Formula — Ανάγνωση ή τροποποίηση των διακριτικών του τύπου
- κλάση TXLSFormulaDebugger — Διάγνωση parsed δέντρου και runtime
- Επισκόπηση μηχανής υπολογισμού — Λεπτομέρειες επανυπολογισμού