2009-06-12 29 views
8

Tworzę swoje pierwsze zadanie timera i chcę je debugować. Zainstalowałem zadanie czasomierza za pomocą funkcji i dodałem je do kolekcji JobDefinitions aplikacji WWW i dodałem SPMinuteSchedule uruchamiane co 5 minut (do celów testowych).Debugowanie zadań timpoint timera

Następnie w Visual Studio próbowałem dołączyć debuggera do procesu WebApplication, procesu Centralnego Administratora i procesu OWSTIMER.exe, ale nie będzie on debugował metody Execute TimerJob. Czego tu mi brakuje?

P.S. Status zadania timera mówi, że powiodło się, więc jest uruchomiony. Dziwne ...

Odpowiedz

9

Kiedy debuguję TimerJobs, wstawiam Asercję na samym początku metody Execute, która zawsze kończy się niepowodzeniem. Dzięki temu za każdym razem, gdy wywoływana jest metoda Execute, uzyskujesz wyskakujące okienko, dzięki czemu możesz mieć pewność, że TimerJob został uruchomiony i ma wystarczająco dużo czasu na dołączenie debuggera. Oczywiście musisz usunąć Asercję przed uruchomieniem.

System.Diagnostics.Trace.Assert(false); 

Jeszcze jedną ważną rzeczą jest ponowne uruchomienie usługi timera po wdrożeniu nowej biblioteki DLL. W przeciwnym razie usługa Timer uruchomi TimerJob ze starej biblioteki DLL.

+0

Wygląda na to, że działa teraz ... Złożone rozwiązanie i restartowany timer, debugger działa ... – Colin

+0

Świetnie! Debugowanie TimerJobs również spowodowało u mnie ból głowy. – Flo

+1

Interesujący pomysł na zapewnienie asercji ... także, jeśli użyjesz Debug.Assert zamiast Trace.Assert, to jakakolwiek kompilacja wydania, którą zrobisz, nie będzie miała tego kodu (chociaż w pewnym momencie w twojej kompilacji debugowania i tak chcesz to skomentować). – mundeep

2

najczęstszych powodów:

  1. Czy zrobić kompilacji debugowania?
  2. Czy umieściłeś plik .pdb w tym samym folderze co zespół? (Prosty search powinien wyjaśnić, jak - np. Debugging Timer Jobs)
  3. Przeczytaj również Debugging Custom Timer Jobs na MSDN dla niektórych wskazówek.
  4. Wykonaj 3 R: Przebuduj & Ponownie rozmieść zespół & Zresetuj usługę licznika czasu przed ponownym podłączeniem.
+0

Dodano Debug.Assert = false, wznowiona moją maszynę, ale OWSTIMER nie ładuje moje PDB (I nawet skopiowane go do C: \ Windows \ assemly Folder \ GAC_MSIL \ \ ? ??? – Colin

+0

Przebudowałem projekt, usunąłem go ręcznie za pomocą Eksploratora Windows, a następnie skopiowałem plik ręcznie również za pomocą Eksploratora, a następnie ponownie skopiowałem pdb, a debugowanie włączyło się do procesu ... – Colin

+0

Przeprosiny zapomniały wspomnieć o zwykłej przebudowie/proces redoploy/restart, edytuje odpowiedź :) – mundeep