Próbuję przechwycić stos wywołań tak szybko, jak to możliwe. Teraz to, co mam:Szybkie przechwytywanie stosu wywołań
void* addrs[10] = {};
DWORD hash;
RtlCaptureStackBackTrace(0, 10, addrs, &hash);
for(size_t i = 0; i <10; ++i)
{
std::cout << addrs[i] << '\n';
}
ten jest przeznaczony do użytku w systemie śledzenia pamięci, dlatego tak perfekcyjnie, że skończę z tablicą adresów jeśli mogą później (po pewnym napędzany przez użytkownika zdarzenia) zostać przekształconym w coś, co jest czytelne dla człowieka.
-
Jak mogę skręcić(patrz edycja poniżej)addrs
w coś czytelnej dla człowieka? - Czy jest coś szybszego niż
RtlCaptureStackBackTrace
? - Czy istnieje sposób przechodzenia między platformami w celu przechwycenia stosu wywołań?
Edit:
Odwróciłem adresy do ludzkiej czytelnej informacji za pomocą SymFromAddr
i SymGetLineFromAddr64
. Jednak moja wersja new
, która używa CaptureStackBackTrace
, trwa ~ 30 razy dłużej niż oryginał i prawie cały czas jest ze względu na ślad stosu. Wciąż szukam szybszego rozwiązania!