Visual Studio डीबगर में डायनामिक रूप से आवंटित सरणी कैसे प्रदर्शित करें?


144

यदि आपके पास एक सांख्यिकीय रूप से आवंटित सरणी है, तो Visual Studio डीबगर आसानी से सभी सरणी तत्वों को प्रदर्शित कर सकता है। हालाँकि, यदि आपको डायनामिक रूप से आवंटित और सूचक द्वारा इंगित किया गया है, तो यह केवल सरणी के पहले तत्व को प्रदर्शित करेगा जब आप इसे विस्तारित करने के लिए + क्लिक करते हैं। डिबगर को बताने का एक आसान तरीका है, मुझे इस डेटा को Foo और आकार X के प्रकार के रूप में दिखाएं?

जवाबों:


196

हाँ, सरल। आप कहें

char *a = new char[10];

डिबगर में लेखन:

a,10

आपको सामग्री को ऐसे दिखाएगा जैसे कि वह कोई सरणी हो।


10
यह एक शानदार चाल है, लेकिन अगर आपका पॉइंटर संरचनाओं की एक सरणी की ओर इशारा करता है, तो मैंने पाया है कि वॉच विंडो में "ए, 10" के साथ विस्तारित व्यक्तिगत तत्व खुद को विस्तार योग्य नहीं हैं। मतलब आप इस विधि का उपयोग करके सरणी के तीसरे तत्व में खुदाई नहीं कर सकते। क्या ऐसा कुछ है जिसे दूर किया जा सकता है?
सिरपेंटोर

@SirPentor मेरे पास एक ही मुद्दा है। क्या आपने हल खोज लिया?
becko

@ becko - ख़राब। यह परेशान करने वाला है।
सिरपेंट

वाह, संरचनाओं के लिए इसका बेकार है, आप केवल
var

2
शुरुआती के लिए: यदि आप "ए" वेरिएबल का चयन करते हैं, तो राइट क्लिक करें और वॉच लिस्ट (निरीक्षण) में जोड़ें, यदि आप देखे गए मानों की सूची में डी डिबगर व्यू खोलते हैं (मैं अभी विंडो का नाम नहीं ढूँढ सकता), आप "ए" पर डबल क्लिक कर सकते हैं और उसका नाम बदल सकते हैं "ए, एक्स" जहां एक्स आइटम की संख्या है। अब आप सभी मान देखेंगे।
डार्कगैज

33

किसी सरणी m4x4 में डेटा देखने के दो तरीके हैं:

float m4x4[16]={
    1.f,0.f,0.f,0.f,
    0.f,2.f,0.f,0.f,
    0.f,0.f,3.f,0.f,
    0.f,0.f,0.f,4.f
};

एक तरीका वॉच विंडो (डीबग / विंडोज / वॉच) के साथ है। घड़ी जोड़ =

m4x4,16

यह सूची में डेटा प्रदर्शित करता है:

यहाँ छवि विवरण दर्ज करें

दूसरा तरीका मेमोरी विंडो (डीबग / विंडोज / मेमोरी) के साथ है। एक मेमोरी स्टार्ट एड्रेस निर्दिष्ट करें =

m4x4

यह एक तालिका में डेटा प्रदर्शित करता है, जो दो और तीन आयामी मैट्रिक्स के लिए बेहतर है:

यहाँ छवि विवरण दर्ज करें

बाइनरी डेटा की कल्पना कैसे की जाती है यह निर्धारित करने के लिए मेमोरी विंडो पर राइट-क्लिक करें। विकल्प पूर्णांक, फ़्लोट और कुछ पाठ एन्कोडिंग तक सीमित हैं।


21

एक घड़ी की खिड़की में, सरणी के नाम के बाद एक कॉमा जोड़ें, और उन वस्तुओं की मात्रा, जिन्हें आप प्रदर्शित करना चाहते हैं।


10

एक फिर से आना:

चलो मान लेते हैं कि आपके पास नीचे का सूचक है:

double ** a; // assume 5*10

फिर आप नीचे Visual Studio डीबग वॉच में लिख सकते हैं:

(double(*)[10]) a[0],5

जो इसे नीचे दिए गए सरणी में डाल देगा, और आप एक बार में सभी सामग्री देख सकते हैं।

double[5][10] a;


4

फिर भी ऐसा करने का एक और तरीका यहाँ MSDN में निर्दिष्ट है ।

संक्षेप में, आप कई प्रकार के स्ट्रिंग के रूप में एक चरित्र सरणी प्रदर्शित कर सकते हैं। यदि आपको एक ऐरे के रूप में घोषित किया गया है:

char *a = new char[10];

आप इसे निम्नलिखित के साथ घड़ी की खिड़की में एक यूनिकोड स्ट्रिंग के रूप में प्रिंट कर सकते हैं:

a,su

सभी के लिए MSDN पृष्ठ पर तालिकाओं को अलग-अलग रूपांतरणों के लिए देख सकते हैं क्योंकि काफी कुछ हैं। कई अलग-अलग स्ट्रिंग वेरिएंट, सरणी में अलग-अलग आइटम प्रिंट करने के लिए वेरिएंट, आदि।


1
आपके द्वारा दिए गए MSDN लिंक से - a,[10]आपको अलग-अलग तत्वों को देखने की अनुमति देता है ताकि वे स्वयं विस्तार योग्य हों, भले ही आपके पास जटिल डेटा प्रकारों का एक श्रेणी हो।
एलटीहोड

1

MFC सरणियों के लिए (CArray, CStringArray, ...) अपने टिप # 4 में अगले लिंक के बाद

http://www.codeproject.com/Articles/469416/10-More-Visual-Studio-Debugging-Tips-for-Native-De

उदाहरण के लिए "CArray pArray" के लिए, वॉच विंडो में जोड़ें

     pArray.m_pData,5 

पहले 5 तत्वों को देखने के लिए।

यदि pArray एक दो आयामी CArray है, तो आप अगले सिंटैक्स का उपयोग करके दूसरे आयाम के किसी भी तत्व को देख सकते हैं:

     pArray.m_pData[x].m_pData,y

1

आप डॉक्स में इस रत्न में घड़ी की खिड़की में चर के साथ कर सकते हैं कई चीजों की एक सूची पा सकते हैं: https://msdn.microsoft.com/en-us/library/75w45ekt.aspx

एक चर के लिए, अन्य जवाबों में पहले से ही उल्लेखित चीजें हैं जैसे

a,10 
a,su 

लेकिन प्रारूप और आकार के लिए कई अन्य विनिर्देशक हैं, जैसे:

a,en (shows an enum value by name instead of the number)
a,mb (to show 1 line of 'memory' view right there in the watch window)

0

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

करंट नाम के एक ऐरे के लिए, जिसके अंदर एक एट्रिब नाम का एक ऐरे है, जिसमें एट्रिब नाम का एट्रिब है, यह इस तरह दिखना चाहिए जैसे कि आपको 26 की पोजीशन रखना है:

((*((*current).Attribs)).Attrib)[26]

आप एक ऑफसेट का उपयोग भी कर सकते हैं

((*((*current).Attribs)).Attrib)+25

25 तत्वों को "अगला" दिखाएगा। (मैं VS2008 का उपयोग कर रहा हूं, यह अधिकतम 25 तत्वों को दर्शाता है)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.