Làm cách nào để xem nội dung của biến NSDictionary trong trình gỡ lỗi Xcode?


85

Có cách nào để xem các cặp khóa / giá trị của biến NSDictionary thông qua trình gỡ lỗi Xcode không? Đây là mức độ thông tin khi nó được mở rộng hoàn toàn trong cửa sổ biến:

Variable  Value      Summary
jsonDict  0x45c540   4 key/value pairs
 NSObject {...}
  isa     0xa06e0720

Tôi đã mong nó hiển thị cho tôi từng phần tử của từ điển (tương tự như một biến mảng).

Câu trả lời:


140

Trong cửa sổ gdb, bạn có thể sử dụng pođể kiểm tra đối tượng.

được:

NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"foo" forKey:@"bar"];
[dict setObject:@"fiz" forKey:@"buz"];

thiết lập một điểm ngắt sau khi các đối tượng được thêm vào, bạn có thể kiểm tra những gì có trong từ điển

(gdb) po dict
{
  bar = foo;
  buz = fiz;
}

Tất nhiên đây là những NSStringđồ vật có thể in đẹp. YMMV với các đối tượng phức tạp khác.


7
Chào! Gdb là gì? Po là gì? Không chắc chắn để hiểu ... Cảm ơn sự giúp đỡ của bạn! :)
Martin

1
Ok vì vậy tôi phát hiện ra rằng GDB là viết tắt của trình gỡ lỗi GNU và trên thực tế là cửa sổ trình gỡ lỗi của Xcode. Bây giờ tôi cần tìm po là gì
Martin

18
ĐỒNG Ý! Vì vậy, gdb trên thực tế là một dấu nhắc trong Console, nơi bạn có thể nhập lệnh. Bằng cách gõ "po object_name", bạn đã in được nội dung đối tượng trong bảng điều khiển.
Martin

7
po là một bí danh cho in-object
Brad Cupit

Tuyệt vời! Tương đương với "echo var_dump ()" hoặc "print_r ()" trong PHP.
mpemburn

30

Bạn có thể nhấp chuột phải vào bất kỳ biến đối tượng nào (objC hoặc Core Foundation) và chọn “Print Description to Console” (cũng trong Run-> Variables View). Điều này in ra kết quả là -debugDescriptionphương thức của obejct , theo mặc định sẽ gọi -description. Thật không may, NSDictionaryghi đè điều này để tạo ra một loạt dữ liệu nội bộ mà bạn thường không quan tâm, vì vậy trong trường hợp cụ thể này, giải pháp của craigb là tốt hơn.

Các khóa và giá trị được hiển thị cũng sử dụng -description, vì vậy nếu bạn muốn có thông tin hữu ích về các đối tượng của mình trong bộ sưu tập và các nơi khác, thì việc ghi đè -descriptionlà điều bắt buộc. Tôi thường triển khai nó dọc theo những dòng này, để phù hợp với định dạng của NSObjecttriển khai mặc định :

- (NSString *) mô tả
{
    return [NSString stringWithFormat: @ "<% @% p> {foo:% @}", [self class], self, [self foo]];
}

6

Bạn có thể sử dụng CFShow ()

NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"foo" forKey:@"bar"];
[dict setObject:@"fiz" forKey:@"buz"];
CFShow(dict);

Trong đầu ra, bạn sẽ thấy

{
  bar = foo;
  buz = fiz;
}

3

XCode 4.6 đã thêm chức năng sau có thể hữu ích cho bạn

The elements of NSArray and NSDictionary objects can now be inspected in the Xcode debugger

Bây giờ bạn có thể kiểm tra các loại đối tượng này mà không cần phải in toàn bộ đối tượng trong bảng điều khiển. Thưởng thức!

Nguồn: http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_4_6.html


Đây là lỗi cho tôi - chỉ hiển thị một phần của NSDictionary tôi
Paul Slocum

1

Nhấp vào chính tả của bạn, sau đó nhấp vào biểu tượng "i" nhỏ, nó sẽ thực hiện công việc :-) Xcode5, xem giá trị của một lệnh


1

Nếu bạn muốn in chúng trong một hành động điểm ngắt trong XCode hiện đại (vâng, tôi đã 10 năm sau bài đăng gốc!), Hãy sử dụng biểu thức điểm ngắt sau trong hành động "Thông báo nhật ký":

@ myDictionary.description @

Dưới đây là ảnh chụp màn hình về hành động điểm ngắt của tôi trong đó sự kiện biến là một NSString và dữ liệu ngữ cảnh biến là NSDictionary mà tôi đang ghi nội dung của ::


0

Bạn cũng có thể sử dụng NSLog .

Ngoài ra, bạn có thể vào khu vực Gỡ lỗi hoặc xcode, sau đó tìm hiểu All Variables, Registers, Globals and Staticsrồi chọn biến của bạn. Nhấp chuột phải vào nó. Sau đó chọnPrint description of "...."

Hy vọng nó giúp!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.