मेरे लिए क्या काम किया गया है नीचे जैसा कोड है। यह केवल x86 प्लेटफ़ॉर्म पर काम करता है, इसलिए यह केवल एमुलेटर पर डिबगिंग के दौरान उपयोगी है। रिटर्न फ्रेम पॉइंटर्स का उपयोग स्रोत कोड में कूदने के लिए असंतुलन विंडो में किया जा सकता है। मुझे लगता है कि सटीक स्रोत कोड स्थान प्राप्त करने के लिए मानचित्र फ़ाइल का उपयोग करना संभव होना चाहिए।
मैं इस कोड का उपयोग स्मृति लीक खोजने के लिए करता हूं, crtdbg के साथ संयुक्त यह बहुत सारे आवंटन के साथ बहुत बड़े अनुप्रयोग में बहुत अच्छी तरह से काम करता है। वीएस 2013 मेमोरी प्रोफाइलर डेटा रिकॉर्डिंग के 1 मिनट में संभाल सकता है।
FINLINE static DWORD GetCallerFrameNum(int index) {
#if defined(_DEBUG) && defined(_MSC_VER) && defined(_M_IX86)
DWORD caller = 0;
__asm
{
mov ebx, ebp
mov ecx, index
inc ecx
xor eax, eax
StackTrace_getCaller_next :
mov eax, [ebx + 4]
mov ebx, [ebx]
dec ecx
jnz StackTrace_getCaller_next
mov caller, eax
}
return caller;
#else
return 0;
#endif
}
template<class T>
void RecordStackTrace(T& vecOut) {
vecOut.clear();
vecOut.reserve(32);
for (INT iInitLevel = 1; iInitLevel < 32; ++iInitLevel) {
DWORD dwFrameNum = GetCallerFrameNum(iInitLevel);
if (!dwFrameNum)
return;
vecOut.push_back(dwFrameNum);
}
}
यह संभव नहीं है। विश्वसनीय स्टैकवॉक को अनुमति देने के लिए सी ++ कोड बहुत अधिक अनुकूलित किया गया है। आप minidumps के साथ सी ++ दुर्घटनाओं का निदान करते हैं। स्टोर ऐप में आना मुश्किल है। –
उपयोगकर्ताओं के पास एक ऐप क्रैश होने पर क्रैश डंप भेजने के लिए Windows को सक्षम करने का विकल्प होता है। फिर आप अपने डैशबोर्ड में क्रैश डंप देख सकते हैं ताकि आप इसे डाउनलोड कर सकें और इसे डीबगर में खोल सकें। –
सी # कोड में यह संभव नहीं है। इनलाइनिंग और पूंछ-कॉल आपके स्टैक को पूरी तरह से अविश्वसनीय बना देंगे। GetCallingAssembly और इसके संबंधित C# कॉल को इस कारण से Windows 8 .NET प्रोफ़ाइल से निकाल दिया गया है। dbghelp.dll वह जगह है जहां कार्यक्षमता मौजूद है, और हां, यह विंडोज 8 स्टोर ऐप्स के तहत समर्थित नहीं है। आगे बढ़ें और अगर आप चाहें तो इसका अनुरोध करें, लेकिन मेरी पुस्तक में बहुत अधिक प्राथमिकता है :-) –