2015-08-26 9 views
6

सी #/विजुअल स्टूडियो में ब्रेकपॉइंट मारते समय निर्दिष्ट अवधि के लिए वर्तमान थ्रेड के निष्पादन में देरी करने का कोई तरीका है? नींद के बाद, निष्पादन जारी रखना चाहिए।सी #/विजुअल स्टूडियो में ब्रेकपॉइंट पर सोने का कोई तरीका?

मुझे पता है कि वीएस में "जब हिट" सुविधा है जो ब्रेकपॉइंट (मुख्य रूप से कंसोल को जानकारी प्रिंट करने के लिए) पर मनमाने ढंग से कोड निष्पादित करने की अनुमति देती है लेकिन यह बहुत सीमित है; यह Thread.Sleep या किसी भी समय लेने वाली परिचालन (जैसे for चक्र) डालने की अनुमति नहीं देता है। प्रतिनिधियों/लैम्ब्डा कार्यों की भी अनुमति नहीं है।

मैं दृश्य स्टूडियो 2012

+1

मुझे संदेह है कि आप यह कर सकते हैं ... आप अपने कोड में सीधे नींद क्यों नहीं डालते? –

+0

@ थॉमस में जोड़ना - शायद एक निर्माण के साथ: 'अगर (System.Diagnostics.Debugger.IsAttached && शायद कुछ अन्य कंडिशन) {// नींद} '। – Corak

+0

मुझे लगता है कि ब्रेकपॉइंट अभिव्यक्ति मूल्यांकनकर्ता ब्रेकपॉइंट पर संदर्भ का उपयोग करता है। यदि आपके प्रोग्राम में एक ऐसा फ़ंक्शन था जो आपके ब्रेकपॉइंट के साथ फ़ंक्शन से पहुंचने वाली नींद लेता है तो आप उसे कॉल कर सकते हैं (शायद अगर यह डमी इंट मान लौटाता है?) लेकिन चूंकि इसके लिए आपको अपना कोड बदलना पड़ सकता है, तो हो सकता है कि यह न हो तुम के बाद हो –

उत्तर

0

साथ काम कर रहा हूँ मैं एक देशी समाधान है कि एक बार की recompile की आवश्यकता है। मुझे यकीन है कि यदि आवश्यक हो तो इसे सी # में अनुवादित किया जा सकता है।

struct THREAD_DATA 
{ 
    int ms; 
    DWORD id; 
    THREAD_DATA(DWORD _id, int _ms) : id(_id), ms(_ms) {}; 
}; 

और इस दो कार्य:

DWORD WINAPI PauseThread(LPVOID p) 
{ 
    THREAD_DATA* ptd = (THREAD_DATA*)p; 
    HANDLE target = OpenThread(THREAD_SUSPEND_RESUME, FALSE, ptd->id); 
    SuspendThread(target); 
    Sleep(ptd->ms); 
    ResumeThread(target); 
    delete p; 
    return 0; 
} 
void PauseCurrentThread(int ms) 
{ 
    THREAD_DATA* ptd = new THREAD_DATA(GetCurrentThreadId(), ms); 
    HANDLE h = CreateThread(NULL, 0, &PauseThread, (LPVOID)ptd, 0, 0); 
} 

आप ब्रेकप्वाइंट पर कर रहे हैं, तत्काल विंडो का प्रयोग चलाने के लिए:

इस संरचना को परिभाषित करें मिलीसेकेंड में PauseCurrentThread(5000) या अपने देरी जो कुछ चाहिए हो।

यदि आप इसे बिना किसी उपकरण के एकाधिक प्रोजेक्ट में करना चाहते हैं - तो मैं शायद इसे स्वचालित रूप से करने के लिए विजुअल स्टूडियो एक्सटेंशन विकसित कर सकता हूं।

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