2012-02-04 9 views
5

Thứ nhất - là NDEBUG đã được định nghĩa bằng cách nào đó theo mặc định, vì vậy các xác nhận không hoạt động cho đến khi bạn #undef nó. Thứ hai - chúng hoạt động, nhưng tôi không nhận được đăng nhập DDMS.Các vấn đề NDK assert.h của Android

Nếu có một số assert.h cụ thể cho android?

Hoặc tôi chỉ làm điều gì đó sai?

+0

Cho dù 'NDEBUG' được định nghĩa nên phụ thuộc vào những lá cờ biên dịch. Nếu bạn biên dịch trong chế độ phát hành, nó phải được xác định, trong chế độ gỡ lỗi, rõ ràng là nó không nên. Bạn có thể kiểm tra (nếu cài đặt IDE của bạn không trả lời) bằng cách đặt một cái gì đó như '#ifdef NDEBUG \ n # lỗi Rất tiếc, NDEBUG được xác định \ n # endif' (thay thế '\ n' bằng dòng mới thực) trong nguồn và biên dịch nó. –

Trả lời

11

Nếu bạn muốn biên dịch mã của bạn với khẳng định sau đó bạn có thể làm điều đó trong ba cách:

  • sử dụng NDK_DEBUG = 1 lập luận trong ndk-build commandline
  • thêm android: debuggable = "true" để < ứng dụng> thẻ trong AndroidManifest.xml
  • thêm APP_OPTIM: = debug để tập Application.mk của bạn - điều này cũng sẽ vô hiệu hóa tối ưu hóa và sẽ biên dịch với các biểu tượng debug
6

Thông thường chương trình sẽ bị hỏng do tín hiệu SIGSEGV sau assert() được gọi, theo mặc định NDEBUG được xác định, bạn có thể tắt bằng cách thêm cờ (LOCAL_CFLAGS += -UNDEBUG) trong khi biên dịch nhưng không hoạt động đối với trường hợp của tôi.

tôi tìm thấy một giải pháp khác là sử dụng __android_log_assert, chỉ cần xác định như bên dưới và thay assert() với assert3:

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

-UNDEBUG thực sự đã làm việc cho tôi .. Cảm ơn bạn rất nhiều –