Macros are not traditionally well supported by debug info. The DWARF standard (which is the most common one on macOS & other Unixen) has a way to store the information, but it is so verbose very few toolchains support it. So there's no natural way for the debugger to know about defines.
If you have a small number of fairly independent macros you want to use in debug expressions, you can put them in a .h file, and set that file as lldb's "expression prefix". This will get included into the source of every expression you run subsequently. Do this by:
(lldb) settings set target.expr-prefix ~/my-common-defines.h
You can't get too ambitious here (e.g. #include <unistd.h>
won't work). The problem is that most system header files are conditioned by a set of other #defines. lldb doesn't know what their values are, so at some point preprocessing the expr-prefix will fail.
Alternatively, clang also has a concept called "modules" which is an attempt to make the collection of headers from some package more shareable for repeated compilation. It actually captures some of the info that would cause the expr-prefix parsing to fail. So if the macro you want to access is in a set of headers that are built into a Clang module, then you can import the module into lldb's expression context, and that will make the defines from the modules available as well. So for instance:
(lldb) expr -l objc -- @import Foundation
will make all the Foundation macro definitions available.
Similarly, if your headers are modular (this page goes into depth on what this means:
https://clang.llvm.org/docs/Modules.html
) then you can import the module you've created, and its defines will be available to the expression parser.