2009-01-30 16 views
6

मेरे मूल सी ++ प्रोग्राम के लिए विजुअल स्टूडियो में मैं डीबग के दौरान कुछ चरों का साजिश प्राप्त करना चाहता हूं। अधिकतर मैं autexp.dat को संपादित करके ऑब्जेक्ट्स के टेक्स्टुअल प्रस्तुति का उपयोग करता हूं। लेकिन कुछ चर के लिए पाठ रूप में मूल्य रखने के बजाय साजिश रखना बेहतर होता है।विजुअल स्टूडियो में क्या मैं अपना वैरिएबल ब्रेकपॉइंट में प्लॉट कर सकता हूं?

अब तक मैं एक समारोह plot(const void* address,const char* type) का इस्तेमाल किया है, और चर पता & प्रकार देने से तत्काल खिड़की यह कहा जाता है, और आंतरिक रूप से उचित प्रकार से यह कास्टिंग।

लेकिन इस विधि दो नुकसान हैं:

  • पहले समारोह लगभग कभी ओवरलोडिंग से काम करता है कि, जब डीबगर से एक समारोह बुला है (इसलिए मैं एक दूसरे पैरामीटर के रूप में प्रकार पारित करने के लिए किया था), और समारोह कॉल कभी कभी दुर्घटनाओं, हालांकि कोड के भीतर से बुलाया जाने पर यह पूरी तरह से काम करता है।
  • दूसरा, साजिश के लिए एक सी ++ फ़ंक्शन लिखने के बजाय, मुझे लिखने के बिना C++ ऑब्जेक्ट के आंतरिक डेटा देने के लिए एक स्क्रिप्टिंग भाषा (जैसे autoexp.dat या VBScript) रखने में दिलचस्पी है, ताकि वह किसी भी रैपर को लिख सके, ताकि मैं डेटा को फ़ाइल में संग्रहीत करने या इसे साजिश करने के लिए स्क्रिप्ट का उपयोग कर सकता हूं।

सामान्य तौर पर मैं मैटलैब या चौधरी आईडीई, जहां मैं कुछ चर बाहर से प्लॉट कर सकते हैं जब प्रोग्राम एक डिबग ब्रेक में है की तरह कुछ है करने के लिए दिलचस्पी है।

+0

जब आप कहते हैं कि "साजिश", आप एक डिबग को तोड़ने में जबकि चर के बारे में जानकारियां सभी तरह के होने का अर्थ यह करते हैं? यह बहुत स्पष्ट नहीं है ... – Klaim

+0

"प्लॉट" का उपयोग करके सामान्य शब्द में मेरा मतलब है कि मेरे लिए उपलब्ध चर/ऑब्जेक्ट के सभी डेटा तक पहुंच है ताकि मैं इसे किसी भी रूप में प्रस्तुत कर सकूं (जैसे कि किसी विशेष प्रारूप में फ़ाइल में संग्रहीत करना) इस विशेष संदर्भ में, "साजिश" का मतलब है कि इसे स्क्रीन पर प्लॉट करें (जैसे कि मैं 2 डी प्लॉट के रूप में वेक्टर/सरणी प्लॉट कर सकता हूं) – abir

उत्तर

0

क्या आप इसके लिए gnuplot का उपयोग कर सकते हैं? डीबग प्रिंट के रूप में प्लॉट करना चाहते हैं, और फिर जब आप ब्रेकपॉइंट पर बैठे हों, तो उसे बाहर निकालें, इसे बाहरी फ़ाइल में कॉपी करें और प्लॉटटर के माध्यम से चलाएं।

3

वीएस 2005 के बाद से, विजुअल स्टूडियो में Visualizers शामिल है, जो लगभग आपकी समस्या के लिए विशेष रूप से डिज़ाइन किया गया हो सकता है। एमएसडीएन अवधारणा को बेहतर तरीके से बताता है:

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

here देखें कि एक लिखने के तरीके पर एक ट्यूटोरियल के लिए।

+0

विज़ुअलाइज़र अच्छे हैं। लेकिन दुर्भाग्य से मुझे देशी सी ++ एप्लिकेशन के लिए इसका उपयोग करने का कोई उचित तरीका नहीं मिला। वे .NET आधारित अनुप्रयोगों के लिए हैं। – abir

+0

मिश्रित सी ++/सी ++ सीएलआई ऐप? ऐसा लगता है कि पुनर्स्थापन मौजूद है क्योंकि विजुअलाइज़र के डीबगी पक्ष को .NET इंटरफ़ेस का खुलासा करने की आवश्यकता है। इससे कोई फर्क नहीं पड़ता कि यह कहां से डेटा प्राप्त करता है। – MSalters

1

जैसा कि अन्य ने ध्यान दिया है, मुझे यकीन नहीं है कि आप वास्तव में क्या प्लॉट करना चाहते हैं। मैं आमतौर पर समझता हूं, जब कोई कहता है कि वह "कुछ साजिश" करना चाहता है, तो वह आमतौर पर संख्यात्मक मूल्यों के साथ कुछ सरणी का मतलब है। यदि यह आपके मामले में सच है, तो इंटेल की Array Visualizer कुछ मदद की हो सकती है। इसे स्वतंत्र रूप से डाउनलोड किया जा सकता है, यह दृश्य स्टूडियो में एकीकृत होता है, और आप इसे दो तरीकों से उपयोग कर सकते हैं: एक स्टैंडअलोन एप्लिकेशन के रूप में या डिबगिंग ("कुछ ब्रेकपॉइंट में रहते हुए) के दौरान) ताकि आप सरणी मानों को प्लॉट कर सकें" प्रोग्राम चल रहा है "।

2

आप NetDebugPlot और NetDebugLog के साथ रीयल-टाइम चार्ट में चर प्लॉट कर सकते हैं।

#include "NetDebugLog.h" 

NetLog(myvar); 
NetLog("test", myvar2); 

NetDebugPlot

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

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