Αυτό που δεν ανέφερες είναι ότι το μήνυμα εμφανίζεται σε javascript dialog box αντί για το κλασσικό YSOD. Προφανώς χρησιμοποιείς κώδικα, δικό σου ή των control ή των framework που χρησιμοποιείς, που πιάνει το exception και το παρουσιάζει στο χρήστη. Τί χρησιμοποιείς πέρα από controls? Μήπως χρησιμοποιείς XAF ή κάτι παρόμοιο? Κάποιο logger? Το κοίταξες το event log? Μήπως έχεις ορίσει templates για κάποια από τα controls τα οποία σηκώνουν αυτό το μήνυμα?
Προφανώς κάποιος κώδικας πιάνει αυτό το exception και το στέλνει στον browser. Για να πιάσεις αυτό το exception θα πρέπει να ορίσεις ότι ένα exception θα πιάνεται όταν ρίχνεται, όχι μόνο αν δεν το πιάσει κανείς άλλος. Αν όμως το exception πέφτει μέσα σε κώδικα control ή framework (όπως υποψιαζόμαστε όλοι) θα πρέπει να απενεργοποιήσεις το "Enable Just My Code" από το Debug -> Options and Settings -> General.
Μέσω της ονυχομυριστικής θα έλεγα ότι δεν έχεις δώσει σωστά σε κάποιο third party κάποια παράμετρο με αποτέλεσμα να πέφτει exception στον κώδικα του. Το control μετά πιάνει το exception και το στέλνει στη σελίδα με αποτέλεσμα το Visual Studio να μη βλέπει ποτέ το exception. Αυτή η συμπεριφορά προϋποθέτει ότι έχεις ορίσει το Catch when thrown και έχεις ενεργοποιημένο (είναι by default) to Just My Code.
Σε αυτή την περίπτωση κοίτα το event log και όποιο άλλο log χρησιμοποιεί η εφαρμογή σου γιατί συνήθως δεν κάνει κανείς log μόνο στον browser.
Επιπλέον, κατέβασε και τρέξε το DebugView από τα Sysinternal tools. Το DebugView εμφανίζει το debug output του μηχανήματος σου, στο οποίο γράφει ο default Trace Listener του ASP.NET και οι περισσότεροι άλλοι loggers. Ακόμα και αν το control δεν κάνει log το συγκεκριμένο exception, μπορεί να δεις άλλα μηνύματα την ώρα που εμφανίζεται το λάθος, τα οποία θα σε βοηθήσουν.
Θα σου έλεγα να βάλεις και το ELMAH αλλά υποψιάζομαι ότι αν κάποιο control "μασάει" το exception δεν θα φτάσει ούτε στο ELMAH.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos