2010-11-19 17 views
6

मैं एक प्रक्रिया खोलने खोला रहा हूँ चलना मैंढेर एक डिबग प्रक्रिया

साथ यह stackwalk कोशिश कर रहा हूँ (सी ++/विंडोज के साथ)

if(CreateProcessA(NULL, // No module name (use command line) 
    (LPSTR)path, //argv[1],  // Command line 
    NULL,   // Process handle not inheritable 
    NULL,   // Thread handle not inheritable 
    FALSE,   // Set handle inheritance to FALSE 
    creationFlags,    // No creation flags 
    NULL,   // Use parent's environment block 
    NULL,   // Use parent's starting directory 
    &startInfo,   // Pointer to STARTUPINFO structure 
    &processInfo)   // Pointer to PROCESS_INFORMATION structure 

जहां

DWORD creationFlags = DEBUG_PROCESS | DEBUG_ONLY_THIS_PROCESS; 

और उसके बाद का उपयोग कर

bool ok = StackWalk64(IMAGE_FILE_MACHINE_I386,m_ps.Handle ,m_th.Handle, 
    &m_stackframe, &m_threadContext, 
    0, NULL, NULL, 0); 

लेकिन स्टैकवॉक मुझे सिर्फ शीर्ष पता देता है और अगला वाला 0 है, जबकि मैं जानता हूं थर्म ई ढेर में अधिक पते हैं।

किसी को भी पता है समस्या क्या है?
धन्यवाद :)

उत्तर

0

ओह ... मैं डीबग प्रक्रिया से घटनाओं को प्राप्त करने के बाद "ContinueDebugEvent" को कॉल करना भूल गया - इसलिए यह रुक गया और स्टैकवॉक वास्तव में सही था। :)

0

इस स्निपेट के आधार पर बताना असंभव है। इस काम के लिए आपको बहुत सही तरीके से सेट अप करना होगा। this detailed blog post पर तर्क देखें।

यदि आप एक बड़ा पोस्ट नहीं कर सकते हैं लेकिन बहुत बड़ा नमूना पोस्ट कर सकते हैं तो अधिक कोड पोस्ट करें। आप STACKFRAME और CONTEXT संरचनाओं को कैसे सेट अप कर रहे हैं? क्या आप StackWalk64 पर लूपिंग कर रहे हैं? कोई भी दिया गया कॉल केवल एक स्टैक फ्रेम देता है।

+0

मैं पहले से ही यह अच्छी तरह से काम कर रहा है जब मैं केवल "CREATE_NEW_CONSOLE" ध्वज के साथ प्रक्रिया बनाई गई थी, लेकिन अब मैं एक डिबग प्रक्रिया stackwalk की जरूरत है। "CreateProcess" में झंडे केवल मेरे द्वारा किए गए अंतर हैं ... – Idov

संबंधित मुद्दे