Xcode 디버거 : 변수 값보기


107

UITableViewController의 내 코드 :

delegate.myData = [myData objectAtIndex:indexPath.row];

디버거에서 delegate.myData또는 의 값을 어떻게 볼 수 indexPath.row있습니까? delegate.myData배열이어야 indexPath.row하고 int. 난 단지 객체의 메모리 주소를 볼 수 있습니다 delegateindexPath하지만 어디 myDatarow?

대체 텍스트

답변:


142

Xcode 디버거에서 NSDictionary 변수의 내용을 보는 방법을 확인하십시오 .

나는 또한 사용

po variableName
print variableName

콘솔에서.

귀하의 경우에는 실행할 수 있습니다

print [myData objectAtIndex:indexPath.row]  

또는

po [myData objectAtIndex:indexPath.row]

감사합니다! 나는 많이 시도한다 : "print [myData objectAtIndex : indexPath.row]", "po [myData objectAtIndex : indexPath.row]", "print indexPath.row", "po indexPath.row", ...하지만 매번 "행이라는 이름의 구성원이 없습니다."라는 메시지가 나타납니다. 이것은 "print indexPath"및 "po indexPath"로 작동합니다. 그래서 "."대신 "[]"를 사용해 보았습니다. "po [indexPath row]"-> "NIL 개체의 설명을 인쇄 할 수 없습니다." "po [indexPath getRow]"-> "대상이이 메시지 선택기에 응답하지 않습니다." :-(
Manni

4
try print (int) [indexPath row]
Andriy

po [myData objectAtIndex : (int) [indexPath row]]
Andriy

@VanDuTran 나는 po objswift에 해당하는 것이 po print(obj).
크리스

이것은 계산 된 속성의 값을 찾는데도 완벽했습니다. 감사!
Paula Hasstenteufel

25

나는 개발 환경으로서의 Xcode가 변수를 디버그하는 쉬운 방법을 포함해야한다는 다른 포스터에 동의합니다. 음, 좋은 소식이 하나 있습니다!

Xcode에서 변수를 디버깅하는 방법에 대한 간단한 답변 / 튜토리얼을 검색하고 찾지 못한 후 Xcode 자체를 탐색하여 (적어도 저에게는) 매우 유용한 발견을 발견했습니다.

Xcode 4.6.3에서 변수를 쉽게 디버그하는 방법

Xcode의 메인 화면에서 스크린 샷에 표시된 오른쪽 상단 모서리 버튼을 클릭하여 하단 디버그 영역을 확인하십시오.

디버그 영역 버튼

Xcode 4.6.3의 디버그 영역

이제 코드 영역의 테두리를 클릭하여 프로그램을 일시 중지 할 코드 줄인 중단 점을 설정합니다.

중단 점

이제 디버그 영역에서이 버튼을 찾아 중간에있는 버튼을 클릭합니다. 이제 지역이 둘로 나뉘어져 있음을 알 수 있습니다.

디버그 영역 분할

이렇게 보일 것

이제 애플리케이션을 실행하십시오.

프로그램 실행 중에 첫 번째 중단 점에 도달하면 해당 중단 점에서 사용할 수있는 모든 변수가 왼쪽에 표시됩니다.

검색 필드

더 자세한 정보를 위해 변수의 왼쪽 화살표를 확장 할 수 있습니다. 검색 필드를 사용하여 원하는 변수를 분리하고 중단 점 범위에 "들어가는"때 실시간으로 변경되는 것을 확인하십시오.

단계

디버그 영역의 오른쪽에서 원하는 변수를 마우스 오른쪽 버튼으로 클릭하여 원하는대로 변수를 인쇄하도록 보낼 수 있습니다.

상황에 맞는 메뉴

보시다시피 컨텍스트 메뉴에는 매우 흥미로운 디버깅 옵션이 가득합니다. 같은 시계 이미 입력 된 명령 또는으로 제안 된 그 값 편집 ... 그것은 당신의 변수의 런타임 값을 변경!


21

또한 다음을 수행 할 수 있습니다.

  1. 실행을 일시 중지하려면 중단 점을 설정하십시오.
  2. 개체는 실행 범위 내에 있어야합니다.
  3. 개체 또는 변수 위로 마우스 포인터 이동
  4. 노란색 툴팁이 나타납니다.
  5. 도구 설명 위로 마우스를 이동합니다.
  6. 위아래를 가리키는 두 개의 작은 화살표를 클릭하십시오.
  7. 상황에 맞는 메뉴가 나타납니다.
  8. "설명 인쇄"를 선택하면 [개체 설명]이 실행됩니다.
  9. 설명은 콘솔의 출력에 나타납니다.

IMHO 조금 숨겨져 있고 성가신 ...


내 xcode "인쇄 설명"이 작동하지 않는 경우 어떻게 활성화 할 수 있습니까?
Kirtikumar A.

@kirtiavaiya 응용 프로그램은 일시 중지 상태 여야하며 변수는 인쇄 할 현재 범위 내에 있어야합니다. 또한 "self.variable"을 직접 인쇄 할 수 없지만 _ <변수 이름>을 인쇄하는 데 Andriy 솔루션을 사용할 수 있습니다. 예 : self.btnHello의 경우 "po _btnHello"콘솔에 작성합니다 (getter 메서드의 이름을 변경하지 않은 경우에만 작동 함)
LightMan

예 @LightMan, 당신은 말했다 그것으로, 그러나 또한이 작동하지 않습니다
Kirtikumar A.

10

여러분의 혼란은 선언 된 속성이 (인스턴스) 변수가 아니기 때문에 (필요한 이름과 동일하게 명명 됨) 발생합니다.

표현

indexPath.row

다음과 같다

[indexPath row]

및 할당

delegate.myData = [myData objectAtIndex:indexPath.row];

다음과 같다

[delegate setMyData:[myData objectAtIndex:[indexPath row]]];

합성 된 속성에 대한 표준 명명을 가정합니다.

또한는 delegate유형으로 선언 될 수 있습니다 id<SomeProtocol>. 즉, 컴파일러가 delegate해당 시점에 실제 유형 정보를 제공 할 수 없었고 디버거는 컴파일시 제공되는 정보에 의존하고 있습니다. 때문에 id일반적인 유형 인,의 인스턴스 변수에 대한 더 컴파일 시간 정보가 없습니다 delegate.

사람들은 당신이 표시되지 않는 이유입니다 myData또는 row변수로.

-row또는 전송 결과를 검사 -myData하려면 명령 p또는 po다음을 사용할 수 있습니다 .

p (NSInteger)[indexPath row]
po [delegate myData]

또는 표현식 창을 사용합니다 (예를 들어 delegate실제 유형 임을 알고 MyClass *있는 경우 표현식을 추가하거나을 (MyClass *)delegate마우스 오른쪽 버튼으로 클릭 하고 실제 유형 (예 :)을 delegate선택 View Value as…하고 입력 할 수 있습니다 .delegateMyClass *

즉, 디버거가 더 도움이 될 수 있다는 데 동의합니다.

  • 디버거 창에 컴파일 시간 정보 대신 런타임 유형 정보를 사용하도록 지시하는 옵션이있을 수 있습니다. 당연히 디버거 속도가 느려지지만 유용한 정보를 제공합니다.

  • 선언 된 속성은 속성이라는 그룹에 표시 될 수 있으며 디버거 창에서 직접 검사 (선택 사항)를 허용 할 수 있습니다. 이것은 또한 정보를 얻기 위해 메시지를 보내거나 메소드를 실행해야하기 때문에 디버거 속도를 늦출 수 있지만 유용한 정보도 제공합니다.


설명해 주셔서 감사합니다! 이것은 저에게 많은 도움이되었습니다! :-)
마니

7

런타임에 콘솔 창에 값을 인쇄 할 수 있습니다. 다음은 단계입니다.

  1. 값을 가져 오려는 중단 점을 배치하십시오.
  2. 이제 단계별 디버그를 수행하십시오.
  3. 런타임에 값을 확인할 변수 / 대리자에 커서를 놓습니다.
  4. 이제 변수 / 대리자에 대한 설명이 표시됩니다.
  5. "i"를 클릭하면 자세한 설명이 표시됩니다.
  6. 콘솔 창에 세부 정보도 인쇄됩니다.

콘솔 창에 세부 정보를 인쇄하기위한 스크린 샷


1
이것이 신속하게 작동합니까, obj c에서 볼 때 사용하는 것처럼 객체의 값을 신속하게 볼 수 없습니다.
umairhhhs

1
@umairhhhs이 게시물은 Objective-C 전용입니다.
Jayprakash Dubey

1
나는 이것이 매우 도움이되고 시간을 절약하는 기능이기 때문에 왜 이것이 신속한 편집기가 아닌지 궁금합니다.
umairhhhs

1

이것은 조금 복잡해집니다. 이러한 객체는 사용자 정의 클래스 또는 구조체이며 Xcode에서 다른 개발 환경 에서처럼 내부를 보는 것은 쉽지 않습니다.

내가 당신이라면보고 싶은 값을 몇 가지 설명과 함께 NSLog합니다.

즉 :

NSLog(@"Description of object & time: %i", indexPath.row);

11
예, NSLog는 가능성이 있지만 디버깅에 대한 편안한 대안은 아닙니다. 원하는 값을 표시 할 방법이 없다는 것이 매우 놀랍습니다. 이는 개발 환경의 기본 기능에 속합니다.
Manni

2
XCode에 대한 가장 분노한 점. 서투른.
ryan0

1

Run-> Show-> Expressions 시도

어레이의 이름이나 찾고있는 것을 입력하십시오.


감사합니다! 식 창에 "indexPath.row"와 "delegate.myData"를 입력했지만 매번 "Summary"열에 "out of scope"로 나타납니다. :-(
Manni

np, 나는 그것을 찾을 때까지 같은 문제가 있었다;)
tbone

1
배열 등을 설정 한 직후에 중단 점을 설정하고 표현식에서 값을 찾아야합니다. 행운을 빕니다
tbone 2011 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.