Come riparare un editor di Applescript corrotto

0

Ho un AppleScript che ho lavorato la scorsa settimana o giù di lì. Ho eseguito & ripetere una sceneggiatura, correggere bug, ecc. che sono nel profondo del codice. A volte, la sceneggiatura impiega molto tempo in un determinato passaggio o addirittura rende l'editor degli script non rispondente. In quei casi, stavo costringendo l'editor a uscire e riavviarlo per aggiungere alcune istruzioni di debug o provare un trucco per renderlo più veloce.

Bene, ad un certo punto oggi, ho provato a eseguire lo script dopo un arresto forzato, e tutto è iniziato casualmente in un ciclo in cima alla sceneggiatura che non avevo toccato per settimane. Tutto ciò che il ciclo fa è ripetere su una lista e aggiungere valori a una stringa: semplice. Tuttavia, si blocca in qualche modo in modo casuale in quel ciclo ogni volta che cerco di eseguirlo. Si bloccherà sulla stessa iterazione del ciclo (ad es. Su iterazione 2446) se non modifico il codice - ma se modifico & rieseguire, si blocca in un posto diverso. Quando ho aggiunto una finestra di dialogo a una specifica iterazione in cui pensavo fosse appesa in modo coerente, ha reso tutto il ciclo senza un blocco. Ho rimosso la finestra di dialogo e si è appeso di nuovo su una diversa iterazione ...?! Non c'è motivo per cui possa capire perché dovrebbe essere sospeso a questo punto all'inizio della sceneggiatura. Ho provato a riavviare il computer, eppure si bloccava ancora da qualche parte in quel primo ciclo.

Ho scaricato "Script Debugger 5" e ho provato a eseguire lo script da esso ... non si blocca più! Quindi sto iniziando a pensare che qualcosa sia successo all'Editor di Applescript, forse dai miei vari arresti forzati?

  1. La mia intuizione è corretta - che l'Editor è in qualche modo corrotto?
  2. Se l'editor è danneggiato, come posso ripararlo?

Ecco il ciclo (è il primo) che si blocca su un'iterazione di ciclo casuale. Sopra c'è molto poco codice, che è semplice e non è cambiato da mesi.

tell application "Contacts"
        try
            --with timeout of 5 seconds
            set myEmails to value of first email of every person
            set allemailsstr to ""
            set myPhones to value of first phone of every person
            set allphonesstr to ""
            repeat with m from 1 to count of myEmails
                if (item m of myEmails as string) is not "missing value" then
                    tell application "ASObjC Runner"
                        --with timeout of 1 second
                        set properties of progress window to {detail:"Collecting Email " & m & " of " & (count of myEmails) & " and Phone 0 of " & (count of myPhones)}
                        --end timeout
                    end tell
                    set allemailsstr to allemailsstr & item m of myEmails & "
"
                end if
            end repeat
            repeat with m from 1 to count of myPhones
                if (item m of myPhones as string) is not "missing value" then
                    tell application "ASObjC Runner"
                        with timeout of 1 second
                            set properties of progress window to {detail:"Collecting Email " & (count of myEmails) & " of " & (count of myEmails) & " and Phone " & m & " of " & (count of myPhones)}
                        end timeout
                    end tell
                    set allphonesstr to allphonesstr & item m of myPhones & "
"
                end if
            end repeat
            --set the clipboard to allemailsstr
            --end timeout
        on error errStr
            display dialog "Encountered a timeout while simply adding people to a list"
        end try
    end tell

Posso inserire il codice sopra se richiesto, ma come ho detto, è molto semplice - solo alcune dichiarazioni variabili, l'impostazione della barra di avanzamento della GUI e una finestra di dialogo di coppia. Il numero di contatti su cui si sta ripetendo è superiore a 8K.

FYI, il codice di timeout commentato non stava recuperando le impiccagioni. Quando si verificano gli hang, l'editor non risponde. Questo è uno script di lunga durata, misurato in ore.

UPDATE : Non penso più che l'Editor di Applescript sia corrotto in qualche modo. Sospetto che possa essere una sorta di limite di memoria (o qualche altro limite). Ecco perché. Quando eseguo lo stesso script in Applescript Editor su un altro computer (il mio computer di lavoro), ho ancora un blocco. Script Debugger continua a non bloccarsi.

    
posta hepcat72 10.01.2016 - 22:42
fonte

0 risposte

Leggi altre domande sui tag