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.

Tim Baverstock
źródło
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
adayzdone
źródło
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