W Applescript, jak uzyskać numer wiersza lub ślad stosu przy błędzie?


1

Piszę dość skomplikowane Skrypty Jabłkowe, ale kiedy coś pójdzie nie tak - zdarzyło się, że Apple zdarzyło się inaczej - lub podobnie, nie mogę dokładnie określić, gdzie to się nie udało.

W tej chwili zawijam wszystkie procedury obsługi za pomocą bloków try, z błędem, który ponownie podnosi błąd, z odwołaniem do nazwy modułu obsługi i wartości zmiennej, którą ustawiłem w różnych punktach za pomocą programu obsługi, dzięki czemu mogę wyizoluj błąd gdzieś między dwoma punktami.

** Czy istnieje sposób na to, aby Applescript powiedział „Zdarzenie Apple przekroczyło limit czasu w linii 15 w await (), w linii 60 w connectRemoteUser (), w linii 90 w autostartTestUsers ()” bez konieczności kodowania wszystkiego bezpośrednio ?

Nie mogę polegać na podświetlaniu położenia edytora skryptów, ponieważ błędy pojawiają się sporadycznie, gdy skrypt jest w produkcji.


Czy kiedykolwiek znalazłeś rozwiązanie tego problemu? Podzielam twoją frustrację.
rubik's sphere

@ rubik's sphere Niestety, nie. Na szczęście odeszliśmy od AppleScript (którego używałem do uruchamiania wielu pulpitów na tej samej maszynie, aby uruchomić wiele symulatorów), ponieważ Facebook fbsimctl znacznie ułatwił. Jeśli nigdy nie będę musiał pisać kolejnej obrzydliwości Jabłka, będę szczęśliwym króliczkiem.
Tim Baverstock

Odpowiedzi:


1

To brzydkie, ale działa ...

try
    set marker to 1
    -- do stuff
    set marker to 2
    -- do stuff
    set marker to 3
    1 / 0
    set marker to 4
on error errMsg number errNum
    tell application "SystemUIServer"
        display alert (marker & space & errMsg & return & return & "Error number " & errNum as text) buttons "Cancel" cancel button "Cancel"
    end tell
end try

2
To jest prawie to, co powiedziałem, że nie chciałem robić w pytaniu: łapię i ponownie podnoszę błędy dla wszystkich handlerów i tylko wyświetlaję dialog dla najwyższych.
Tim Baverstock
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.