2012-01-19 8 views
8

XCode आयोजक, कंसोल में - मैं NSLog उत्पादन पढ़ सकते हैं, लेकिन नहीं printf()। यह संभव असली डिवाइस पर printf() परिणाम पढ़ने के लिए सिम्युलेटर में की तरह एक ही है?iPhone डिबगिंग असली डिवाइस

+0

अगर आप बताएं कि आप ऐसा करना चाहते हैं यह मदद कर सकता है? NSLog() के बजाय आपको printf का उपयोग करने की आवश्यकता क्यों है? क्या ऐसा इसलिए है क्योंकि आप लाइब्रेरी का उपयोग कर रहे हैं जिसमें printf() कथन शामिल हैं? –

+2

क्योंकि मेरे कोड का सबसे बड़ा हिस्सा यह सी कोड है। सार्वभौमिक, एक्सकोड में आईओएस सिम्युलेटर के तहत विंडोज, डायरॉइड, सिम्बियन, आईओएस इत्यादि के तहत चलता है और प्रिंटफ() काम करता है। , दस्तावेज के रूप में इतना printf() बहुत ज्यादा काम करता है – theWalker

उत्तर

17

सबसे आसान समाधान अपनी परियोजना में विश्व स्तर पर printf समारोह ओवरलोड और NSLog उत्पादन के साथ बदलना होगा

int printf(const char * __restrict format, ...) 
{ 
    va_list args; 
    va_start(args,format);  
    NSLogv([NSString stringWithUTF8String:format], args) ;  
    va_end(args); 
    return 1; 
} 
+0

सोहाइब, बड़ा धन्यवाद। यह समाधान पूरी तरह से काम करता है, और मैं बिना किसी बदलाव के सभी सी कोड छोड़ सकता हूं :) – theWalker

+0

@skippy: इसे सही उत्तर के रूप में चिह्नित नहीं किया जाना चाहिए? – newenglander

+2

हमें कोड का यह टुकड़ा कहां रखना चाहिए? – Raptor

-1

स्किप्पि, printf() उत्पादन बयान ग नहीं उद्देश्य सी के लिए, अतः वास्तविक डिवाइस में भी printf() काम नहीं कर रहा है के लिए है।

+0

ऑब्जेक्टिव-सी सी के एक सख्त superset है। लेकिन दृश्यों के पीछे एनएसएलओजी() printf() से अधिक करता है, यही कारण है कि Skippy को परेशानी हो रही है। –

+0

मेरा मानना ​​है कि समस्या वास्तव में stdout के लिए कि printf प्रिंट है, NSLog प्रिंट stderr करने के लिए है, जबकि। –

+2

निक, fprintf (stderr, प्रारूप, args); एक्सकोड ऑर्गनाइज़र कंसोल के तहत काम नहीं करते हैं। – theWalker

4

आप के लिए डिवाइस के कंसोल केवल मुद्रित करने के लिए निम्न आदेश चला सकते हैं:

syslog(LOG_WARNING, "log string"); 

आप <sys/syslog.h> को syslog और LOG_WARNING के लिए स्पष्ट रूप से घोषित किया जाना चाहिए

+0

आप स्पष्ट रूप से उन्हें घोषित किए बिना मानक लॉग कोड का उपयोग कर सकते हैं, मुझे लगता है कि – wxs

+0

हां, जैसा कि मैंने कहा था, syslog और LOG_WARNING को sys/syslog.h में स्पष्ट रूप से घोषित किया गया है (< and > के गलत उपयोग के कारण शामिल का नाम दिखाई नहीं दे रहा था) –

+0

ऑन आईओएस 10 stdout एक्सकोड को भेजा जा रहा है, इसलिए syslog अब और जरूरत नहीं है। –

8

निक लॉकवुड ने उपरोक्त टिप्पणियों में से एक में कहा, प्रिंटफ प्रिंट प्रिंट करने के लिए प्रिंट करते हैं लेकिन एनएसएलओजी प्रिंटर को प्रिंट करता है। आप stderr (Xcode कंसोल) के बजाय printf का उपयोग करने के मुद्रित करने के लिए, इस तरह fprintf उपयोग कर सकते हैं:

fprintf(stderr, "This prints to the Xcode debug console"); 
+0

सरल और obj-C++ के साथ काम करना;) –

+0

ऐसा लगता है कि यह आईओएस – Sergei

+0

@ सर्गेई के लिए सी ++ में काम नहीं करता है, अब XCode 9.2 पर मेरे लिए काम करता है। ध्यान दें कि एनएसएलओजी आउटपुट में उपसर्ग के रूप में कुछ अतिरिक्त जानकारी जोड़ता है। हालांकि fprintf केवल वही है जो आप पैरामीटर के रूप में पास करते हैं। इसके अलावा fprintf एक \ n खुद को मुद्रित नहीं करता है। –

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