If you have a modern compiler then it supports outputting the pre-processor result.<p>If you have a modern toolchain stack unwinding is already friendly to macro expansion.<p>A production build does not mean you don&#x27;t have symbols, it just means you don&#x27;t have symbols in the executable. Stash your build symbols somewhere so you can symbolize the stacks offline. Macros don&#x27;t change this. They are consistent output for the same input.<p>Macros are not evil. Abusable, yes, but they also solve various sets of problems just <i>better</i> than any other solution.