Cuando utiliza una macro, el código detrás de ella se expande a la misma línea de código fuente, en lo que respecta al depurador. El depurador ve MY_MACRO() y trata esa línea individual sin importar cuánto código realmente está dentro de la macro.
En C++, las plantillas pueden hacer la mayoría de las cosas que pueden hacer las macros, pero funcionan mucho, mucho más elegantemente. Ya que son una parte real del lenguaje, ¡también puede intervenir con el depurador! Por ejemplo:
// Macro FIND() - ugly, buggy, and can't ever be stepped in to by debugger!
#define FIND(begin, end, value) \
{ \
for (; begin != end; ++begin) { \
if (*begin == value) \
break; \
} \
}
// Templated find() - works beautifully and can be debugged like a real function!
template<typename Iter, typename T>
Iter find(Iter begin, Iter end, const T& value)
{
for (; begin != end; ++begin) {
if (*begin == value)
return begin;
}
}
Nota: encontrar() es, por supuesto, una función de biblioteca estándar, pero yo simplemente he escrito esto para compararla con una macro, para demostrar cómo se puede depurar. Sin mencionar que la versión de macro tiene muchos otros problemas. Regla de oro: ¡evite las macros para escribir código siempre que sea posible!
Dado que esto es lo más cercano a lo que podría hacer por mi problema, acepto esta respuesta. – Alphaneo