Είχα γράψει κάποτε, πριν καιρό, ένα mini-framework το οποίο φτιάχνει wizards σε ASP.NET.
Αυτό ήταν βασισμένο σε xml config files, και μας δούλευε πάρα πολύ καλα, και το χρησιμοποιούμε άρδην πολύ καιρό τώρα. Τα dlls του λοιπόν, τα έχω και τα χρησιμοποιώ μήνες τώρα, στα γραφεία του πελάτη.
Μέχρι που σήμερα, ξαφνικά ... ένας wizard ... έσκαγε. Χωρίς προφανή λόγο και αιτία, χωρίς τίποτα, με ένα cryptic NullReferenceException σε ένα σημειο του κώδικα που ούτε εγώ που τον έγραψα δεν θυμόμουν ότι υπήρχε. Τα sources ... nowhere to be found around here, είμαι στου πελάτη. ΑΠΕΛΠΙΣΙΑ, και το χειρότερο να μην έχω καν αχνή ιδέα τι έφταιγε ...
Τηλεφωνάκι στον Τσοσμί λοιπόν, "Μήτσο ... στείλε sources file, καίγομαι". Και φέρε τα sources πίσω απο χίλια δύο security settings του (s)proxy στον πελάτη, και άντε add new project στο solution, και replace references ολούθε, και debug κτλ. κτλ. κτλ. 2 ωρίτσες υπόθεση, και η ώρα είναι 9 το βράδυ !
Και τελικά ... το επίμαχο κομμάτι του κώδικα:
foreach(WizardFlowViewStep vStep in this.CurrentView.ViewSteps)
viewSteps.Add(m_Steps[vStep.StepID]);
... το οποίο έγινε ...
foreach(WizardFlowViewStep vStep in this.CurrentView.ViewSteps){
WizardFlowStep wStep = (WizardFlowStep)m_Steps[vStep.StepID];
if (null
== wStep)
throw new ArgumentOutOfRangeException(string.Format("Cannot
locate Step: {0} defined in view: {1}", vStep.StepID, this.CurrentView.ViewID));
viewSteps.Add(wStep);
}
Αν είχα βάλει εκεί απο την αρχή ένα [!!!&^%##$%#!!!] Exception με κάποιο meaningful error message, θα είχα βρεί το παναπλούστατο πρόβλημά μου σε 10 δεύτερα ... Τώρα, σε 10 ώρες !!! Και σε όλο το υπόλοιπο code base, είχα βάλει, παντού. Μόνο εκεί μου ξέφυγε, και με δάγκωσε μετά απο 2 χρόνια.
Το συμπέρασμα της ιστορίας;
Ένα καλό error message αξίζει όσο 2 ώρες debugging φίλοι μου -
remember that.
Angel
O:]