Estoy tratando de capturar la pila de llamadas lo más rápido posible. En este momento esto es lo que tengo:Capture la pila de llamadas rápidamente
void* addrs[10] = {};
DWORD hash;
RtlCaptureStackBackTrace(0, 10, addrs, &hash);
for(size_t i = 0; i <10; ++i)
{
std::cout << addrs[i] << '\n';
}
Esto es para uso en un sistema de seguimiento de la memoria, por lo que está perfectamente bien que termino con una matriz de direcciones si pueden más tarde (en algún evento guiado por el usuario) se convertirá en algo legible por humanos.
-
¿Cómo puedo convertir(ver la edición más abajo)addrs
en algo legible para las personas? - ¿Hay algo más rápido que
RtlCaptureStackBackTrace
? - ¿Hay una forma de plataforma cruzada para capturar la pila de llamadas?
Editar:
di vuelta a la direcciones en información legible por humanos mediante el uso de SymFromAddr
y SymGetLineFromAddr64
. Sin embargo, mi versión de new
que usa CaptureStackBackTrace
tarda ~ 30x más que el original y casi todo ese tiempo se debe al seguimiento de la pila. ¡Todavía estoy buscando una solución más rápida!