Wiem, że otwieram się na królewski płomień, nawet pytając o to, ale pomyślałem, że zobaczę, czy StackOverflow ma jakieś rozwiązania problemu, który mam ...Obsługa niegrzeczna aplikacja przerywa w .NET
Mam aplikację C#, która zawiedzie w witrynie klienta w sposób, którego nie mogę odtworzyć lokalnie. Niestety bardzo trudno (moim zdaniem) uzyskać wszelkie informacje, które w ogóle pomagają w wyizolowaniu źródła problemu.
mam w miejscu dość szerokie ramy monitorowania błędów, który jest oglądanie na nieobsłużonych wyjątków we wszystkich standardowych lokalizacjach:
- Backstop obsługi wyjątku w wątkach kontrolować
- Application.ThreadException dla WinForms wyjątkami
- AppDomain.CurrentDomain.UnhandledException
Który rejestruje szczegółowe informacje w miejscu, w którym mam do nich dostęp.
To było bardzo przydatne w przeszłości do identyfikowania problemów w kodzie produkcyjnym, ale nie dało mi żadnych informacji na temat aktualnej serii problemów.
Moje najlepsze przypuszczenie jest takie, że podstawowym problemem jest jeden z "nieuporządkowanych" typów wyjątków (wątek przerwany, brak pamięci, przepełnienie stosu, naruszenie zasad dostępu itp.), Które eskalują do niegrzecznego zamknięcia, które zrywają proces, zanim będę mógł zobaczyć, co się dzieje.
Czy jest coś, co mogę zrobić, aby uzyskać informacje o migawkach, ponieważ mój proces ulega awarii, który byłby przydatny? W idealnej sytuacji byłbym w stanie napisać mój niestandardowy format dziennika, ale byłbym szczęśliwy, gdybym mógł mieć niezawodny sposób, aby gdzieś zapisać zapis awaryjny.
Miałem nadzieję, że mogę zaimplementować klasę wywodzącą się z CriticalFinalizerObject i wypluć logi błędu ostatniej szansy, gdy jest ona utylizowana, ale to nie wydaje się być wyzwalane w scenariuszu StackOverflow, który testowałem.
Nie mogę korzystać z raportów błędów systemu Windows i znajomych z powodu braku certyfikatu podpisywania kodu.
Nie próbuję "odzyskać" z arbitralnych wyjątków, próbuję tylko odnotować, co poszło nie tak po drodze w dół.
Wszelkie pomysły?
To dobry pytanie. Flaming jest przede wszystkim skierowany na ogólny kod "try-catch-pretend-it-OK". Zgrabne wyłączenia i raportowanie błędów są całkowicie dopuszczalnymi przyczynami do rejestrowania globalnych procedur obsługi wyjątków. – Aaronaught