2013-02-27 26 views
8

Vì vậy, tôi mới sử dụng Xcode, đang làm việc trên một dự án iOS và tôi đang có một thời gian với việc gỡ lỗi cơ bản nhất. Cụ thể là tôi cần để có thể xem trạng thái của các đối tượng khi tôi bước qua mã (đó không phải là điên?), Nhưng tôi không thể cho cuộc sống của tôi tìm ra cách để làm điều này trong Xcode.Xem trạng thái đối tượng/thuộc tính trong Xcode trong khi gỡ lỗi

Bất cứ khi nào tôi thử, có vẻ như xa nhất tôi nhận được là địa chỉ bộ nhớ không thể mở rộng để hiển thị nội dung khách quan của nó. Tôi cũng không thể tìm ra bất kỳ cách nào để thậm chí dereference thủ công con trỏ trong giao diện điều khiển gỡ lỗi để xem trạng thái của đối tượng đó.

Ở đây tôi đang cố gắng xem nội dung của mảng store.storeHours, không có may mắn. Trong thực tế, khung nhìn bên trái cho tôi biết có 0 đối tượng trong mảng, và sẽ không hiển thị bất cứ điều gì khi tôi cố gắng mở rộng nó, nhưng khi tôi po store.storeHours bàn điều khiển hiển thị 7 đối tượng, mặc dù vô dụng được mô tả như là địa chỉ bộ nhớ.

enter image description here

hãy cho tôi biết tôi không điên và tôi chỉ còn thiếu một cái gì đó!

Cập nhật: Vì vậy mọi thứ trở nên kỳ lạ hơn! Khi tôi chuyển hiển thị biến thành "Địa phương" thay vì "Tự động" đột ngột, self.store.storeHours trở nên hoàn toàn có thể điều hướng! Tôi tự hỏi liệu có lẽ đã có một trục trặc khi truy cập vào ví dụ "storeHours" chính xác hay một cái gì đó bởi vì nó xác định rõ ràng 7 đối tượng trong mảng khi tôi xem nó ngay bây giờ! Chưa kể các đối tượng được mở rộng như tôi đã ban đầu hy vọng.

enter image description here

+0

'Giờ 'là lớp tùy chỉnh của bạn? –

+0

Có ............ – devios1

Trả lời

8

Các trường hợp thực sự cung cấp thông tin đó. Bạn cần triển khai phương thức description, được kế thừa từ NSObject, cho các lớp tùy chỉnh của bạn để chúng có thể in chính nó như một thứ khác với địa chỉ bộ nhớ (đó là cách thực hiện của NSObject).

Tôi không biết những gì thuộc tính của lớp Hours của bạn có, nhưng điều này cũng đơn giản như một cái gì đó như:

- (NSString *)description 
{ 
    return [NSString stringWithFormat:@"Open: %i Close: %i", self.openTime, self.closeTime]; 
} 

Phương pháp này chỉ cần trả về một NSString chứa bất kỳ thông tin mà bạn nghĩ là quan trọng để xem khi kiểm tra đối tượng.

Đây cũng là cách các lớp thể hiện bản thân khi bạn sử dụng thông số định dạng %@ trong NSLog().

+0

Ok đó chắc chắn là một sự khởi đầu. Tôi có thể ít nhất là xem những gì các đối tượng Giờ là bây giờ.Thật không may việc thực hiện NSObject mặc định không thể chỉ hiển thị các thuộc tính và giá trị theo cách đệ quy một cách chung chung. Tôi đoán Obj-C là mức độ quá thấp cho loại công cụ đó. – devios1

+1

Có các cơ sở nội tại trong thư viện thời gian chạy, do đó, nó thực sự khả thi đối với một đối tượng để chỉ nhổ ra tất cả các thuộc tính của nó, bất kể chúng là gì: http://www.google.com/search?q=site:stackoverflow.com+ -site: meta.stackoverflow.com + object-c + print + tất cả + thuộc tính + của + an + đối tượng –

+2

@chaiguy có một cái nhìn tại đó câu trả lời hữu ích siêu từ kendall-helmstetter-gelner về nội tâm thích hợp (đó là những gì bạn đang có yêu cầu); http://stackoverflow.com/a/2304797/91282 – Till

0

thực hiện

-(NSString*)description{ 
    //Return a string in whatever way you like to describe this instance. That is what xcode debugger reads. 
    //This is implemented in the parent to return the address, that's why you see that way. 
} 
+1

Bạn có thể mở rộng câu trả lời này một chút không? – thomasrutter

1

Trong ví dụ của bạn, store.storeHours là một NSArray trống. Vì vậy, một cách tự nhiên, bạn không thể nhìn vào bên trong nó.

Để rõ ràng hơn trong trình gỡ lỗi, hãy thử thêm một phương pháp (thừa hưởng từ NSObject)

- (NSString*) description 

để đối tượng của bạn như Hours cho bạn biết thêm về nội dung của họ. Xem thêm debugDescription.

+0

Xem đó là những gì tôi đã nghĩ, nhưng nó không * trống rỗng, và khi gỡ lỗi, vòng lặp for..in lặp lại trên 7 đối tượng, nhưng tôi không thể thấy rằng có 7 đối tượng trừ khi tôi rõ ràng 'po' storeHours trong bảng điều khiển. Rất bối rối. – devios1

+0

Bạn có đang sử dụng phiên bản mới nhất của Xcode, @chaiguy không? LLDB là một chút lỗi lúc đầu đối với việc xem ivars. –

+0

Đó là mới nhất tôi nghĩ (4.5.2 (4G2008a)). Giao diện điều khiển nói (gdb) mặc dù vậy có lẽ điều đó có nghĩa là tôi không sử dụng LLDB? – devios1

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