Sto provando a catturare lo stack di chiamate il più rapidamente possibile. In questo momento questo è quello che ho:Cattura rapidamente lo stack di chiamate
void* addrs[10] = {};
DWORD hash;
RtlCaptureStackBackTrace(0, 10, addrs, &hash);
for(size_t i = 0; i <10; ++i)
{
std::cout << addrs[i] << '\n';
}
Questo è per l'uso in un sistema di tracciamento di memoria, quindi è perfettamente bene che io alla fine con una serie di indirizzi, se possono in seguito (su qualche guidata dall'utente evento) essere trasformato in qualcosa di leggibile.
-
Come posso trasformare(vedi modifica sotto)addrs
in qualcosa di leggibile? - C'è qualcosa più veloce di
RtlCaptureStackBackTrace
? - Esiste un modo multipiattaforma per acquisire lo stack di chiamate?
Edit:
ho girato gli indirizzi in informazioni leggibili umano usando SymFromAddr
e SymGetLineFromAddr64
. Tuttavia, la mia versione di CaptureStackBackTrace
che utilizza CaptureStackBackTrace
richiede circa 30 volte di più dell'originale e quasi tutto il tempo è dovuto alla traccia dello stack. Sto ancora cercando una soluzione più veloce!