Вторжение в отладчик на iPhone

POST считают чем-то вроде метода типа фабрики. Вы включаете данные с ним для создания то, что Вы хотите и независимо от того, что находится на другом конце, знает, что сделать с ним. ПОМЕЩЕННЫЙ используется, чтобы обновить существующие данные в данном URL или создать что-то новое, когда Вы знаете то, чем будет URI, и это уже не существует (в противоположность POST, который создаст что-то и возвратит URL ему при необходимости).

16
задан 19 July 2009 в 02:40
поделиться

6 ответов

Первое добавление -DDEBUG к OTHER_CFLAGS на целевом объекте отладки; это определит символ DEBUG при создании отладочной сборки.

Затем добавьте простой макрос assert в заголовок префикса:

#ifdef DEBUG
#define MyAssert(val) _MyAssert(val)
#else
#define MyAssert(val) do { } while(0)
#endif

Затем создайте функцию _MyAssert где-нибудь в модуле :

#ifdef DEBUG
void _MyAssert(int expression)
{
    if (expression == 0) {
       NSLog(@"Assertion failed!"); // Place breakpoint here
    }
}
#endif

Наконец, создайте точку останова в строке NSLog .

1
ответ дан 30 November 2019 в 17:16
поделиться

Что-то не так с простым макросом assert ()? Что-то вроде

assert(pointerToTest != nil);

остановит ваш процесс на этом этапе, если условие не истинно. Если вы работаете под отладчиком, вам будет представлена ​​трассировка стека вызовов, которые привели к неудачному утверждению. Если вы хотите запускать его каждый раз, когда вы попадаете в определенный путь кода, вы можете сделать

assert(false);

. Я считаю эти утверждения чрезвычайно полезными для проверки того, что все IBOutlets не равны нулю, когда окно или представление вызывается из NIB.

0
ответ дан 30 November 2019 в 17:16
поделиться

Я просто установил точку останова в том месте, где хочу остановиться. Xcode постоянно запоминает точки останова, поэтому каждый раз, когда я запускаю приложение с помощью gdb, оно останавливается в этой точке.

Если вы хотите прервать работу при сбоях утверждения, хорошее место для установки точки останова находится в функции objc_exception_throw в Среда выполнения Objective-C, которая фактически вызывает исключение. В окне «Выполнить»> «Показать»> «Точки останова» дважды щелкните строку «Дважды щелкните для символа», затем введите имя.

что на самом деле вызывает исключение. В окне «Выполнить»> «Показать»> «Точки останова» дважды щелкните строку «Дважды щелкните для символа», затем введите имя.

что на самом деле вызывает исключение. В окне «Выполнить»> «Показать»> «Точки останова» дважды щелкните строку «Дважды щелкните для символа», затем введите имя.

0
ответ дан 30 November 2019 в 17:16
поделиться

Полезный человек на форуме разработчиков Apple посоветовал мне использовать asm («ловушка») при работе на устройстве и asm («int3») при запуске на симуляторе. Это заставляет программу взламывать отладчик, если вы запустили свою программу в режиме отладки (Option-Command-Y).

( __ builtin_trap () также ломается в отладчик, но вы не можете продолжить после этого . assert (false) завершает программу с сообщением, но не вторгается в отладчик.)

6
ответ дан 30 November 2019 в 17:16
поделиться

edit

Оказывается, это тоже работает :

#define Debugger () {поднять (SIGINT); }

Думаю, принцип тот же.


Я использую это:

#define Debugger () {kill (getpid (), SIGINT); }

Думаю, работает в симуляторе и на устройстве .. сборка не требуется!

26
ответ дан 30 November 2019 в 17:16
поделиться
Другие вопросы по тегам:

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