Отладчик шагает глубже, когда пытается выйти из C ++ 11 std lib

Я использую (Apple) LLVM 4.1 в Xcode 4.5 (но я видел то же самое в более ранней бета-версии).
У меня он нацелен на C ++ 11 и я использую libc ++ (новая, C ++ 11 включена, версия библиотеки std LLVM).

В отладочной сборке, если я пытаюсь перешагнуть через код, который вызывает функцию библиотеки std (например, конструктор std :: vector), отладчик останавливается в реализации std lib, и если я пытаюсь выйти из него, он делает шаги еще глубже!
Это может занять несколько (иногда 10 или более) шагов, прежде чем я вернусь к своему собственному коду (и я никогда не хотел вмешиваться в это первое место).

Кажется, всегда присутствует макрос _LIBCPP_DEBUG, а также _LIBCPP_INLINE_VISIBILITY — но, похоже, они есть везде, поэтому я не уверен, что это корреляция. Хотя кажется правдоподобным, что это как-то связано с тем, как работает инлайн.

Я не смог найти никого другого, кто сталкивался бы с этой проблемой — но для меня она сохранилась в нескольких бета-версиях — в выпуске — и после полной переустановки ОС.

Кто-нибудь еще видели этот? — но лучше все еще знает, что происходит?

10

Решение

lldb в Xcode 4.5 не обрабатывает переходы между встроенными функциями. Стандартная библиотека libc ++ имеет много функций, которые всегда встроены, даже если они собраны в -O0, что делает это проблемой. Похоже, Джим Ингам работал над этим около месяца назад, например. увидеть первый патч http://llvm.org/viewvc/llvm-project?view=rev&Пересмотр = 163044 и несколько последующих патчей в течение следующей недели или двух, но, конечно, они еще не выпущены в выпущенной версии lldb. Вы можете построить и использовать версию командной строки lldb с общедоступного сайта, http://lldb.llvm.org/ (см. в частности http://lldb.llvm.org/build.html ), единственный сложный момент — не забывать следовать инструкциям подписи кода в lldb / docs / code-signature.txt.

7

Другие решения

Я видел это тоже, и не только с libc ++, но и с libstdc ++ (стандартная библиотека GNU C ++, используемая GCC и clang в режиме C ++ 03). Я всегда полагал, что это связано с встраиванием, что, я думаю, иногда случается и в отладочных сборках.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector