2009-02-11 31 views
14

Tôi muốn bật NSZombies cho ứng dụng iPhone của mình.Cách thêm NSDebug.h và sử dụng NSZombie trong SDK iPhone

Tôi đã đọc một số bài viết trực tuyến và tôi vẫn không chắc chắn về quy trình chính xác.

Tôi biết tôi phải thiết lập các biến môi trường, mà tôi đã thực hiện:

NSZombieEnabled = YES 
NSDebugEnabled = YES 
NSDeallocateZombies = NO 

Tôi nghĩ (tôi không chắc chắn), tôi phải nhập khẩu NSDebug.h. Khi tôi kiểm tra các tiêu đề của Khuôn khổ Quỹ trong dự án của tôi, không có NSDebug.h.

Sau một số nghiên cứu, tôi đã tìm thấy chúng trong Khung nền tảng iPhoneSimulator. Vì vậy (và tôi không chắc chắn nếu điều này là chính xác), tôi đã nhập khung nền tảng iPhoneSimualtor vào dự án của tôi. Tôi nhận thấy rằng tệp STILL không hiển thị trong cửa sổ dự án, mặc dù tôi có thể định vị tệp đó trong Trình tìm kiếm. (Đây có phải là hành vi bình thường không?).

Vì vậy, tôi mở ra chính và nói thêm:

#ifdef TARGET_IPHONE_SIMULATOR 
#import <Foundation/NSDebug.h> 
#endif 

Tôi không chắc chắn nếu điều đó là đúng một trong hai. Sau này tôi vẫn không thể có được NSZombie để làm việc (trừ khi tôi đã hiểu lầm những gì nó là nghĩa vụ phải làm) Tôi đang mong đợi để xem một bản ghi "NSZombie gửi một bản phát hành ..." hoặc một cái gì đó. Nhưng tôi không thấy bất cứ điều gì

Tôi chắc chắn tôi không làm điều này đúng, một bước tốt sẽ được đánh giá cao. Cảm ơn

Cũng đáng chú ý, tôi cũng đã được kích hoạt:

NSMallocStacklLogging = YES 
MallocStackLoggingNoCompact = YES 
+1

typo về 'NSMallocStackLogging' trong khối mã cuối cùng – conorgriffin

Trả lời

10

Bạn không cần phải bao gồm NSDebug.h hoặc nhập khẩu bất kỳ khuôn khổ đặc biệt để sử dụng NSZombies. Về cơ bản, rẽ 'em vào trong các biến môi trường của bạn, và sau đó, nếu bạn cố gắng để nhắn một đối tượng dealloc'd, sau đó bạn sẽ thấy một cái gì đó trong giao diện điều khiển của bạn, dọc theo dòng:

2009-02-10 21:17:08.546 MyApp[16926:20b] *** -[CFString _cfTypeID]: message sent to deallocated instance 0x4babc0

+0

Cảm ơn, tôi nghĩ rằng tôi đã quá tham gia vào việc này. Tôi đặt điểm ngắt tại - [Bản phát hành NSZombie]. Dường như nó bị vô hiệu hóa khi bắt đầu thực hiện. Điều đó có bình thường không? Ngoài ra, ứng dụng của tôi có bị lỗi không? Tôi nghĩ rằng kể từ khi đối tượng NSZombie vẫn còn đó, chương trình của tôi sẽ tiếp tục thực hiện. Cảm ơn –

+0

Bạn sẽ nhận được thông báo bàn điều khiển khi bất kỳ tin nhắn nào được gửi tới NSZombie; Bạn nên tự động ngắt, không yêu cầu điểm ngắt. –

34

Are bạn thiết lập biến môi trường một cách chính xác? Hướng dẫn từng bước là

  1. Nhấp đúp vào tệp thi hành trong nhóm Thực thi dự án Xcode của bạn.
  2. Nhấp vào tab Đối số.
  3. Trong phần "Biến được đặt trong môi trường:", tạo biến có tên "NSZombieEnabled" và đặt giá trị thành "CÓ".

Bạn không cần phải #import NSDebug.h

+0

+1. Tôi đã có cùng một vấn đề như OP, và bạn đã giúp tôi tìm thấy nó. Cảm ơn bạn. –

3

-1 cho Apple. Các bản dựng lỗi phải được chạy với đầy đủ thiết bị ra khỏi hộp (với lựa chọn không tham gia). Ngoài ra, hãy xem http://www.cocoadev.com/index.pl?NSZombieEnabled để biết thêm về sự quan tâm đối với người đang phát triển và gỡ lỗi chương trình.

Các vấn đề liên quan