Как восстановить поврежденный редактор Applescript

0

У меня есть яблочный скрипт, над которым я работал на прошлой неделе или около того. Я запускал и перезапускал скрипт, исправлял ошибки и т. Д., Которые глубоко в коде. Иногда выполнение сценария может занять очень много времени на определенном этапе или даже приводит к тому, что редактор сценария перестает отвечать на запросы. В этих случаях я заставлял редактор выходить из него и запускал его обратно, чтобы добавить некоторые отладочные операторы или попробовать хитрость, чтобы сделать это быстрее.

Что ж, в какой-то момент сегодня я попытался запустить сценарий после принудительного завершения, и он начал случайным образом зависать в цикле в верхней части сценария, к которому я не прикасался в течение нескольких недель. Все, что делает цикл - это повторяет список и добавляет значения в строку - просто. Тем не менее, он каждый раз зависает в этом цикле каждый раз, когда я пытаюсь запустить его. Он будет зависать на той же итерации цикла (например, на итерации 2446), если я не отредактирую код - но если я отредактирую и перезапущу, он зависнет в другом месте. Когда я добавил диалог к ​​определенной итерации, где я думал, что он постоянно зависает, он прошел весь цикл без зависаний. Я удалил диалог, и он снова завис на другой итерации ...?! Нет никакой причины, по которой я могу понять, почему она должна висеть в этой точке в начале сценария. Я попытался перезагрузить компьютер,

Я скачал "Script Debugger 5" и попытался запустить скрипт из него ... больше не зависает! Итак, я начинаю думать, что что-то случилось с редактором Applescript - возможно, из-за моих принудительных выходов?

  1. Правильна ли моя интуиция - что редактор как-то поврежден?
  2. Если редактор поврежден, как мне его починить?

Вот цикл (он первый), который висит на итерации случайного цикла. Над ним очень мало кода, который прост и не изменился за месяцы.

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

Я могу опубликовать приведенный выше код, если потребуется, но, как я уже сказал, это действительно просто - только некоторые объявления переменных, настройка индикатора выполнения графического интерфейса и пара диалоговых окон. Количество повторяющихся контактов превышает 8K.

К вашему сведению, закомментированный код тайм-аута не уловил зависания. Когда происходят зависания, редактор не отвечает. Это долгосрочный сценарий, измеренный в часах.

ОБНОВЛЕНИЕ : я больше не думаю, что редактор Applescript как-то поврежден. Я подозреваю, что это может быть какой-то предел памяти (или какой-то другой предел). Вот почему Когда я запускаю один и тот же сценарий в Applescript Editor на другом компьютере (на моем рабочем компьютере), я все равно зависаю. Скрипт отладчика все равно не зависает.

hepcat72
источник
О да, я подозревал, что связь Contact.app с icloud является частью проблемы, так как у меня почти не осталось места на диске, поэтому я попытался запустить без подключения к Интернету с тем же результатом. Раньше мне удавалось успешно запускать его в автономном режиме, поэтому я, по-моему, исключил проблему с icloud.
hepcat72
Ну, Script Debugger 5 может запустить весь скрипт без зависаний или ошибок. Это закончилось через 3 часа, 55 минут и 40 секунд. 98% времени это ожидание в приложении контактов. Так почему же редактор Applescript не может запустить его без зависаний?
hepcat72
Попробуйте закомментировать большую часть кодовой базы (используйте комментарии ((* *)), чтобы сделать это быстрее;), и посмотрите, не зависает ли полученный код. Если нет, начните раскомментировать вещи, пока проблема не возникнет снова, и у нас будет представление о том, что является причиной проблемы.
Уильям Т. Фроггард