2012-02-04 12 views
5

पहला - एनडीईबीयूजी किसी भी तरह से पहले से ही डिफ़ॉल्ट रूप से परिभाषित किया गया है, इसलिए जब तक आप इसे #undef नहीं करते हैं तब तक कार्य नहीं करते हैं। दूसरा - वे काम करते हैं, लेकिन मुझे डीडीएमएस में कोई लॉगिंग नहीं मिलती है।एंड्रॉइड एनडीके assert.h समस्याएं

यदि कुछ एंड्रॉइड विशिष्ट एक assert.h है?

या मैं बस कुछ गलत करता हूं?

+0

चाहे 'NDEBUG' संकलक झंडे पर निर्भर होना चाहिए परिभाषित किया गया है। यदि आप रिलीज मोड में संकलित करते हैं, तो इसे डिबग मोड में परिभाषित किया जाना चाहिए, जाहिर है, यह नहीं होना चाहिए। आप किसी भी स्रोत में '#ifdef NDEBUG \ n # त्रुटि ओओएस डालने के द्वारा जांच सकते हैं (यदि आपकी आईडीई सेटिंग्स इसका उत्तर नहीं देती हैं), एनडीईबीयूजी को परिभाषित किया गया है \ n # endif' (वास्तविक न्यूलाइन के साथ' \ n 'को प्रतिस्थापित करें) फ़ाइल और इसे संकलित करें। –

उत्तर

11

आप अपने कोड संकलन करना चाहते हैं का दावा है के साथ तो आप तीन तरीकों से यह कर सकते हैं:

  • उपयोग NDK_DEBUG = 1 NDK-निर्माण कमांडलाइन में तर्क
  • जोड़ने एंड्रॉयड: डीबग करने के लिए = "true" < आवेदन> AndroidManifest.xml में टैग
  • APP_OPTIM जोड़ें: अपने Application.mk फाइल करने के लिए = डिबग - यह भी अनुकूलन को निष्क्रिय कर देगा और डिबग प्रतीकों के साथ संकलित कर देगा
6

आमतौर पर SIGSEGV के बाद प्रोग्राम क्रैश हो जाएगा assert() के बाद सिग्नल डिफ़ॉल्ट रूप से NDEBUG परिभाषित किया जाता है, आप संकलन के दौरान ध्वज (LOCAL_CFLAGS += -UNDEBUG) जोड़कर बंद कर सकते हैं लेकिन मेरे मामले के लिए काम नहीं कर सकते हैं।

मैंने पाया एक और समाधान __android_log_assert उपयोग कर रहा है, बस के रूप में नीचे परिभाषित करने और assert3 साथ assert() बदल देते हैं:

#define assert3(e...) __android_log_assert(e, "TAG", #e) 
+0

-UNDEBUG वास्तव में मेरे लिए काम किया .. बहुत बहुत धन्यवाद –

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