Xcode 디버깅-이미지 표시


99

저는 Xcode 디버거를 사용하는 것을 좋아합니다. 변수의 값을보고 변경할 수도 있습니다.

그러나 이미지 변수가 참조하는 이미지를 어떻게 든 표시 할 수 있습니까? 원시 바이트를 볼 수 있지만 내용이있는 창을 표시하는 것이 훨씬 더 인간 친화적 일 것입니다.

Xcode는 이것을 지원하지 않을 수 있습니다. 이미지를 표시하는 데 도움이되는 외부 도구가 있습니까?

답변:


273

Quick Look 을 사용 하여 Xcode 디버거에서 이미지를 검사합니다.

를 선택 NSImage하거나 UIImage디버거에서 다음 훑어보기 "눈"아이콘을 클릭합니다.

Xcode 디버거 도구 모음의 "눈"아이콘

OS X의 다른 영역과 마찬가지로 spacebarQuick Look 에도 사용할 수 있습니다 !

Quick Look을 통해 Xcode 디버거에서 UIImage보기

디버거의 Quick Look은 자신의 클래스에 대해 구현할 수도 있습니다.

사용자 지정 유형에 대한 훑어보기 활성화

Xcode 디버거의 변수 훑어보기 기능을 사용하면 그래픽 렌더링을 통해 객체 변수의 상태를 빠르게 시각적으로 평가할 수 있으며, 디버거 변수보기 또는 소스 코드의 위치에있는 팝 오버 창에 표시됩니다.

이 장에서는 사용자 정의 클래스 유형에 대해 Quick Look 메서드를 구현하여 해당 유형의 개체 변수를 Quick Look 팝 오버 창에서 시각적으로 렌더링 할 수도 있습니다.


13
베스트. 특색. 이제까지!
Sev

2
올해의 가장 귀중한 답변입니다!
vedrano 2015

8
Xcode로 코딩하는 나이가 많고이 기능에 대해 전혀 몰랐습니다! 이것은 굉장합니다 !!! 고마워요
조안 카르 도나

2
이 기능에 대해 알고 있었지만 스페이스 바 팁에 감사드립니다! 마우스로 눈을 클릭하는 것보다 훨씬 쉽습니다. :)
Chintan Patel

1
매력처럼 Xcode 10 및 Swift 4.2로 작업하십시오. 감사.
atereshkov 2013

16

편집하다:

Xcode 5부터 디버거는 UIImage / CGImageRef 변수의 시각적 표현을 보여줄 수 있습니다!

Xcode 자체로는 할 수 없습니다. 나는 외부 도구에 대해 모른다.

디버깅하는 동안 이미지를 테스트하기 위해 내가하는 일은 원시 데이터를 .png와 같은 이미지 파일 형식으로 변환 한 다음 어딘가에 저장 한 다음 이미지보기 도구로 이미지를 여는 것입니다.

기본적으로 다음과 같은 목적을위한 코드가 있습니다.

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

그리고이 코드를 복사하여 실행중인 이미지의 내용을보고 싶은 곳에 붙여넣고 있습니다.

확인의 전환의 높은 비용이 수 때문에 가능한 한 빨리이 코드를 제거 할 수 있도록 UIImage하는NSData


2
궁금한 점이 있습니다. 왜 "(그리고해서는 안됩니다)"라고 말합니까? 사람들이 컴퓨터가 너무 비싸서 컬러 화면이 "안된다"고 말했거나 프로그래머가 사용하는 텍스트 편집기가 당신의 코드를 확인하는 "안된다"고 말한 적이 있습니다. 어느 시점에서 우리는 구식 아이디어에서 넘어갈 필요가 있습니다.
동기화되지

좋아, 그래서 나는 "안돼"를 되 찾는다. 언젠가 IDE가 디버깅하는 동안 이미지를 해석하기를 바랍니다.
Avi Shukron 2011 년

이것은 좋은 아이디어이며 저를 도왔습니다. 감사합니다. 누군가가 그것을 지적하면 분명하지만 여전히 훌륭한 포인터입니다.
Scott Little

@unsynchronized 당신이 볼 것이다 ... 엑스 코드 5 ... 디버거에서 이미지를 표시 할 수 있습니다
아비 Shukron

14

Xcode 5 편집 : 이제 이미지 변수 이름 위로 마우스를 가져 가면 오른쪽에 "눈"아이콘이 있습니다. 클릭하면 현재 이미지를 볼 수 있습니다!

참고 : 때때로 이미지가 정확하더라도 Xcode에서 실패합니다. 이 경우 또는 UIImage 변수가없는 경우 (예 : 다른 개체의 속성 인 경우에도 이전 답변을 사용할 수 있습니다.)

이전 답변 : Avraham의 답변으로 시작하여 다시 컴파일하거나 뷰에 추가하지 않고도 lldb에서 iOS 이미지를 표시하는 몇 가지 실험을 시도했습니다. 나는 마침내 다음을 생각 해냈다.

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

이 문자열을 텍스트 편집기에 보관하고 필요할 때 붙여 넣습니다. 이것은 내가 관심있는 현재 이미지 (이 경우 "myImage")를 데스크탑의 PNG 파일에 저장합니다. 그런 다음 미리보기로이 파일을 열 수 있습니다.

iOS 기기에서 작업하는 경우 다음을 사용할 수 있습니다.

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

그런 다음 Finder를 사용할 수 있습니다. 장치를 선택하십시오. "파일"; 그런 다음 dev 앱을 클릭하고 이미지를 데스크톱에 복사하여 봅니다.


+1000000 이것은 놀라운 솔루션입니다! 장치에서 디버깅하는 경우 iFunBox 또는 iExplorer와 같은 것을 사용하여 장치에서 이미지를 검색 할 수 있음을 추가하고 싶습니다.
Quentin

"/ Users / <사용자 이름> /"에 직접 쓸 수도 있습니다. 이렇게하면 GUID를 통해 임시 폴더를 찾을 필요가 없습니다
Dannie P 2014

좋은 제안입니다 (/ Users / <사용자 이름> /을 사용해야합니다. ~ /에서는 작동하지 않습니다). 그에 따라 제안을 업데이트했습니다.
mackworth 2014 년

멋진 제안 @mackworth. 감사.
arango_86

13

lldb 콘솔로 작업하려면 chisel 명령 "visualize"를 사용하십시오.

팁:

설치 후 "visualize myUIImageToShowWithQuickLook"조치로 UIImage를 설정 한 후 조건부 중단 점을 설정할 수 있습니다.

여기에 이미지 설명 입력

그러면 디버거가 중지 될 때 이미지가 자동으로 표시됩니다.


4

변수보기를 통해 이미지를 볼 수 없다면 어떻게해야합니까?

@pkamb가 말한 것을 반향-변수보기를 사용하여 이미지를 빠르게 볼 수 있습니다. 하지만 이미지를 얻을 수 없다면 어떨까요?

예를 들어 이미지가 (contentViewController.view.subviews[0].subviews[1] as? UIImageView).image

하지만 contentViewController변수보기에서 확장하려고 하면 내 하위보기가 노출되지 않습니다.

여기에 이미지 설명 입력

당신이 할 수있는 것은 마우스 오른쪽 버튼을 클릭하고 표현식을 추가하면 볼 수 있습니다!

여기에 이미지 설명 입력

여기에 이미지 설명 입력

여기에 이미지 설명 입력


그런 다음 위와 동일한 명령을 사용할 수 있어야합니다. po [UIImagePNGRepresentation ((contentViewController.view.subviews [0] .subviews [1] as? UIImageView) .image) writeToFile : @ "/ Users / <userName> / Desktop /watchImage.png "원자 적으로 : NO];
mackworth

-7

이미지 줄에 중단 점을 넣은 다음 디버거에서 다음과 같이 작성할 수 있습니다.

po your_UIImage_object

po을 의미하며 print object전달 된 객체 (귀하의 경우 이미지)에 대한 몇 가지 유용한 정보를 표시하는 GDB 명령입니다.


1
실제로 UIImage 객체와 함께 po를 직접 사용하면 인스턴스의 클래스 이름 메모리 주소 만 콘솔에 인쇄됩니다. 다음과 같은 형식 : <UIImage : 0x7fc98df6c7d0>
Daniel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.