android - ट्रेस फ़ाइल खोलने में त्रुटि: ऐसी कोई फ़ाइल या निर्देशिका नहीं(2)




eclipse android-emulator (5)

असल में, समस्या यह है कि या तो /sys/kernel/debug आरोहित नहीं है, या चल रहे कर्नेल में कोई ftrace tracers संकलित नहीं है ताकि /sys/kernel/debug/tracing अनुपलब्ध हो। यह कोड फेंकने वाला कोड है ( platform_frameworks_native/libs/utils/Trace.cpp ):

void Tracer::init() {
    Mutex::Autolock lock(sMutex);

    if (!sIsReady) {
        add_sysprop_change_callback(changeCallback, 0);

        const char* const traceFileName =
                "/sys/kernel/debug/tracing/trace_marker";
        sTraceFD = open(traceFileName, O_WRONLY);
        if (sTraceFD == -1) {
            ALOGE("error opening trace file: %s (%d)", strerror(errno), errno);
            sEnabledTags = 0;   // no tracing can occur
        } else {
            loadSystemProperty();
        }

        android_atomic_release_store(1, &sIsReady);
    }
}

लॉग संदेश निश्चित रूप से थोड़ा अधिक जानकारीपूर्ण हो सकता है।

मुझे उपरोक्त त्रुटि मिल रही है:

ट्रेस फ़ाइल खोलने में त्रुटि: ऐसी कोई फ़ाइल या निर्देशिका नहीं (2)

जब मैं एमुलेटर पर अपने एंड्रॉइड एप्लिकेशन चलाता हूं। क्या कोई मुझे बता सकता है कि इसके लिए संभावित कारण क्या हो सकता है?

मैं एंड्रॉइड-एसडीके -20 का उपयोग कर रहा हूं और नीचे दी गई लाइनें AndroidManifest.xml में जोड़ दी गई हैं

<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="15" />

मैंने लाइन भी जोड़ दी है:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

चूंकि मैंने सोचा था कि एसडी कार्ड को लिखने के साथ कुछ समस्या हो सकती है।


आपके पास एम्यूलेटर में आपके असली एसडी कार्ड तक पहुंच नहीं होगी। आपको अपने एमुलेटर को अपने विकास वातावरण पर एक निर्देशिका में अपने एसडी कार्ड के रूप में कार्य करने के लिए निर्देशित करने के लिए इस tutorial में चरणों का पालन करना होगा।


ऐसा इसलिए होता है क्योंकि आपने कंप्यूटर में minSdkVersion या targetSdkVersion स्थापित नहीं किया है। मैंने अभी इसका परीक्षण किया है।

उदाहरण के लिए, यदि आपके पास उन पंक्तियों को आपके Manifest.xml में है:

<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />

और आपने अपने कंप्यूटर में केवल API17 इंस्टॉल किया है, यह आपको एक त्रुटि की रिपोर्ट करेगा। यदि आप इसका परीक्षण करना चाहते हैं, तो अन्य एपीआई संस्करण स्थापित करने का प्रयास करें (इस मामले में, एपीआई 8)।

फिर भी, यह एक महत्वपूर्ण त्रुटि नहीं है। इसका मतलब यह नहीं है कि आपका ऐप गलत है।

मेरी अभिव्यक्ति के बारे में खेद है। अंग्रेजी मेरी भाषा नहीं है। अलविदा!


मुझे लगता है कि यह समस्या है

एक छोटी सी पृष्ठभूमि

ट्रेसव्यू निष्पादन लॉग के लिए एक आलेखीय दर्शक है जिसे आप अपने कोड में ट्रेसिंग जानकारी लॉग करने के लिए डीबग क्लास का उपयोग करके बनाते हैं। ट्रेसव्यूव आपको अपने एप्लिकेशन को डीबग करने और उसके प्रदर्शन को प्रोफाइल करने में मदद कर सकता है। इसे सक्षम करने से sdcard रूट फ़ोल्डर में एक .trace फ़ाइल बनाता है जिसे बाद में एडीबी द्वारा निकाला जा सकता है और प्रसंस्करण के लिए ट्रेसव्यू बैट फ़ाइल द्वारा संसाधित किया जा सकता है। यह डीडीएमएस द्वारा भी जोड़ा जा सकता है।

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

मैं इसे कैसे सक्षम करूं:

ट्रेस लॉग उत्पन्न करने के दो तरीके हैं:

  1. अपने कोड में डीबग क्लास शामिल करें और डिस्क पर ट्रेस जानकारी लॉगिंग शुरू करने और रोकने के लिए startMethodTracing() और stopMethodTracing() जैसे विधियों को कॉल करें। यह विकल्प बहुत सटीक है क्योंकि आप निर्दिष्ट कर सकते हैं कि अपने कोड में ट्रेस डेटा लॉगिंग शुरू करना और बंद करना कहां से है।

  2. ट्रेस लॉग उत्पन्न करने के लिए डीडीएमएस की विधि प्रोफाइलिंग सुविधा का उपयोग करें। यह विकल्प कम सटीक है क्योंकि आप कोड को संशोधित नहीं करते हैं, बल्कि डीडीएमएस के साथ लॉगिंग शुरू करने और बंद करने के लिए निर्दिष्ट करते हैं। यद्यपि आपके पास लॉगिंग शुरू होने और बंद होने पर बिल्कुल कम नियंत्रण होता है, लेकिन यदि आपके पास एप्लिकेशन के कोड तक पहुंच नहीं है, या यदि आपको सटीक लॉग टाइम की आवश्यकता नहीं है, तो यह विकल्प उपयोगी है।

लेकिन उपर्युक्त के लिए निम्नलिखित प्रतिबंध मौजूद हैं

यदि आप डीबग क्लास का उपयोग कर रहे हैं, तो आपके एप्लिकेशन को बाहरी संग्रहण ( WRITE_EXTERNAL_STORAGE ) पर लिखने की अनुमति होनी चाहिए।

यदि आप डीडीएमएस का उपयोग कर रहे हैं: एंड्रॉइड 2.1 और पहले के उपकरणों में एक एसडी कार्ड मौजूद होना चाहिए और आपके एप्लिकेशन को एसडी कार्ड को लिखने की अनुमति होनी चाहिए। एंड्रॉइड 2.2 और बाद के उपकरणों को एसडी कार्ड की आवश्यकता नहीं है। ट्रेस लॉग फ़ाइलों को सीधे आपकी विकास मशीन पर स्ट्रीम किया जाता है।

तो संक्षेप में ट्रेसफाइल पहुंच के लिए दो चीजों की आवश्यकता होती है

1.) अच्छी माप के लिए एक ट्रेस लॉग फ़ाइल यानी WRITE_EXTERNAL_STORAGE और READ_EXTERNAL_STORAGE लिखने की अनुमति

2.) पर्याप्त जगह से जुड़े एसडीकार्ड के साथ एक एमुलेटर। डॉक्टर यह नहीं कहता कि यह केवल डीडीएमएस के लिए है, बल्कि डीबग के लिए भी है, इसलिए मुझे लगता है कि यह एप्लिकेशन के माध्यम से डीबगिंग के लिए भी सच है।

मैं इस त्रुटि के साथ क्या करूँगा:

अब त्रुटि अनिवार्य रूप से एक ट्रेसफाइल बनाने के लिए एसडीकार्ड पथ नहीं है या इसे एक्सेस करने की अनुमति नहीं है। यह एक पुराना धागा है, लेकिन बक्षीस के पीछे देव, दो पूर्व शर्तों को पूरा कर रहे हैं या नहीं। फिर आप अपने एमुलेटर में sdcard फ़ोल्डर में .trace फ़ाइल के लिए खोज कर सकते हैं। यदि यह अस्तित्व में है तो यह आपको यह समस्या नहीं देनी चाहिए, अगर यह आपके ऐप पर startMethodTracing जोड़कर इसे बनाने का प्रयास नहीं करता है।
मुझे यकीन नहीं है कि लॉगर किस समय लॉग इन करता है, यह स्वचालित रूप से क्यों दिखता है। मुझे लगता है कि जब कोई त्रुटि / लॉग इवेंट होता है, तो लॉगर आंतरिक रूप से ट्रेस फ़ाइल पर लिखने की कोशिश करता है और उसे नहीं मिला, इस स्थिति में यह त्रुटि फेंकता है । दस्तावेज़ों के माध्यम से खराब होकर, मुझे यह बहुत अधिक संदर्भ नहीं मिलते हैं कि यह स्वचालित रूप से क्यों चल रहा है। लेकिन आम तौर पर यह आपको सीधे प्रभावित नहीं करता है, आपको प्रत्यक्ष एप्लिकेशन लॉग / त्रुटियों की जांच करनी चाहिए। इसके अलावा एक तरफ एंड्रॉइड 2.2 और बाद के उपकरणों को डीडीएमएस ट्रेस लॉगिंग के लिए एसडी कार्ड की आवश्यकता नहीं है। ट्रेस लॉग फ़ाइलों को सीधे आपकी विकास मशीन पर स्ट्रीम किया जाता है।

ट्रेसव्यू पर अतिरिक्त जानकारी:

एक होस्ट मशीन में ट्रेस फ़ाइलों की प्रतिलिपि बनाएँ

आपके एप्लिकेशन के चलने के बाद और सिस्टम ने आपके ट्रेस फ़ाइलों को बनाया है। किसी डिवाइस या एमुलेटर पर .trace, आपको उन फ़ाइलों को अपने विकास कंप्यूटर पर कॉपी करना होगा। आप फ़ाइलों की प्रतिलिपि बनाने के लिए एडीबी पुल का उपयोग कर सकते हैं। यहां एक उदाहरण दिया गया है जो एमुलेटर होस्ट मशीन पर / tmp निर्देशिका में एमुलेटर पर डिफ़ॉल्ट स्थान से उदाहरण फ़ाइल, calc.trace की प्रतिलिपि बनाने का तरीका दिखाता है:

adb pull /sdcard/calc.trace / tmp ट्रेसव्यू में ट्रेस फ़ाइलों को देखना ट्रेसेव्यू चलाने और ट्रेस फ़ाइलों को देखने के लिए, ट्रेसव्यू दर्ज करें। उदाहरण के लिए, पिछले खंड में कॉपी की गई उदाहरण फ़ाइलों पर ट्रेसव्यू चलाने के लिए, उपयोग करें:

traceview / tmp / calc नोट: यदि आप ProGuard सक्षम (रिलीज़ मोड बिल्ड) के साथ बनाए गए किसी एप्लिकेशन के ट्रेस लॉग को देखने का प्रयास कर रहे हैं, तो कुछ विधि और सदस्य नामों को अपवित्र किया जा सकता है। आप मूल unobfuscated नामों को जानने के लिए Proguard mapping.txt फ़ाइल का उपयोग कर सकते हैं। इस फ़ाइल के बारे में अधिक जानकारी के लिए, प्रोगार्ड दस्तावेज़ देखें।

मुझे लगता है कि oncreate स्टेटमेंट्स की स्थिति या uses-sdk को हटाने से संबंधित कोई अन्य जवाब संबंधित नहीं है, लेकिन यह एंड्रॉइड है और मैं गलत हो सकता हूं। इस प्रश्न को एंड्रॉइड इंजीनियर को रीडायरेक्ट करने या इसे बग के रूप में पोस्ट करने के लिए उपयोगी होगा

docs में और अधिक


uses-sdk भाग फॉर्म AndroidManifest.xml फ़ाइल को निकालने का प्रयास करें। यह मेरे लिए काम किया!

बहुत कम विन्यास के साथ एंड्रॉइड वर्चुअल डिवाइस का उपयोग न करें। इसे मध्यम होने दें।





android-sdcard