Jak zdebugować czemu wywala się usługa?

0

Mam programik, który jest windowsową usługą napisaną w C#. Po migracji na nowy serwer usługa nie startuje, tzn. konkretnie to startuje i się wyłącza:

The [nazwa usługi] service on Local Computer started and then stopped. Some services stop automatically if they are not in use by other services or programs.

Niestety w logu zdarzeń mamy tylko suchą informację:

The [nazwa usługi] service entered the stopped state

Nie ma natomiast żadnych warningów i errorów, które wskazywałyby na wyjątek. Nie ma też informacji, że usługa weszła w "running state" - jest tylko informacja o zatrzymaniu.

Dodałam więc w usłudze try/catcha w metodzie OnStart:

protected override void OnStart(string[] args)
{
try
{
jobs.Start();
}
catch (Exception e)
{
MessageBox.Show(e.Message + "\r\n" + e.StackTrace);
}
}


I takiego samego w samym konstruktorze klasy. Niestety, żadne MessageBox'y się nie pojawiły...

Jak debugować takie coś? Jak metoda "na MessageBoxy" nie daje efektów, to ja nie wiem... ;)
0

Dobra, zapomnijmy o MessageBox'ach...
http://stackoverflow.com/questions/2786598/show-a-message-box-from-a-windows-service

Wymieniłam więc MessageBoxa na:

jobEventLog.WriteEntry(e.Message + "\r\n" + e.StackTrace, EventLogEntryType.Error);


I już mam wyjątek. Z innego miejsca w kodzie...
0

Skoro już sobie poradziłaś, to zostawię kilka luźnych przydasiów na przyszlość.
Adplus lub procdump i łapiesz first chance exception. Możesz też podpiąć się debuggerem przy starcie aplikacji i wtedy masz powiadomienie o każdym zdarzeniu. Możesz odpalić procmon i prześledzić, co Twoja aplikacja robi przez cały czas życia. Jest też Intelli Trace, który zapisuje każde działanie aplikacji i pozwala na debugowanie w przeszłości. Aczkolwiek najprostsze metody, czyli zapięcie się na UnhandledException app domeny i zalogowanie do pliku powinno na początek wystarczyć, szczególnie że kontrolujesz aplikację (w sensie możesz ją włączyć i wyłączyć kiedy zechcesz).

0

Mozna wywolac debugger z kodu:

 Debugger.Break()

https://msdn.microsoft.com/en-us/library/25xczxa2(v=vs.110).aspx

Jak program dojdzie do tej linijki to wyswietli sie komunikat z pytaniem czy chcemy odaplic debugger. Jezeli sie zgodzisz to odapli VS z kodem.

0

Użyj logowania do pliku (do zahardocowanej ścieżki).
Logowanie systemowe może wymagać rejestracji wiadomości.
Logowanie przez message boxa już ogarnełaś że nie działa.

Zaloguj na starcie (na samiutkim starcie) że wystartowane (data, ścieżka aplikacji).
Potem dodawaj podobne wiadomości do loga w trybie "binary search".
Czyli najdalej gdzie uważasz że program powinien dojść.

  • nie ma wpisu? dzielisz odległość od startu na pół i dodajesz logowanie
  • jest wpis? to dodajesz kolejny gdzieś pośrodku od najdalszego od startu
    (tzw. debugowanie przez logowanie)

1 użytkowników online, w tym zalogowanych: 0, gości: 1