मैं जितनी जल्दी हो सके कॉल स्टैक को कैप्चर करने की कोशिश कर रहा हूं। अभी यह है कि मैं क्या मिल गया है है:कॉल स्टैक को तुरंत कैप्चर करें
void* addrs[10] = {};
DWORD hash;
RtlCaptureStackBackTrace(0, 10, addrs, &hash);
for(size_t i = 0; i <10; ++i)
{
std::cout << addrs[i] << '\n';
}
यह एक स्मृति ट्रैकिंग प्रणाली में इस्तेमाल के लिए है, इसलिए यह है कि मैं अगर वे बाद में कर सकते हैं (कुछ उपयोगकर्ता प्रेरित घटना पर पतों की एक सरणी के साथ अंत पूरी तरह से ठीक है) कुछ मानव पठनीय में बदल दिया जाना चाहिए।
-
मैं कैसे बारी कर सकते हैं(नीचे संपादित देखें)addrs
कुछ मानव पठनीय में? - क्या
RtlCaptureStackBackTrace
से कुछ भी तेज है? - क्या कॉल स्टैक को पकड़ने के लिए एक क्रॉस प्लेटफ़ॉर्म तरीका है?
संपादित करें:
मैं SymFromAddr
और SymGetLineFromAddr64
का उपयोग करके मानव पठनीय जानकारी में पते बदल गया। हालांकि, new
का मेरा संस्करण CaptureStackBackTrace
का उपयोग करता है जो मूल से ~ 30x लंबा होता है और लगभग हर समय स्टैक ट्रेस के कारण होता है। मैं अभी भी एक तेज समाधान की तलाश में हूँ!