Вариадические псевдонимы в .gdbinit? - PullRequest
2 голосов
/ 05 августа 2011

Возможно ли это?

Чтобы сделать конкретный пример, рассмотрим следующий макрос:

define pos
po ([self $arg0])
end

Так что теперь, если я введу pos-текст, он превратится в po [self text],Но с несколькими аргументами происходит сбой, например, текст pos textLabel превращается в po [self textLabel], а не в нужный po [[self textLabel] text].

Для другого примера, так же, как три команды

po someIvar_
po [self someMethod]
po [[self someMethod]someOtherMethod] 

выводят описания трех упомянутых объектов, было бы здорово определить макрос pi, который делает то же самое для целых чиселто есть

pi [self someMethod] 

- это то же самое, что и вызов

print (int)[self someMethod], 

и аналогично для

pi [[self someMethod]someOtherMethod].

Ответы [ 2 ]

1 голос
/ 29 сентября 2011

пользовательские команды - это чуть больше, чем строковые замены перед выполнением.Ваш пример pos textLabel text передает два параметра команде, которая рассматривает только один параметр.Второе выброшено.Это должно привести к po [self textLabel] перед выполнением.То, что вы делаете, сравнимо со следующей функцией java-sum:
int sum(int[] args){return args.get(0);}

, что вам нужно, это sth , упомянутый здесь :

define pos
    if $argc == 1
        po [self $arg0]
    end
    if $argc == 2
        po [[self $arg0] $arg1]
    end
    ..... (as many you need)
end

Iне нашли никакой петли.Так что это должен быть единственный способ сделать это, за исключением того, что можно вывести arg0 из аргументов и разрешить рекурсивные вызовы пользовательских команд.Но я думаю, что завершить приведенный выше пример проще.

pi должен быть реализован таким же образом

define pi
    if $argc == 1
        print (int)[self $arg0]
    end
    if $argc == 2
        print (int)[[self $arg0] $arg1]
    end
    ....
end

возможно, есть лучшее решение, но это делает вас на шаг вперед к вашемуназначения.

0 голосов
/ 29 сентября 2011

Если вы пытаетесь использовать команду po pi в терминале, чтобы увидеть значение объекта, или вы хотите изменить значение во время выполнения, вот решение:

Теперь вот лучшее решение для отладки.и проанализируйте целевой код c в XCode 4. Если вы хотите изменить значение переменной во время выполнения, вы можете очень легко изменить ее, просто щелкнув «Выполнить> Показать> Выражения ...», и там вы можете указать значение имени вашей переменной.

Но я подозреваю, что ваша проблема не является проблемой Objective-C, но я все же приложил все усилия, чтобы найти решение.

...