16 stycznia 2015

Diagnozowanie błędów w Taskerze

Im bardziej skomplikowane profile i taski się tworzy tym większa jest szansa na popełnienie błędu. Jak tego błędu szukać w Taskerze? Z osobistego doświadczenia wiem, że czasem można kilka dni patrzeć na błąd i go nie widzieć dlatego najlepiej od początku wyrobić w sobie nawyki, które pomogą go uniknąć. A jak już błąd się pojawi to trzeba znać sposoby na jego odnalezienie i zdiagnozowanie. Poniżej postaram się przedstawić sposoby jakie sam używam do tego, z lepszym bądź gorszym skutkiem.

Skokowe wykonywanie tasków

Począwszy od Taskera 4.6 jest możliwość skokowego wykonywania tasków. W dodatku kolorowymi kropkami aplikacja informuje czy dana akcja została wykonana bez błędów (kropka zielona) czy zakończyła się błędem (kropka czerwona). Znakiem "play" oznaczona jest akcja, która zostanie wykonana w następnym kroku.

W trakcie przerwy pomiędzy kolejnymi akcjami można wyjść z ekranu edycji tasku i na zakładce Zmienne podejrzeć wartości zmiennych na danym etapie wykonywania tasku.

Wyświetlanie błędów/ostrzeżeń Taskera

Prostą metodą na poszukiwanie błędów jest włączenie opcji Popup Errors/Warnings w Taskerze. Przy każdym wejściu do interfejsu Taskera, aplikacja wyświetli okno z błędami/ostrzeżeniami, które wydarzyły się od ostatniej wizyty w interfejsie. Fakt, że opis tych błędów i ostrzeżeń jest bardzo enigmatyczny i zazwyczaj nic nie mówi poza tym, że błędy są i należy je znaleźć.

Tosty podczas działania tasku

Najprostszym sposobem przeciwdziałania powstawania błędów oraz ich wyszukiwania jest używanie tostów umieszczonych na danym etapie wykonywania tasków. Tekst tostów może być bardzo różny. Ja czasem wstawiam do tostów numer akcji, w której są generowane dzięki czemu wiem jak daleko dotarło wykonywanie tasku. Czasem najlepiej sprawdza się tost z wartością zmiennej, która jest w danym tasku obrabiana. Wszystko zależy od tego co się tworzy i co chce się sprawdzić.

Własny log

Bardzo dobrym sposobem na kontrolę poprawności pracy profilów których działanie rozciągnięte jest w czasie jest stworzenie własnego loga tekstowego. Tworzy się go za pomocą akcji Write File z zaznaczonymi opcjami Add Newline (każdy zapis dodaje nową linię) oraz Append (zapis nie nadpisuje zawartości pliku). W polu Text należy podać takie dane jakie będą potrzebne do diagnozowania działania profilu. Najczęściej data i czas są bardzo pomocne. Samo miejsce umieszczenia zapisu do loga też należy dobrze przemyśleć. Zbyt duża ilość danych w logu utrudni jego interpretację zbyt mała nie dostarczy wystarczających danych.

Run Log

Ostatnią metodą, jaką używam, jest Run Log. Jest to funkcja wbudowana w Taskera. Uruchamia się ją z ekranu głównego naciskając menu / More / Run Log.

Run log po włączeniu pokazuje zmiany statusów profili oraz wykonywanych tasków i akcji. Dla łatwiejszej orientacji wpisy rozróżnione są kolorami:
  • fioletowy odpowiada za taski,
  • pomarańczowy za profile,
  • niebieski za akcje,
  • biały/czarny za monitor i usługę Taskera.
Po dłuższym przytrzymaniu danego elementu pokazuje się menu, które umożliwia przejście do odpowiedniego profilu/tasku/akcji lub filtrowanie loga.
Analizując log należy pamiętać, że taski oznaczone jako Anon to te, którym nie nadano nazw (właśnie dlatego opłaca się to robić) oraz, że wpisy, w których występuje zmienna pokazują jej wartość po zakończeniu tej akcji.

Kolumna ID tabeli loga

ID oznacza wewnętrzny numer identyfikacyjny profilu/tasku/akcji jaki nadaje im Tasker.
Po kropce w ID akcji umieszczany jest jej numer w tasku, przykładowo akcja o ID 20.3 to trzecia akcja tasku o ID 20.
Po dwukropku w ID tasku umieszczany jest numer kopii tasku równocześnie wykonywanego, przykładowo task o ID 6:2 to druga kopia tasku o ID 6 wykonywana równocześnie (dwie kopie tego tasku są wykonywane w tym momencie).

Kolumna Status tabeli loga

Status opisuje nowy status zdarzenia powodującego wpis w logu. Jeśli dany wpis zawiera błąd oznaczany jest kolorem czerwonym.

    Statusy usługi (Services)
  • Start usługa została uruchomiona. Niespodziewane uruchomienie usługi najczęściej jest powodowane przez zabicie jej przez system operacyjny gdy opcja Run In Foreground była wyłączona.
  • Stop usługa została zatrzymana.
  • Restart usługa została zrestartowana. Zazwyczaj ma to miejsce gdy nowe dane trzeba doczytać po zmianie konfiguracji przez użytkownika.

    Statusy profili
  • Active warunki profilu zostały spełnione i stał się on aktywny.
  • Inactive nie wszystkie warunki profilu były spełnione i przestał on być aktywny.
  • Instant profil typu instant był na moment aktywowany. Profil typu instant to nic innego jak profil z kontekstem typu Event, profil z kontekstem Time gdzie czas From i To jest ustawiony ten sam oraz profil z kontekstem Time z włączoną opcję Repeat.

    Statusy tasków
  • RejBad task został odrzucony np. nie miał zadeklarowanych akcji.
  • RejCopy task został odrzucony gdyż uruchomiona jest jego druga kopia z włączoną opcją Abort New Task.
  • RejMaxQ osiągnięto maksymalną długość kolejki tasków, którą można skonfigurować w opcjach.
  • Running task został dołączony do kolejki tasków i zaczyna być wykonywany.
  • ExitErr wykonywanie tasku zostało zatrzymane ze względu na pojawienie się błędu.
  • ExitOK wykonano wszystkie akcje tasku.
  • ExitRep task został zatrzymany gdyż uruchomiona została jego druga kopia z włączoną opcją Abort Existing Task.
  • ExitKill task został zatrzymany gdyż usługa Taskera została zatrzymana.

    Statusy akcji
  • Disabled akcja została wyłączona przez użytkownika i pominięta podczas wykonywania tasku.
  • Err podczas wykonywania akcji wystąpił błąd, który spowodował przerwanie wykonywania tasku.
  • ErrIgnore podczas wykonywania akcji wystąpił błąd ale wykonywanie tasku nie zostało przerwane, prawdopodobnie przez zaznaczoną opcję Continue On Error.
  • Exception wystąpił niespodziewany błąd, prawdopodobnie spowodowany przez system operacyjny lub Taskera, co spowodowało zatrzymanie wykonywania tasku.
  • OK akcja wykonana poprawnie.

To tyle na dziś. Jeśli będziesz miał pytania lub coś wyda Ci się niezrozumiałe to zapraszam do zadawania pytań w komentarzach. Postaram się pomóc.