In Applescript, come posso ottenere un numero di riga o una traccia dello stack in caso di errore?


1

Sto scrivendo alcuni script abbastanza complessi, ma quando qualcosa va storto - evento Apple scaduto - o simile, non posso dire con precisione dove sia fallito.

Al momento, sto avvolgendo tutti i gestori con i blocchi try, con un errore on che ripristina l'errore, con un riferimento al nome del gestore e al valore di una variabile che ho impostato in vari punti attraverso il gestore in modo da poter isolare l'errore da qualche parte tra due punti.

** Esiste un modo per ottenere Applescript per dire "Evento Apple scaduto alla riga 15 in await (), alla riga 60 in connectRemoteUser (), alla riga 90 in autostartTestUsers ()" senza dover codificare tutto direttamente ?

Non posso fare affidamento sull'evidenziazione della posizione dell'editor dello script perché gli errori si verificano in modo intermittente quando lo script è fuori produzione.


Hai mai trovato una soluzione per questo? Condivido la tua frustrazione.
sfera di rubik

@ rubik'ssphere Purtroppo, no. Fortunatamente, ci siamo allontanati da AppleScript (che stavo usando per avviare più desktop sullo stesso computer, per eseguire più simulatori) perché fbsimctl di Facebook ha reso le cose molto più facili. Se non dovrò mai scrivere un altro abominio di Apple, sarò un coniglietto felice.
Tim Baverstock,

Risposte:


1

È brutto ma funziona ...

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
È praticamente quello che ho detto che non volevo fare nella domanda: sto già rilevando e rilanciando errori per tutti i gestori, e sto solo mostrando i dialoghi al massimo.
Tim Baverstock,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.