2010-01-05 2 views
1

Я разрабатываю приложение для iPhone с использованием смешанных Obj-C и C++. Похоже, что иногда значения различных полей полностью поддельны, как сообщается gdb при переходе из файла Obj-C в файл C++. Например, в способе:Является ли GDB в Xcode просто чешуйчатым?

int count = 1;

для (INT I = 0; я < рассчитывать; ++ я) {

int x = 0; // put a breakpoint here to see how many times it gets hit. 

}

в этом примере, иногда GDB сообщит значение для подсчета '', который является иным, чем '1'. это может быть 126346, например. но, пройдя через код, цикл повторяется только один раз, указывая, что значение «count» фактически было ожидаемым значением.

Я новичок в Xcode. Я, наверное, просто пропустил что-то основное. Но это заставляет сомневаться в ваших инструментах. Кто-нибудь еще видел странность в этой области? Решил?

ответ

2

Я не видел переменные опечатки gdb, как вы говорите - однако, если вы скомпилируете в выпуске вместо Debug, вы можете столкнуться с некоторыми странными вещами с оптимизированным кодом или не увидеть некоторые переменные ...

Из того, что вы описали, это почти похоже на то, что у вас есть неинициализированное значение для «count». Если ваш код выглядел так:

int count; 

Затем посчитайте может быть почти ничего, и, таким образом, иногда будет 0 - но в других случаях некоторые крупные случайное число.

+0

Я согласен, что когда отладчик сообщает вам, что значение счета является довольно опасным значением, неинициализируется (или поврежденной), определенно нужно что-то искать, но тот факт, что цикл повторяется только один раз, ясно указывает, что значение, сообщаемое gdb, и то, что код, используемый во время выполнения, не согласуется. – Eric

+0

Это зависит от того, когда вы сделали вывод, чтобы увидеть значение. В его ответе Нитин имеет хороший пример. –

0

Пила странность, в этом отношении и во многих других. Никогда не решался.

Иногда использование консоли GDB напрямую помогает. Способ, которым Xcode обертывает GDB, определенно непрозрачен.

1

Вы уверены, что все время получаете значение «значение», используйте NSLog и видите значение в консоли. Я думаю, что это всегда будет показывать 1. Кроме того,

int count = 1;// put a breakpoint here to see the value of count, before and after execution of the statement. 

for (int i = 0; i < count; ++i) { 

    int x = 0; 

} 

Когда точка останова, что конкретная строка не ударил, и шаг throuogh, чтобы увидеть изменения в стоимости, первоначально значение, заданное с помощью GDB будет быть некоторыми произвольными значениями, поскольку переменная не инициализируется, и как только она будет инициализирована, значение изменяется на новое значение.

+0

Это кажется мне весьма вероятным ... gdb не должен иметь проблемы с отображением значения int! –

+0

перед инициализацией и после освобождения объекта это происходит в xcode, может отображаться размер, местоположение или что-то подобное распределенным для переменной. Я не уверен, какой из них, но это то, что происходит здесь. В любом случае, это не беспокоит наши коды, в чем же необходимость идти позади этого. Как только мы инициализируем переменную, она должна работать так, как мы планируем, пока не выпустим ее, вот и все. – Nithin

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