2010-10-10 10 views
93

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

+0

विजुअल स्टूडियो का कौन सा संस्करण आप उपयोग कर रहे हैं? एक्सप्रेस, प्रो, अल्टीमेट ..? – Mark

+0

@ मार्क मैं परम –

+0

का उपयोग कर रहा हूं, तो जेफैमफोन का लिंक मदद करेगा और शायद यह भी अधिक जानकारी के लिए http://msdn.microsoft.com/en-us/library/bb157786.aspx – Mark

उत्तर

85

हां।

थ्रेड विंडो में (डीबग -> विंडोज़ -> थ्रेड) आप जिस थ्रेड को चाहते हैं उसे राइट-क्लिक करें और "थ्रेड पर स्विच करें" का चयन करें।

आप उन थ्रेड पर "फ्रीज" भी चुन सकते हैं जिन्हें आप चलाने से रोकने के लिए डीबग नहीं करना चाहते हैं। यदि आप उन्हें काम करने की उम्मीद करते हैं, तो उन्हें "थू" मत भूलना।

Further reading

+14

I उलझन में हूँ क्या जवाब "यह नहीं किया जा सकता है?" प्रश्न पूछता है कि कैसे एक विशेष थ्रेड पर बंद रहना है ताकि डीबगर उनके बीच चारों ओर कूद न सके। धागे पर स्विच करना ठीक है, लेकिन जैसे ही कोई अन्य धागा कुछ करता है, तो डीबगर इसे कूदता है। अगर मैं अन्य थ्रेड को फ्रीज नहीं कर सकता क्योंकि इसे सामान करने की ज़रूरत है, तो मैं केवल उस धागे पर लॉक कैसे रहूं जिसके बारे में मैं चिंतित हूं? – bubbleking

+0

आयतन: | आपको हमेशा स्विच पर क्लिक करना होगा, हर बार कुछ होता है – deadManN

9

आप भी अपने कोड में एक सशर्त ब्रेकप्वाइंट रख दिया और ब्रेकप्वाइंट हालत में thread.Id == [someValue] या Thread.Name == "[Somename]" डाल सकता है ...

+0

धन्यवाद चार्ल्स, यह सहायक था (पता नहीं था कि आप ऐसा कर सकते हैं)। हालांकि, डीबग करने के लिए मेरे लिए सबसे प्रभावी तरीका यह है कि जेफैमफोन ने लिखा है क्योंकि मुझे ब्रेकपॉइंट पर हिट करने से पहले नाम नहीं पता है और कुछ मान –

2

यह दृढ़ता से दृश्य   स्टूडियो   2008 SP1 में एक बहुत ही इसी तरह की समस्या जैसा दिखता है। यह एक एसपी हॉटफिक्स के बाद तय किया गया था। लेकिन अन्य सबूत हैं कि हॉटफिक्स को कोड बेस में शामिल नहीं किया गया था, यह feedback item भी एक समस्या थी। यह हॉटफिक्सेस को वापस एकीकृत नहीं होने के लिए असामान्य नहीं है।

कोई प्रतिक्रिया आइटम नहीं है जो आपकी समस्या का बिल्कुल वर्णन करता है, कम से कम मुझे मिल सकता है। मैं आपको एक फाइल करने की सलाह दूंगा। इस तरह की बग को पुन: पेश करने के साथ सामान्य परेशानी को देखते हुए, मैं दृढ़ता से अनुशंसा करता हूं कि आप एक प्रजनन परियोजना शामिल करें जो इस समस्या को पुन: उत्पन्न करने के निर्देशों के साथ इस समस्या को प्रदर्शित करती है।

अपनी समस्या के लिए एक तरह के वैकल्पिक हल नहीं है, तो आप धागे आप डिबग नहीं करना चाहती राइट क्लिक करें और फ्रीज चयन डीबग + विंडोज + धागे में जा सकते हैं,। बाद में उन्हें थकना मत भूलना।

ये कीड़े किसी एकल थ्रेड के माध्यम से 2010 सर्विस पैक 1

14

एकल स्टेपिंग दृश्य स्टूडियो में फिर से तय किए गए थे (कुछ कैविएट्स के साथ आप नीचे मेरी कड़ी में देख सकते हैं) ज्यादातर वी.एस. 2012 में तय किया जा रहा है। ब्रेकपॉइंट्स एक दर्द है।

ठंडे और ठंडे धागे सामान्य कामकाज हैं, जैसा कि पिछले उत्तरों ने कहा है, लेकिन यह थकाऊ है, और जब यह थ्रेड जमे हुए दूसरे थ्रेड पर इंतजार कर रहा है तो यह लटक सकता है। रुचि के अपने धागे में अपनी जगह खोने के बिना इन्हें ठीक करना मुश्किल हो सकता है। ,

एक ब्रेकपाइंट बनाएँ, सही ब्रेकप्वाइंट पर क्लिक करें फ़िल्टर क्लिक करें, और threadid = 7740 (आपका धागा दर्ज करें:

एक अन्य उपयोगी कार्यप्रवाह अपने breakpoints, यह भी कुछ उत्तर में कहा गया है पर एक धागा फिल्टर लागू करने के लिए है धागे खिड़की से आईडी)।

यह बहुत कठिन हो सकता है।

माइक्रोसॉफ्ट के लिए मेरा सुझाव एकल चरण (और इसके बदलाव) को ठीक करने के लिए है जब तक कि किसी अन्य थ्रेड में एक स्पष्ट ब्रेकपॉइंट हिट न हो जाए। वर्तमान थ्रेड आईडी के साथ ब्रेकपॉइंट बनाने के लिए उन्हें एक शॉर्टकट (शायद Ctrl-F9) भी जोड़ना चाहिए। यह दूसरा वर्कफ़्लो अधिक सुविधाजनक बनाएगा।

सुझाव ऊपर वोट दें अगर आप सहमत हैं इस उपयोगी होगा, या अपने स्वयं सुझावों को शामिल किया:

https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/8543248-make-the-debugger-stick-to-the-current-thread-inst

+0

देखता है "एकल धागे के माध्यम से एकल चरण अधिकतर वीएस 2012 में तय किया जाता है" - वास्तव में, यह अभी भी वीएस2017 में टूट गया है। – user626528

0

एक बहुत जल्दी समाधान का साधारण मामलों के लिए मौजूद है - स्टीव कड़ी में टिप्पणियों को देखने।

डीबगर केवल उस धागे पर एक कदम पूरा करेगा जिससे चरण शुरू हुआ था। तो यदि आप ब्रेकपॉइंट हिट करते हैं, तो इसे अक्षम करें, और फिर चरणबद्ध करना शुरू करें, आपको किसी भिन्न थ्रेड पर नहीं रोकना चाहिए। आप अपने आवेदन में अन्य breakpoints है और एक अन्य धागा एक हिट है, तो आप मिश्रित धागा राज्य में डिबगिंग के रूप में मेरे मामले में

तो वर्णित एक बार विभिन्न धागे मेरी ब्रेकप्वाइंट मार शुरू कर दिया हो जाएगा मैं बस कुछ ही जारी रखें पर क्लिक कई बार जब तक मैं उस कॉल की पहचान नहीं करता जिसे मैं ढूंढ रहा था - फिर ब्रेकपॉइंट हटा दिया और शेष कोड के माध्यम से कदम रखा, जबकि शेष थ्रेड पर शेष बाकी हिस्सों से हस्तक्षेप किए बिना।

यह स्पष्ट रूप से एक समस्या बन जाती है यदि आपके पास एकाधिक ब्रेकपॉइंट्स हैं जिन्हें आप रखना चाहते हैं, आदि - लेकिन फिर से सरल मामलों के लिए यह करना बहुत आसान है।

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