it-консалтинг и аутсорсинг
что мы делаем контакты блог

Вопрос к мастерам дебаггинга

Кирилл Воронин 20.09.2011

Времени написать что-то умное и развернутое нет.
Ну да ладно, лучше чаще писать загадки (?) чем ничего не писать. Поэтому будем делать это не на нашем внутреннем форуме, а здесь. На этот раз вопрос непростой, не на двадцать копеек, а на рупь пясят!


Итак, вы отдыхаете с друзьями. Ваш друг говорит:
– Даже не зная об этом, пользователь постоянно применяет базовую технологию Apple Script. Многочисленные компоненты Мака за кадром общаются посредством событий Apple Events, т. е. сообщений, передающих инструкции или данные от программы к программе. Если к псевдониму применяется команда Show Original (Показать оригинал) или к файлу (папке) – команда Get Info (Свойства), то событие Apple Event подскажет Finder, как следует откликнуться на это.

Его утверждение про Finder кажется вам весьма спорным.
Как вы будете проверять это утверждение, чтобы понять ошибается он или нет?

  • У меня Finder отсылал AppleEvents только в Dock, при открытии Get Info, либо Show Original никаких событий не отправлялось. Мониторил так:

    # export AEDebug=1
    # export AEDebugSend=1
    # export AEDebugReceives=1
    # killall Finder && /System/Library/CoreServices/Finder.app/Contents/MacOS/Finder

    { 1 } ‘aevt’: aevt/rapp (i386){
    return id: 2001 (0x7d1)
    transaction id: 0 (0x0)
    interaction level: 112 (0x70)
    reply required: 0 (0x0)
    remote: 0 (0x0)
    for recording: 0 (0x0)
    reply port: 47875 (0xbb03)
    target:
    { 1 } ‘psn ‘: 8 bytes {
    { 0x0, 0x16016 } (Dock)
    }
    fEventSourcePSN: { 0x0,0x16016 } (Dock)
    optional attributes:
    { 1 } ‘reco’: – 1 items {
    key ‘optk’ –
    { 1 } ‘list’: – 1 elements {
    { 1 } ‘keyw’: 4 bytes {
    ‘frnt’
    }
    }
    }

    event data:
    { 1 } ‘aevt’: – 1 items {
    key ‘frnt’ –
    { 1 } ‘bool’: 1 bytes {
    false
    }
    }
    }

    { 1 } ‘aevt’: aevt/rapp (i386){
    return id: 2003 (0x7d3)
    transaction id: 0 (0x0)
    interaction level: 112 (0x70)
    reply required: 0 (0x0)
    remote: 0 (0x0)
    for recording: 0 (0x0)
    reply port: 47875 (0xbb03)
    target:
    { 1 } ‘psn ‘: 8 bytes {
    { 0x0, 0x16016 } (Dock)
    }
    fEventSourcePSN: { 0x0,0x16016 } (Dock)
    optional attributes:
    { 1 } ‘reco’: – 1 items {
    key ‘optk’ –
    { 1 } ‘list’: – 1 elements {
    { 1 } ‘keyw’: 4 bytes {
    ‘frnt’
    }
    }
    }

    event data:
    { 1 } ‘aevt’: – 1 items {
    key ‘frnt’ –
    { 1 } ‘bool’: 1 bytes {
    false
    }
    }
    }

  • Василий, в яблочко, но надо же и коллегам дать время поискать ответ.

    Тогда еще вопрос – а если мы не хотим запускать Finder из Terminal. К примеру, нам нужно понять что происходит в момент входа в систему?

  • Можно создать файл ~/.MacOSX/environment.plist и добавить туда AEDebugSends и AEDebugReceives со значением 1. Результаты мониторить в Console.

    http://developer.apple.com/library/mac/#qa/qa1067/_index.html