Xcode डिबगिंग - चित्र प्रदर्शित करना


99

मुझे Xcode डिबगर का उपयोग करना बहुत पसंद है। आप एक चर के मूल्य पर एक नज़र डाल सकते हैं और इसे बदल भी सकते हैं।

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

Xcode इस का समर्थन नहीं कर सकता है। शायद एक बाहरी उपकरण है जो छवियों को प्रदर्शित करने में मदद करेगा?

जवाबों:


273

Xcode डिबगर में छवियों का निरीक्षण करने के लिए क्विक लुक का उपयोग करें ।

डीबगर में NSImageया चुनें UIImage, फिर क्विक लुक "आई" आइकन पर क्लिक करें।

Xcode डिबगर टूलबार में "आंख" आइकन

OS X के अन्य क्षेत्रों की तरह, आप spacebarक्विक लुक का भी उपयोग कर सकते हैं !

क्विक लुक के माध्यम से Xcode डिबगर में एक UIImage देखना

डीबगर में क्विक लुक को अपनी कक्षाओं के लिए भी लागू किया जा सकता है:

कस्टम प्रकारों के लिए त्वरित रूप सक्षम करना

Xcode डिबगर में चर क्विक लुक सुविधा आपको ग्राफ़िकल रेंडरिंग के माध्यम से ऑब्जेक्ट चर की स्थिति का एक त्वरित दृश्य मूल्यांकन प्राप्त करने की अनुमति देती है, जो पॉपुवर विंडो में डिबगर चर दृश्य या आपके स्रोत कोड में या तो प्रदर्शित होता है।

यह अध्याय बताता है कि आप अपने कस्टम वर्ग प्रकारों के लिए एक त्वरित लुक विधि कैसे लागू करते हैं ताकि उन प्रकारों के ऑब्जेक्ट चर को भी त्वरित रूप से पॉपओवर विंडो में नेत्रहीन रूप से प्रस्तुत किया जा सके।


13
श्रेष्ठ। फ़ीचर। कभी!
सेव

2
यह वर्ष का सबसे मूल्यवान उत्तर है!
vedrano

8
युग कोडिंग में Xcode और मुझे इस सुविधा के बारे में कभी नहीं पता था! यह कमाल का है!!! बहुत बहुत धन्यवाद
Joan Cardona

2
इस सुविधा के बारे में जानता था, लेकिन स्पेसबार टिप के लिए धन्यवाद! माउस के साथ आंख क्लिक करने से बहुत आसान है। :)
चिंतन पटेल

1
आकर्षण की तरह Xcode 10 और Swift 4.2 के साथ काम करें। धन्यवाद।
अपरेशकोव

16

संपादित करें:

Xcode 5 के रूप में, डिबगर आपको UIImage / CGImageRef चर का दृश्य प्रतिनिधित्व दिखा सकता है!

Xcode खुद नहीं कर सकता। मैं बाहरी उपकरणों के बारे में नहीं जानता।

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

मेरे पास उस उद्देश्य के लिए एक कोड है, जो मूल रूप से उस तरह दिखता है:

NSData *imageData = UIImagePNGRepresentation(self.myUIImage);
[imageData writeToURL:desktopURL atomically:YES];

और मैं सिर्फ इस कोड को कॉपी-पेस्ट कर रहा हूं जहां मैं रन पर एक छवि की सामग्री देखना चाहता हूं।

यकीन है कि इस कोड के रूपांतरण की उच्च लागत के लिए संभव कारण जैसे ही छुटकारा पाने के लिए सुनिश्चित UIImageकरने के लिएNSData


2
बस जिज्ञासु: आप ऐसा क्यों कहते हैं "(और ऐसा नहीं करना चाहिए")? एक समय था जब लोग कहते थे कि कंप्यूटर में "स्क्रीन" नहीं होनी चाहिए, क्योंकि वे बहुत महंगे थे, या यह कि प्रोग्रामर द्वारा उपयोग किया जाने वाला टेक्स्ट एडिटर आपके कोड को "सिंटैक्स" नहीं चाहिए। कुछ बिंदुओं पर हमें पुरातन विचारों से आगे बढ़ने की आवश्यकता है, निश्चित रूप से?
unsynchronized

ठीक है, तो मैं "वापस" नहीं लेना चाहिए। काश एक दिन IDE डिबगिंग करते समय छवियों की व्याख्या करेगा।
एवी शुक्रॉन

यह एक महान विचार है और बस मेरी मदद की - धन्यवाद। एक बार स्पष्ट रूप से किसी ने इसे इंगित किया, लेकिन फिर भी एक महान सूचक।
स्कॉट लिटिल

@unsynchronized क्या आप देखेंगे ... Xcode 5 डिबगर में चित्र दिखा सकता है ...
Avi Shukron

14

Xcode 5 के लिए संपादित करें: अब जब आप एक छवि चर नाम पर होवर करते हैं, तो दाईं ओर एक "आंख" आइकन होता है। वर्तमान छवि को देखने के लिए बस इसे क्लिक करें!

नोट: कभी-कभी यह Xcode में विफल रहता है, भले ही छवि सही हो। यदि ऐसा होता है, या यदि आपके पास UIImage वैरिएबल नहीं है (जैसे कि यह किसी अन्य ऑब्जेक्ट की संपत्ति है, तो आप अभी भी पुराने उत्तर का उपयोग कर सकते हैं:

पुराना उत्तर: अवराम के उत्तर के साथ शुरू करते हुए, मैंने reldile किए बिना या इसे किसी दृश्य में जोड़ने के लिए lldb से iOS छवि प्रदर्शित करने के लिए कुछ प्रयोग करने का प्रयास किया। मैं आखिरकार साथ आया:

e [UIImagePNGRepresentation(myImage) writeToFile:@"/Users/<userName>/Desktop/myImage.png" atomically:NO];

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

यदि आप iOS डिवाइस पर काम कर रहे हैं, तो आप उपयोग कर सकते हैं

 e [UIImagePNGRepresentation(myImage) writeToFile:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0] stringByAppendingString:@"/myImage.png"] atomically:NO];

फिर आप खोजक का उपयोग कर सकते हैं; अपनी डिवाइस चुनें; "फ़ाइलें"; तब आपका देव ऐप, और इसे देखने के लिए छवि को अपने डेस्कटॉप पर कॉपी करें।


+1000000 यह अद्भुत समाधान है! मैं यह जोड़ना चाहूंगा कि यदि आप डिवाइस पर डिबगिंग कर रहे हैं, तो आप डिवाइस से छवि को पुनः प्राप्त करने के लिए iFunBox या iExplorer जैसी किसी चीज़ का उपयोग कर सकते हैं।
क्वेंटिन

आप सीधे "/ उपयोगकर्ता / <अपना उपयोगकर्ता नाम> /" भी लिख सकते हैं; इस तरह आपको GUIDs के माध्यम से अपने अस्थायी फ़ोल्डर की तलाश नहीं करनी पड़ेगी
Dannie P

अच्छा सुझाव (ध्यान दें कि आपको / उपयोगकर्ता / <अपने उपयोगकर्ता नाम> / का उपयोग करना है, यह ~ / के साथ काम नहीं करता है)। सुझाव के अनुसार अपडेट करें।
मैककवर्थ

बहुत बढ़िया सुझाव @mackworth धन्यवाद।
अरण्गो_ a६

13

यदि आप lldb कंसोल के साथ काम करना पसंद करते हैं, तो छेनी कमांड "विज़ुअलाइज़" का उपयोग करें

टिप:

स्थापना के बाद, आप UIImage को कार्रवाई के साथ सेट करने के बाद एक सशर्त विराम बिंदु सेट कर सकते हैं: "myUIImageToShowWithQuickLook की कल्पना करें"

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

डिबगर बंद होने पर यह आपको स्वचालित रूप से छवि दिखाएगा।


4

क्या होगा यदि आप चर दृश्य के माध्यम से छवि को प्राप्त नहीं कर सकते हैं?

@Pkamb ने जो कहा, उसकी गूंज - आप किसी छवि को देखने के लिए चर दृश्य का उपयोग कर सकते हैं। लेकिन अगर आपको छवि नहीं मिल रही है तो क्या होगा?

उदाहरण के लिए मेरे पास एक छवि है (contentViewController.view.subviews[0].subviews[1] as? UIImageView).image

लेकिन अगर मैं contentViewControllerचर दृश्य में विस्तार करने की कोशिश करता हूं तो यह मेरे साक्षात्कारों को उजागर नहीं करता है

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

आप क्या कर सकते हैं राइट क्लिक करें, एक अभिव्यक्ति जोड़ें, और फिर आप इसे देख सकते हैं!

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

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

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


फिर आपको ऊपर दिए गए कमांड का उपयोग करने में सक्षम होना चाहिए: po [UIImagePNGRepresentation ((contentViewController.view.subviews [0] .subviews [1] के रूप में? UIImageView) .image) writeToFile: @ "/ Users / <userName> / DesktopName। /watchImage.png "atomically: NO];
मैके

-7

आप अपनी छवि की रेखा में एक विराम बिंदु डाल सकते हैं, और फिर डिबगर में, बस लिख सकते हैं:

po your_UIImage_object

poइसका अर्थ है print object, यह एक GDB कमांड है, जो आपके द्वारा दी गई छवि के अनुसार, ऑब्जेक्ट के बारे में कई उपयोगी जानकारी प्रदर्शित करेगा।


1
वास्तव में सीधे UIImage ऑब्जेक्ट के साथ पो का उपयोग करना केवल इंस्टेंस के वर्ग नाम मेमोरी एड्रेस को कंसोल पर प्रिंट करेगा। कुछ इस तरह: <UIImage: 0x7fc98df6c7d0>
डैनियल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.