2010-06-09 9 views
5

Moja aplikacja zgłasza wyjątek InvalidCastException w środowisku kontroli jakości, którego nie mogę odtworzyć w fazie projektowania.Jak utworzyć minidump procesu .NET, gdy wystąpi wyjątek z pewną pierwszą szansą?

Chcę uzyskać minizestaw w wyjątkowym momencie. Wiem o adplus, ale nie jestem pewien, jak go użyć, aby utworzyć minizrzutu, gdy zgłoszony zostanie wyjątek InvalidCastException. Najwyraźniej nie rozróżnia żadnego wyjątku .NET od innego. Być może jestem w błędzie i jest jakiś sposób. Lub jest inne narzędzie do tego. Najlepiej darmowy.

W każdym razie, czy ktoś może poradzić sobie z tym problemem?

Dzięki.

UPDATE

  1. Build to build debugowania zarówno QA i dev. Jednak QA uruchamia złożone scenariusze możliwe w laboratorium, których twórcy nie mogą odtworzyć. Dlatego potrzebuję możliwości zrobienia zrzutu podczas pracy w QA.
  2. Mogę zmodyfikować kod i utworzyć minidump z kodu. Jednak życzę sobie bardziej elastycznego rozwiązania, które nie wymaga modyfikacji kodu za każdym razem, gdy wystąpi taki problem.

UPDATE 2

Faktycznie, mam „skradziony” kod pokolenie Minidump z John Robbins SuperAssert.Net Ponownie, jest to kod do generowania Minidump z pewnego punktu betonowej, natomiast muszę bardziej elastyczny podejście w stylu adplus. Podejście Johna Robbinsa polega na stworzeniu skryptu cdb, a następnie wywołanie debuggera cdb z tym skryptem, aby dołączyć go do procesu i utworzyć zrzut. Nie korzysta z interfejsu API MiniDumpWriteDump.

+0

szybkie pytanie - czy masz linii kodu, w którym obsada się dzieje?Czy środowisko QA jest kompilowane w trybie "Release", a nie "Debugowanie"? – Paddy

+0

Środowisko kontroli jakości jest takie samo jak deweloper, jeśli chodzi o kompilację. Liczy się to, że środowisko QA jest rozproszone, podczas gdy deweloperzy uruchamiają wszystko na tym samym komputerze. – mark

Odpowiedz

5

Najprostszym sposobem jest wypuszczenie go przez całą drogę z aplikacji, umożliwienie użytkownikowi zgłoszenia go firmie Microsoft i zarejestrowanie się do Raportowania błędów systemu Windows.

Alternatywnie, możesz przechwycić go ręcznie za pomocą SUPERASSERT .NET firmy John Robbins (lub podzestawu jego kodu).

AKTUALIZACJA (dla rozwiązania bez kodu): Zobacz, jak wygląda system Internals 'Systems: ProcDump.

+0

Chodzi o to, że potrzebuję rozwiązania nieinteraktywnego i potrzebuję go teraz. – mark

+0

Rozważ moje drugie rozwiązanie. Wykonanie minidumpu aktualnie uruchomionego procesu nie jest banalne, więc polecam po prostu użyć kodu Johna Robbinsa. –

+0

Właściwie to "ukradłem" kod generujący minidump od Johna robbinsa SuperAssert.Net Ponownie, jest to kod do generowania minidumpa z konkretnego konkretnego punktu, podczas gdy ja potrzebuję bardziej elastycznego podejścia w stylu adplus – mark

2

Jest to możliwe, musisz załadować sos.dll w swoim skrypcie ADPlus. Ten blog post pokazuje, jak.

Uważaj na wątpliwe radości z debugowania zarządzanego kodu z minizrzutu. Jeśli napotykasz trudne do zdiagnozowania wyjątki, gdy wciąż znajduje się w QA, ponownie natrafisz na niego, gdy przejdzie do produkcji. W ten sposób dodano smoki z oddechem. Zadbaj o dobre nieobsługiwane rejestrowanie wyjątków, pisząc obsługę zdarzeń dla AppDomain.UnhandledException. Rejestrowanie e.ExceptionObject.ToString() daje bogactwo informacji.

3

Czy prawdopodobnie chcesz używać interfejsu API MiniDumpWriteDump w aplikacji C#? Spójrz na http://blog.kalmbach-software.de/2008/12/13/writing-minidumps-in-c/ dla przykładu kodu lub wyszukaj w Internat dla MiniDumpWriteDump i C#.

Jeśli używasz Visual Studio 2010 można załadować minizrzutu kierować w Visual Studio (patrz http://msdn.microsoft.com/en-us/library/d5zhxt22(v=VS.100).aspx)

+0

Zaktualizuj pytanie, w jaki sposób mogę utworzyć minidump z kodu. – mark

Powiązane problemy