Макросы традиционно плохо поддерживаются отладочной информацией. Стандарт DWARF (который является наиболее распространенным в macOS и других Unixen) имеет способ хранения информации, но он настолько многословен, что лишь немногие наборы инструментов поддерживают его. Поэтому отладчику нет естественного способа узнать об определениях.
Если у вас есть небольшое количество достаточно независимых макросов, которые вы хотите использовать в выражениях отладки, вы можете поместить их в файл .h и установить файл как "префикс выражения lldb". Это будет включено в источник каждого выражения, которое вы запускаете впоследствии. Сделайте это:
(lldb) settings set target.expr-prefix ~/my-common-defines.h
Вы не можете быть слишком амбициозными (например, #include <unistd.h>
не будет работать). Проблема в том, что большинство системных заголовочных файлов обусловлено набором других #defines. lldb не знает, каковы их значения, поэтому в какой-то момент предварительная обработка префикса expr завершится неудачей.
В качестве альтернативы, в clang также есть концепция под названием «модули», которая представляет собой попытку собрать коллекцию заголовков из какой-то пакет более общедоступен для повторной компиляции. На самом деле он собирает некоторую информацию, которая может привести к сбою синтаксического анализа expr-prefix. Поэтому, если макрос, к которому вы хотите получить доступ, находится в наборе заголовков, встроенных в модуль Clang, вы можете импортировать модуль в контекст выражения lldb, и это также сделает определения из модулей доступными. Например,
(lldb) expr -l obj c - @import Foundation
сделает доступными все определения макросов Foundation.
Аналогично, если ваш Заголовки являются модульными (эта страница углубленно описывает, что это означает:
https://clang.llvm.org/docs/Modules.html
), затем вы можете импортировать созданный вами модуль, и он определяет будет доступен парсеру выражений.