MacOS 13.4.1 XCode 14.3.1 lldb не показывает std::string, как исправить?
Пробую написать небольшой консольный проект на с++ в XCode
Рабочая машина топовый MacBool Pro 16 Intel 2019, основая работа в виртуалках Windows и Linux через Parallels, обновлять OS пока не вижу необходимости, хотя предлагает Tahoe 26.4.1. XCode поставил по совместимости с версией OS.
Проблема - отладчик не показывает содержимое std::string. Погуглил, есть такой баг именно в той версии LLDB, что идет с XCode 14.3. Пишут, что надо обновить Command Tools до 15. Или собирать LLDB самому.
Вопрос - как это аккуратно сделать, без обновления XCode? Команда softwareupdate --list в списке доступных обновлений тулс не предлагает. Значит ли это, что более свежие тулс с моей системой несовместимы? Или пробовать вручную сгрузить Command Line Tools for Xcode 15 dmg, удалить старую версию тулс и установить скачанную?
Попутно - стоит ли обновлять MacOS на Тахо? Ухудшится ли скорость работы, автономность? Комп исключительно для работы, новые фичи в оси не интересуют, обновление только для установки свежих инструментов.
== Или есть способ просто решить проблему в настройках XCode?
=== Update ===
1 Настройка Guard Malloc в схеме не помогла, возможно, это был случайный эффект в какой-то минорной версии XCode
2 Command Line Tools 15 с поправленный lldb поставить можно, но настроить XCode на их использование нельзя, XCode всегда будет использовать свои. Выбор версии CLT в Settings->Locations есть только в том случае, если найдена другая XCode. Использование отдельно установленных CLT возможно только через терминал. Возможно, какой-то хак и есть, но простого пути нет.
3 Проблема решилась установкой XCode 15.2, которая стала доступна после апдейта ОС до 13.7.8. Это максимум, что можно выжать из Вентуры
Вот что выдает gemini
Самое быстрое решение (Summary Only)
Попробуйте заставить LLDB перечитать переменную без использования "умных" форматтеров:
В консоли отладки во время брекпоинта frame variable --raw-view my_string
Если в сырых данных (raw view) вы видите символы, значит, проблема только в визуальном отображении.
Есл это помогло
В файл ~/.lldbinit добавить type category enable libcxx
Возможно это тоже будет полезно
Проблема "Strict Aliasing" или оптимизации
Если вы компилируете с флагом -O2 или -O3, отладчик часто теряет связь с std::string из-за того, что компилятор оптимизировал структуру строки.
Решение: Убедитесь, что для отладочной сборки (Debug) стоит флаг -O0 (Optimization Level в настройках Xcode).
Там есть обходной путь без апдейтов — в Xcode открой Edit Scheme → Diagnostics и убери галку "Enable Guard Malloc". При включённом Guard Malloc LLDB в Xcode 14.3.x криво работает с std::string, это известный workaround.
По CLT: softwareupdate не предлагает 15-е тулсы потому что они требуют 13.5 минимум, ты на 13.4.1 — отсюда тишина. Если хочется всё-таки обновить CLT — достаточно дотянуться до Ventura 13.5 или 13.6 (патч, не смена мажора), тогда CLT 15 с developer.apple.com встанет нормально. До Тахо апгрейдиться необязательно.
Guard Malloc была отключена, вкл/выкл на отображение строки не влияло, в терминале лог меняется в соответствии с настройкой
Апдейт, промежуточные итоги
Обновил ОС до 13.7.8, это последний минор. При запуске XCode предложил то-то обновить, ок, было ли что-то реально выполнено, непонятно, скорее просто проверка. 15-х тулз по-прежнему нет в softwareupdate --list. Скачал dmg тулс 15, установились в /Library/Developer/CommandLineTools. Замечу - тулс 15.3 попросит уже MacOS 14.
pkgutil --pkg-info=com.apple.pkg.CLTools_Executables
package-id: com.apple.pkg.CLTools_Executables
version: 15.0.0.0.1.1694021235 вроде норм
Но новая проблема - XCode не видит тулс-15, только свои 14.3.1 (из bundle?). Пока решения не нашел
Пробовал xcode-select --switch /Library/Developer/CommandLineTools - ошибок команды не дает, но и нужного эффекта пока нет. Копаю дальше.