2011-03-31 13 views
10

मैंने एसडीएल 1.3 डाउनलोड किया और इसे एंड्रॉइड 2.2 डिवाइस पर ओपनजीएल ईएस के साथ एक साथ परीक्षण किया। यह ठीक काम करता है लेकिन मुझे printf कॉल से आउटपुट नहीं मिलते हैं। मैंने android developer page पर उल्लिखित आदेशों का प्रयास किया लेकिन ग्रहण में न तो DDMS और न ही adb logcatprintf का उपयोग करके लिखने वाले तारों की रिपोर्ट करता है। मैंने stdout टैग के लिए फ़िल्टर करना सुनिश्चित किया है।Android पर stdout/stderr को पुनर्निर्देशित क्यों नहीं कर रहा है?

$ adb shell stop 
$ adb shell setprop log.redirect-stdio true 
$ adb shell start 

मुझे क्या याद आ रही है या गलत कर रहा है?

+0

एफडब्ल्यूआईडब्ल्यू, इससे डल्विक वीएम एक थ्रेड बनाने का कारण बनता है जो लॉग फ़ाइल में stdout/stderr की प्रतिलिपि बनाता है। ऐप ढांचे को रोकने/शुरू करने के लिए आपको रूट होने की आवश्यकता है। Http://stackoverflow.com/questions/17188987/android-native-code-debugging/17199704#17199704 भी देखें। – fadden

उत्तर

1

ऐसा करने का एक और तरीका फ़ाइल /data/local.prop है, जिसमें केवल log.redirect-stdio=true लाइन है। शायद यह बेहतर काम करता है? साथ ही, ध्यान दें कि stdout buffered है, इसलिए यह हो सकता है कि आपका आउटपुट अभी भी बफर में बैठा है, फ़्लश होने का इंतजार कर रहा है। आप इसे जांचने के लिए मैन्युअल रूप से fflush पर कॉल कर सकते हैं।

+0

adb push local.prop /data/local.prop अनुमतियों के कारण काम नहीं करता है। क्या मुझे अपने डिवाइस को रूट करना है? – trenki

+1

हम्म, मुझे एहसास नहीं हुआ कि इससे आपको किसी डिवाइस पर परेशानी होगी। हालांकि यह एमुलेटर पर ठीक काम करता है। मुझे पता है कि एमुलेटर का उपयोग करने के लिए दर्द है, खासकर ओपनजीएल के साथ, लेकिन शायद यह आकस्मिक परेशानी शूटिंग के लिए एक विकल्प है? एनडीके समूह पर डेविड टर्नर द्वारा दिए गए एक संदेश के अनुसार (http://groups.google.com/group/android-ndk/msg/0d37b24df6df7cde देखें) स्टॉप/सेटप्रॉप/प्रारंभ को असमर्थित माना जाना चाहिए। – svdree

+0

क्या यह सी से काम करता है? जब मैं ऐसा करता हूं, तब मैं जावा से लॉगकैट को stderr आउटपुट देखता हूं, लेकिन मुझे सी कॉल से आउटपुट को fprintf (stderr, "something") जैसे कुछ नहीं दिखाई देता है। –

2

इस presentation के अनुसार, log.redirect-stdio Dalvik उत्पादन के लिए, रीडायरेक्ट करने के लिए C/C++ उत्पादन होता है (जैसे printf), तो आप डिवाइस पर बिजीबॉक्स स्थापित करने और इस तरह अपने xargs उपयोगिता का उपयोग करना चाहिए:

myprogram | xargs log 

यह स्पष्ट रूप से कोड के लिए काम करता है जिसे एक स्टैंडअलोन निष्पादन योग्य कहा जाता है। यदि यह केवल डीबगिंग उद्देश्यों के लिए है, तो आप अपनी लाइब्रेरी को कॉल करने के लिए एक छोटा प्रोग्राम लिख सकते हैं और xargs का उपयोग करके अपने एप्लिकेशन से कॉल कर सकते हैं।

+1

व्यस्त बॉक्स के बजाय पाइप के साथ समाधान के लिए http://stackoverflow.com/questions/9192749/capturing-stdout-stderr-with-ndk पर मेरा उत्तर देखें। –

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