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

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

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

Кажется, что всегда есть макрос _LIBCPP_DEBUG, а также _LIBCPP_INLINE_VIBIBITY - но они кажутся везде, поэтому я не уверен, что это корреляция. Кажется правдоподобным, что это имеет какое-то отношение к тому, как работает inlining.

Мне не удалось найти каких-либо примеров с этой проблемой, но для меня она осталась в нескольких бета-версиях - и через полную переустановку ОС.

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

Ответ 1

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

Ответ 2

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