Gỡ lỗi Xcode - hiển thị hình ảnh


99

Tôi thích sử dụng trình gỡ lỗi Xcode. Bạn có thể xem giá trị của một biến và thậm chí thay đổi nó.

Nhưng bằng cách nào đó, tôi có thể HIỂN THỊ hình ảnh được tham chiếu bởi một biến hình ảnh không? Tôi biết tôi có thể nhìn thấy các byte thô của nó, nhưng sẽ thân thiện với con người hơn nhiều nếu hiển thị một cửa sổ có nội dung của nó.

Xcode có thể không hỗ trợ điều này. Có thể có một công cụ bên ngoài sẽ giúp hiển thị hình ảnh?

Câu trả lời:


273

Sử dụng Quick Look để kiểm tra hình ảnh trong trình gỡ lỗi Xcode.

Chọn một NSImagehoặc UIImagetrong trình gỡ lỗi, sau đó nhấp vào biểu tượng "mắt" Nhìn nhanh.

biểu tượng "mắt" trong thanh công cụ trình gỡ lỗi Xcode

Giống như các khu vực khác của OS X, bạn cũng có thể sử dụng spacebarđể Quick Look!

Xem hình ảnh UII trong trình gỡ lỗi Xcode qua Quick Look

Quick Look trong trình gỡ lỗi cũng có thể được triển khai cho các lớp của riêng bạn:

Bật Tìm kiếm nhanh cho các loại tùy chỉnh

Tính năng Quick Look của biến trong trình gỡ lỗi Xcode cho phép bạn có được đánh giá trực quan nhanh chóng về trạng thái của một biến đối tượng thông qua kết xuất đồ họa, được hiển thị trong cửa sổ bật lên trong chế độ xem biến của trình gỡ lỗi hoặc tại chỗ trong mã nguồn của bạn.

Chương này mô tả cách bạn triển khai phương thức Quick Look cho các loại lớp tùy chỉnh của mình để các biến đối tượng của các loại đó cũng có thể được hiển thị trực quan trong cửa sổ bật lên Quick Look.


13
Tốt. Đặc tính. Không bao giờ!
Sev

2
Đây là câu trả lời có giá trị nhất trong năm!
vedrano

8
Tuổi viết mã bằng Xcode và tôi chưa bao giờ biết về tính năng này! Điều này thật tuyệt!!! Thanks a lot
Joan Cardona

2
Biết về tính năng này nhưng cảm ơn vì mẹo về phím cách! Dễ dàng hơn nhiều so với nhấp vào mắt bằng chuột. :)
hack Patel

1
Làm việc với Xcode 10 và Swift 4.2 giống như một sự quyến rũ. Cảm ơn.
atereshkov

16

BIÊN TẬP:

Kể từ Xcode 5, trình gỡ lỗi có thể hiển thị cho bạn biểu diễn trực quan của các biến UIImage / CGImageRef!

Bản thân Xcode không thể làm điều đó. Tôi không biết về các công cụ bên ngoài.

Những gì tôi đang làm để kiểm tra hình ảnh trong khi gỡ lỗi là chuyển đổi dữ liệu thô đó thành định dạng tệp hình ảnh, như .png, sau đó lưu nó ở đâu đó và sau đó tôi đang mở hình ảnh bằng bất kỳ công cụ xem hình ảnh nào.

Tôi có một đoạn mã cho mục đích đó, về cơ bản trông như thế này:

NSData *imageData = UIImagePNGRepresentation(self.myUIImage);
[imageData writeToURL:desktopURL atomically:YES];

Và tôi chỉ đang sao chép và dán mã này vào nơi tôi muốn xem nội dung của một hình ảnh khi chạy.

Đảm bảo loại bỏ mã này càng sớm càng tốt do chi phí chuyển đổi UIImagethànhNSData


2
chỉ tò mò: tại sao bạn nói "(và không nên) làm điều đó"? Đã có lần người ta nói rằng máy tính "không nên" có màn hình màu vì chúng quá đắt hoặc trình soạn thảo văn bản được các lập trình viên sử dụng "không nên" kiểm tra mã của bạn. tại một thời điểm nào đó chúng ta cần phải chuyển từ những ý tưởng cổ xưa, chắc chắn?
không đồng bộ hóa

Ok, vì vậy tôi rút lại "không nên". Tôi ước một ngày nào đó IDE sẽ giải thích hình ảnh trong khi gỡ lỗi.
Avi Shukron

Đây là một ý tưởng tuyệt vời và chỉ giúp tôi - cảm ơn. Rõ ràng là một khi ai đó chỉ ra nó, nhưng vẫn là một gợi ý tuyệt vời.
Scott Little

@unsynchronized bạn sẽ nhìn vào đó ... Xcode 5 có thể hiển thị hình ảnh trong trình gỡ lỗi ...
Avi Shukron

14

Chỉnh sửa cho Xcode 5: Bây giờ khi bạn di chuột qua tên biến hình ảnh, sẽ có biểu tượng "con mắt" ở bên phải. Chỉ cần nhấp vào nó để xem hình ảnh hiện tại!

LƯU Ý: đôi khi điều này không thành công trong Xcode, ngay cả khi hình ảnh chính xác. Nếu điều này xảy ra, HOẶC nếu bạn không có biến UIImage (ví dụ: đó là thuộc tính của một đối tượng khác, bạn vẫn có thể sử dụng câu trả lời cũ hơn:

Câu trả lời cũ hơn: Bắt đầu với câu trả lời của Avraham, tôi đã thử một vài thử nghiệm để hiển thị hình ảnh iOS từ lldb mà không cần phải biên dịch lại hoặc thêm nó vào chế độ xem. Cuối cùng tôi đã nghĩ ra:

e [UIImagePNGRepresentation(myImage) writeToFile:@"/Users/<userName>/Desktop/myImage.png" atomically:NO];

Tôi giữ chuỗi này trong một trình soạn thảo văn bản và dán nó khi tôi cần. Điều này lưu trữ hình ảnh hiện tại mà tôi quan tâm (trong trường hợp này là "myImage") vào tệp PNG trên Máy tính để bàn. Sau đó, tôi chỉ có thể mở tệp này bằng Xem trước.

Nếu bạn đang làm việc trên thiết bị iOS, thì bạn có thể sử dụng

 e [UIImagePNGRepresentation(myImage) writeToFile:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0] stringByAppendingString:@"/myImage.png"] atomically:NO];

Sau đó, bạn có thể sử dụng Finder; chọn thiết bị của bạn; "Các tập tin"; sau đó là ứng dụng dành cho nhà phát triển của bạn và sao chép hình ảnh vào Máy tính để bàn của bạn để xem.


+1000000 Đây là giải pháp tuyệt vời! Tôi muốn nói thêm rằng nếu bạn đang gỡ lỗi trên thiết bị, bạn có thể sử dụng thứ gì đó như iFunBox hoặc iExplorer để truy xuất hình ảnh từ thiết bị.
Quentin

Bạn thậm chí có thể viết trực tiếp vào "/ Users / <your username> /"; Bằng cách này bạn sẽ không phải tìm kiếm thư mục temp của bạn qua GUID
Dannie P

Đề xuất tốt (lưu ý bạn phải sử dụng / Users / <tên người dùng của bạn> /, nó không hoạt động với ~ /). Đã cập nhật đề xuất cho phù hợp.
mackworth

Đề xuất tuyệt vời @mackworth. Cảm ơn.
arango_86,

13

Nếu bạn muốn làm việc với các LLĐB giao diện điều khiển, sử dụng đục lệnh "hình dung"

tiền boa:

sau khi cài đặt, bạn có thể đặt điểm ngắt có điều kiện sau khi đặt UIImage bằng hành động: "visual myUIImageToShowWithQuickLook"

nhập mô tả hình ảnh ở đây

điều này sẽ tự động hiển thị cho bạn hình ảnh khi trình gỡ lỗi dừng.


4

Điều gì sẽ xảy ra nếu bạn không thể truy cập hình ảnh qua chế độ xem biến?

Nhắc lại những gì @pkamb đã nói - bạn có thể sử dụng chế độ xem biến để xem nhanh hình ảnh. Nhưng nếu bạn không vào được hình ảnh thì sao?

ví dụ tôi có một hình ảnh tại (contentViewController.view.subviews[0].subviews[1] as? UIImageView).image

nhưng nếu tôi cố gắng mở rộng contentViewControllertrong chế độ xem biến thì nó không hiển thị các chế độ xem phụ của tôi

nhập mô tả hình ảnh ở đây

những gì bạn có thể làm là nhấp chuột phải, thêm một biểu thức, và sau đó bạn có thể thấy nó!

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây


Sau đó, bạn sẽ có thể sử dụng lệnh tương tự như trên: po [UIImagePNGRepresentation ((contentViewController.view.subviews [0] .subviews [1] as? UIImageView) .image) writeToFile: @ "/ Users / <userName> / Desktop /watchImage.png "về mặt nguyên tử: KHÔNG];
mackworth

-7

Bạn có thể đặt một điểm ngắt trong dòng hình ảnh của mình, sau đó trong trình gỡ lỗi, chỉ cần viết:

po your_UIImage_object

polà viết tắt của print object, đó là lệnh GDB sẽ hiển thị một số thông tin hữu ích về đối tượng được truyền, trong trường hợp của bạn là hình ảnh.


1
Trên thực tế, việc sử dụng trực tiếp po với đối tượng UIImage sẽ chỉ in ra bảng điều khiển địa chỉ bộ nhớ tên lớp của cá thể. Một cái gì đó như: <UIImage: 0x7fc98df6c7d0>
Daniel
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.