Я могу получить предупреждения для отправки нулевых сообщений объектов?

Меньшие журналы

Другой несовершеннолетний, про для хранимых процедур, который не был упомянут: когда дело доходит до трафика SQL основанный на SP доступ к данным генерирует очень меньше трафика. Это становится важным при контроле трафика для анализа и представляющий - журналы будут намного меньше и читаемы.

13
задан nall 15 October 2009 в 16:22
поделиться

2 ответа

После небольшой игры с отладчиком это то, что я обнаружил.

Вы можете установить точку останова в objc_msgSend с условием точки останова для первого аргумента равным нулю (получатель):

  1. Откройте окно «Точки останова»: Command-Option-B
  2. Дважды щелкните последнюю строку, чтобы создать новую символическую точку останова
  3. Введите символ: objc_msgSend
  4. Введите условие в столбце «Условие»: * (int *) ($ esp + 4) == 0

Когда вы запустите свой исполняемый файл, он очень часто ломается, так как очень часто отправляются сообщения с нулевым значением. Чтобы получить обзор того, что В этом случае вы можете дополнительно настроить точку останова:

  1. Нажмите кнопку «плюс», чтобы добавить команду точки останова.
  2. Выберите «Команда отладчика» во всплывающем окне.
  3. Введите p (char *) * (int * ) ($ esp + 8) в поле команды
  4. Установите флажок «автопродолжение» в строке точки останова (той, которая отмечена маленькой стрелкой в ​​последнем столбце)

Теперь, когда вы продолжаете выполнение, вы увидите все имена сообщений (отправляемые в nil) в консоли отладчика.

Все вышеперечисленное работает только на Intel Mac (32-битное Cocoa или Cocoa Touch в симуляторе). Архитектуры PPC или ARM используют другие имена регистров и соглашения о вызовах. Я оставляю это вам в качестве упражнения, чтобы узнать, как заставить это работать на этих платформах;)

из всплывающего окна.
  • Введите p (char *) * (int *) ($ esp + 8) в поле команды
  • Установите флажок «Автопродолжение» в строке точки останова ( тот, который отмечен маленькой стрелкой в ​​последнем столбце)
  • Теперь, когда вы продолжите выполнение, вы увидите все имена сообщений (отправляемые на ноль) в консоли отладчика.

    Все вышеперечисленное работает только на компьютерах Intel Mac (32 бита Cocoa или Cocoa Touch в симуляторе). Архитектуры PPC или ARM используют другие имена регистров и соглашения о вызовах. Я оставляю это вам в качестве упражнения, чтобы узнать, как заставить это работать на этих платформах;)

    из всплывающего окна.
  • Введите p (char *) * (int *) ($ esp + 8) в поле команды
  • Установите флажок «Автопродолжение» в строке точки останова ( тот, который отмечен маленькой стрелкой в ​​последнем столбце)
  • Теперь, когда вы продолжите выполнение, вы увидите все имена сообщений (отправляемые на ноль) в консоли отладчика.

    Все вышеперечисленное работает только на компьютерах Intel Mac (32 бита Cocoa или Cocoa Touch в симуляторе). Архитектуры PPC или ARM используют другие имена регистров и соглашения о вызовах. Я оставляю это вам в качестве упражнения, чтобы узнать, как заставить это работать на этих платформах;)

    вы увидите все имена сообщений (которые отправляются в nil) в консоли отладчика.

    Все вышеперечисленное работает только на Intel Mac (32-битное Cocoa или Cocoa Touch в симуляторе). Архитектуры PPC или ARM используют другие имена регистров и соглашения о вызовах. Я оставляю это вам в качестве упражнения, чтобы узнать, как заставить это работать на этих платформах;)

    вы увидите все имена сообщений (которые отправляются в nil) в консоли отладчика.

    Все вышеперечисленное работает только на Intel Mac (32-битное Cocoa или Cocoa Touch в симуляторе). Архитектуры PPC или ARM используют другие имена регистров и соглашения о вызовах. Я оставляю это вам в качестве упражнения, чтобы узнать, как заставить это работать на этих платформах;)

    16
    ответ дан 1 December 2019 в 22:57
    поделиться

    В качестве альтернативы вы можете использовать dtrace:

    Использование dtrace для записи трассировки сообщений в ноль

    И это также можно сделать в Instruments .

    4
    ответ дан 1 December 2019 в 22:57
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: