2011-01-25 2 views
0

В XCode, вставить контрольную точку в некоторой линии ..Xcode значение отладчика выражения

Говорят, что линия:

abc = [books valueForKey:@"OfficialName"]; 
x = [appDelegate.books count]; 

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

Но если я хочу, чтобы увидеть значение во время выполнения выражения говорят "appDelegate.books count"

он не показывает значение. Как я могу получить значение этого выражения, как обычный var?

ответ

0

Это несколько неортодоксальные, но для того, чтобы найти то, что вы получите в том, что для петли (см. комментарий hmthur в моем другом ответе):

для (x = 0; x)[обр подсчитывать]; х ++)

Во-первых, распространение цикла в течение трех раздельных линий, так что вы можете отлаживать шаг их один бит за один раз:

for (x = 0; 
    x < [arr count]; 
    x++) 

Теперь поставить точку останова на начало цикла for.

Шаг вниз, так что х < [обр подсчитывать] была выполнена, но не х ++

Теперь в окне просмотра отладчика, откройте группу регистров.

Результат, полученный [arr count], будет присутствовать в регистре $ eax.

Это самое неортодоксальное, не полагайтесь на него для разработки жизненно важного программного обеспечения! Придерживайтесь моего первоначального ответа в интересах здравомыслия.

0

Это не переменная, это сообщение. Но ответ будет сохранен в x, поэтому вместо этого наведите указатель мыши на это.

+0

Я знаю, что в этом случае я присваиваю его x..so его можно найти ... Но мои вопросы общие например. в случае, если мы имеем для (x = 0, x <[arr count]; x ++) , и мне нужно найти «arr count» Как я могу это сделать? – testndtv

+0

Метод «count» будет иметь свои собственные переменные и код. К сожалению, поскольку это часть среды выполнения, вы не сможете войти в нее с помощью отладчика, чтобы увидеть эти переменные. Представьте, что вы написали свой собственный метод «count», вы можете сделать это и изучить эти переменные внутри. Решение вашей проблемы действительно заключалось бы в том, чтобы присваивать [arr count] переменной перед циклом for. Было бы также более эффективно это делать, вместо того, чтобы отправлять сообщение count каждый проход цикла for. – Dave

+0

ОК, я добавлю отдельный ответ ... – Dave

5

Вы можете определить значение переменной с помощью консоли отладчика:

print (int) [arr count] 

или использовать команду po для печати Описание объекта

po objectName 
+1

Обратите внимание, что 'po' является аббревиатурой для' print-object'; Аналогично, 'print' может быть сокращенно' p'. – jlehr

+1

Обратите внимание, что вещью справа от команды 'p' или' po' может быть любое юридическое выражение Objective-C, хотя выражениям сообщений может понадобиться оператор трансляции (поэтому gdb знает, как отформатировать полученное значение), как показывает Дмитрий выше. – jlehr

+2

Да, также обратите внимание, что gdb не может распознать свойства объекта getters: если вам нужно напечатать 'свойство' объекта ', вам нужно вызвать' po [свойство объекта] 'для свойств типа объекта и' p (type) [свойство объекта] 'для свойств, отличных от объекта. –

Смежные вопросы