'SIGILL' सिग्नल का क्या कारण है?


90

मैं NDK और GCC का उपयोग करके Android पर कुछ C ++ कोड पोर्ट कर रहा हूं। कोड मूल रूप से चलता है। एक बिंदु पर, जब ग्रहण में डिबगिंग, कॉल

Dabbler::Android::Factory* pFactory = new Dabbler::Android::Factory;

इस त्रुटि का कारण बनता है:

Thread [1] (Suspended: Signal 'SIGILL' received. Description: Illegal instruction.) 
    1 <symbol is not available> 0x812feb44

इसका क्या मतलब है? संकलक ने किसी कारण से अवैध कोड उत्पन्न किया है? मेरे पास कंस्ट्रक्टर में एक ब्रेकप्वाइंट है (जो कुछ भी नहीं करता है), और यह हिट नहीं है। मैंने पहले ही पूर्ण पुनर्निर्माण कर लिया है।

इस समस्या का कारण क्या हो सकता है?

जवाबों:


27

इसका मतलब है कि सीपीयू ने एक निर्देश को निष्पादित करने का प्रयास किया, जो उसे समझ नहीं आया। यह मेरे द्वारा लगाए गए भ्रष्टाचार के कारण हो सकता है, या शायद यह गलत वास्तुकला के लिए संकलित किया गया है (जिस स्थिति में मैंने सोचा था कि ओ / एस निष्पादन योग्य को चलाने से इनकार कर देगा)। पूरी तरह से निश्चित नहीं है कि मूल मुद्दा क्या है।


24
अमान्य निर्देश को निष्पादित करने का एक अन्य कारण उस पते पर कूदना है जो प्रोग्राम क्षेत्र में नहीं है।
पॉल नाथन

अजीब, मुझे यह मिल गया, जब मैंने क्लैंग के साथ संकलित किया, लेकिन यह जीसीसी के साथ ठीक काम किया
पोस्ट सेल्फ

22

यह कुछ अन-इनिशियलाइज्ड फंक्शन पॉइंटर हो सकता है, विशेष रूप से यदि आपने मेमोरी को दूषित कर दिया है (तब C ++ खराब पॉइंटर्स का अमान्य ऑब्जेक्ट्स को बोगस वाइबेट दे सकता है)।

BTW gdbचौकीदार और ट्रेसप्वाइंट, और भी इस तरह के मुद्दों को डीबग करने के लिए वेलग्रिंड उपयोगी (यदि उपलब्ध हो) हो सकता है। या कुछ एड्रेस सैनिटाइजर


मेरे लिए, मैं एक फ़ंक्शन से कोई मान नहीं लौटा रहा था जिसे एक इंट को वापस करना था। तो कुछ हद तक इस जवाब से संबंधित है। पता नहीं यह कैसे संकलित करने में कामयाब रहा।
क्रिस वाट्स

11

सुनिश्चित करें कि गैर-शून्य रिटर्न प्रकार वाले सभी कार्यों का एक returnबयान है।

जबकि कुछ कंपाइलर स्वचालित रूप से एक डिफ़ॉल्ट रिटर्न वैल्यू प्रदान करते हैं, अन्य लोग रिटर्न वैल्यू के बिना किसी फ़ंक्शन को छोड़ने का प्रयास करते समय क्रम में एक SIGILL या SIGTRAP भेजेंगे।


आपको इस बात का कोई अंदाजा नहीं है कि मैं एक समारोह में एक लापता रिटर्न स्टेटमेंट (आपके उत्तर से प्रेरित) को खोजने के लिए सिगिल (क्यूटी + एंड्रॉइड) के पीछे क्या कारण खोज रहा था। धन्यवाद।
वेगा 4
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.