Странное поведение gdb в Xcode 4.2 после перехода на LLVM 3.0 и libc ++ - PullRequest
1 голос
/ 02 января 2012

После замены компилятора на LLVM 3.0 и libc ++ для поддержки C ++ 11 (unique_ptr - это немного драгоценности :)) я заметил, что gdb не работает должным образом, когда я пытаюсь напечатать информацию об объекте. Я проверил следующее:

1) У меня есть переменная-член std :: vector . Если я устанавливаю точку останова внутри класса, содержащего этот член var, и выполняю «print _reusableEntities.size ()», я получаю это:

Точка останова 2, GameObjectMgr :: createGameObject (this = 0x0) в / Users / hexdump / Dropbox / Прототипы игр / Re-World / src / ReWorld / Engine / EntityManagement / GameObjectMgr.mm: 92 92 go = std :: move (_reusableEntities.back ()); Отлаживаемая программа остановилась в функции, вызванной из GDB. Когда функция (GameObjectMgr :: createGameObject ()) будет выполнена, GDB будет молча остановить (вместо того, чтобы продолжать оценивать выражение, содержащее вызов функции).

Но если у меня есть строка кода вроде:

int size=_reusableEntities.size()

это читает размер хорошо. Это действительно кажется проблемой GDB при проверке размера вектора. С другой стороны, я вижу, как вектор содержит правильные значения в окнах Local vars.

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

Это действительно странно и боль в заднице при отладке.

2) У меня есть F7, настроенная для переключения функций. Это работало до тех пор, пока я не внес эти изменения, теперь не имеет значения, нажимаю ли я F6 (шаг в) или F7 (шаг в шаге), я всегда получаю внутри код unique_ptr при копировании или получаю необработанный указатель из него: /.

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

...