печать в Xcode GDB с C ++ не печатает правильные значения - PullRequest
0 голосов
/ 01 сентября 2009

Я пишу / отлаживаю проект iPhone, который использует большую часть C ++ для обработки изображений. У меня возникают проблемы, когда я использую GDB под XCode, потому что всякий раз, когда я печатаю значения, они совершенно не в порядке с истинными значениями (сравнение
cout << "width" << width << endl; печатает 320, и если я делаю <br> print width в GDB, я получаю значения, как 805300460)

Я предполагаю, что это проблема с GDB, а не с программой, поскольку я не думаю, что перезаписываю память, а значения, выводимые на стандартный вывод, кажутся правильными. Язык автоматически устанавливается на C ++.

Глядя на этот Apple GDB doc кажется, что добавление этого флага компилятора может помочь -gdwarf-2? Не уверен, где это сделать.

Кто-нибудь сталкивался с этой проблемой? Есть идеи?

Ответы [ 3 ]

1 голос
/ 01 сентября 2009

В GDB попробуйте:

p /d width

Возможно, кодировка другая.

Я не думаю, что параметры "карликов" помогут. Параметры Dwarf описывают промежуточный код с исходным кодом во время компиляции. В основном они пытаются сохранить исходный код на этапах компиляции. В gdb это позволяет вам сопоставить номер строки из исходного кода с двоичными данными. Эта проблема не должна иметь ничего общего с переменными.

1 голос
/ 01 сентября 2009

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

0 голосов
/ 23 марта 2013

У меня была похожая проблема при использовании следующей версии GDB:

i686-apple-darwin9-g ++ - 4.0.1 (GCC) 4.0.1 (сборка Apple Inc., 5493) Copyright (C) 2005 Free Software Foundation, Inc.

я узнал, что проблема может быть связана с этой проблемой компилятора GCC:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44731

Это может быть то, что вы испытали, , если значение, которое вы печатали, также должно было использоваться в качестве возвращаемого значения функции.

В моем случае программа была правильно запущенной. Проблема была полностью связана с оптимизацией, имеющей эффект даже при установленной сборке как «нулевые оптимизации», а также с неправильной информацией отладки в двоичном файле. Но сама программа работала нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...