Я знаю, что последние версии Xcode показывают встроенные функции и позволяют входить во встроенный код. Я пытаюсь отладить код, который интенсивно использует std :: function, и я действительно предпочел бы, чтобы и стек вызовов, и операция step-in просто пропускали все детали реализации std :: function. Новый libc ++ помечает эти детали атрибутом «always_inline», чтобы они всегда были встроенными (даже в отладочных сборках), что именно то, что я хочу. На самом деле, поскольку я не отлаживаю реализацию std :: function, я просто не хочу видеть эти функции …
Вы не можете сделать это прямо сейчас. Вы можете изменить способ, которым lldb сообщает о стеке кадров в обратном следе — смотрите http://lldb.llvm.org/formats.html — но я не могу придумать, как заставить его подавить (синтезированные) кадры встроенного стека из вашей обратной трассировки. У gdb была настройка, позволяющая избежать синтаксического анализа всей встроенной информации в отладочной информации — без шага, без возврата — но это не было добавлено в lldb.
На самом деле, вы действительно не хотите отключать пошаговую поддержку встроенного кода. Без определения того, какой код является встроенным, режим перехода «следующий» или «шаг за шагом» ужасно прерывается встроенным кодом. Xcode 4.6 довольно хорош в этом — но в остальных случаях вы «перешагиваете» строку исходного текста со встроенным кодом и видите реальную встроенную реализацию из .h
файл из-за неверной отладочной информации от компилятора. Получить правильную отладочную информацию довольно сложно, и хотя большинство из них верны, вы все равно иногда будете использовать встроенный метод с Xcode 4.6. Возможно, для контейнеров, которые вы используете, вы сильно бьете по нему, но это не частый случай.
LLDB дает вам возможность настроить вывод bt
, увидеть http://lldb.llvm.org/formats.html , но нет способа заставить его подавлять встроенные кадры стека. Вы можете написать стека в Python довольно легко, что делает то же самое, что и настоящий bt
но пропускает встроенные кадры — SBFrame::IsInlined()
метод делает это простым. Но это не поможет в случае, когда вы используете XCode.
Других решений пока нет …