Programing

디버깅하는 동안 표현식을 평가하는 Xcode

lottogame 2020. 12. 27. 10:18
반응형

디버깅하는 동안 표현식을 평가하는 Xcode


iPhone 앱에서 작업 중입니다. 저는 정규 Java 개발자이며 중단 점을 설정하고 프로세스를 중지 할 수있는 Eclipse를 사용하는 데 익숙합니다. 그런 다음 원하는 표현식을 입력 할 수 있으며 Eclipse는 프로세스에서 해당 지점의 값을 사용하여 평가합니다.

Xcode에서 할 수있는 방법이 있습니까? 중단 점에서 멈춘 다음 평가할 코드를 입력하고 싶습니다. gdb 콘솔을 사용하면 po( print-object ) 할 수 있지만 실제로는 제한적입니다. 도움이 필요하세요?


내 연습 :

po [NSUserDefaults standardUserDefaults]

표시 : <NSUserDefaults : 0x6143040>

po [[NSUserDefaults standardUserDefaults] stringForKey:@"Currency"]

표시 : "CHF"


XCode 4.0에서 이것은 GUI에 숨겨져 있습니다. 중단 점에있을 때 디버그 영역 내에서 변수보기를 볼 수 있습니다. 지역 변수 등을 보여주는 창입니다. 변수보기를 마우스 오른쪽 단추로 클릭하고 "식 추가 ..."를 선택하십시오.

나는 이것이 오래된 스레드라는 것을 알고 있지만 여전히 Google 최고의 히트작이므로 대답 할 가치가 있다고 생각했습니다.


디버거에서 "expression"명령을 사용하십시오. 그것을 사용하는 것은 비교적 간단합니다. 명령 표현식을 입력하고 Enter를 누르기 만하면됩니다. 그러면 식을 입력하라는 메시지가 표시됩니다. 다음은 예입니다.

(lldb) expression
Enter expressions, then terminate with an empty line to evaluate:
2+2

(int) $2 = 4

또한 아래 표현식 명령에 대한 도움말 정보를 첨부했습니다. 도움이 되었기를 바랍니다.

현재 범위에있는 사용자 정의 변수 및 변수를 사용하여 현재 프로그램 컨텍스트에서 C / ObjC / C ++ 표현식을 평가합니다. 이 명령은 '원시'입력을받습니다 (물건을 인용 할 필요가 없습니다).

구문 : expression-

명령 옵션 사용법 : expression [-f] [-G] [-a] [-d] [-t] [-u]-expression [-o] [-a] [-d] [-t] [- u]-표현

   -G <gdb-format> ( --gdb-format <gdb-format> )
        Specify a format using a GDB format specifier string.

   -a <boolean> ( --all-threads <boolean> )
        Should we run all threads if the execution doesn't complete on one
        thread.

   -d <boolean> ( --dynamic-value <boolean> )
        Upcast the value resulting from the expression to its dynamic type
        if available.

   -f <format> ( --format <format> )
        Specify a format to be used for display.

   -o ( --object-description )
        Print the object description of the value resulting from the
        expression.

   -t <unsigned-integer> ( --timeout <unsigned-integer> )
        Timeout value for running the expression.

   -u <boolean> ( --unwind-on-error <boolean> )
        Clean up program state if the expression causes a crash, breakpoint
        hit or signal.

시간 초과 : 표현식이 (실행 코드없이) 정적으로 평가 될 수 있다면 그렇게 될 것입니다. 그렇지 않으면 기본적으로 표현식이 현재 스레드에서 짧은 시간 제한 (현재 .25 초)으로 실행됩니다. 해당 시간 내에 반환되지 않으면 평가가 중단되고 모든 스레드가 실행되면서 재개됩니다. -a 옵션을 사용하여 모든 스레드에서 재 시도를 비활성화 할 수 있습니다. -t 옵션을 사용하여 더 짧은 시간 초과를 설정할 수 있습니다.

사용자 정의 변수 : 편의를 위해 고유 한 변수를 정의하거나 후속 표현식에서 사용할 수 있습니다. C에서 변수를 정의하는 것과 같은 방식으로 정의합니다. 사용자 정의 변수의 첫 번째 문자가 $이면 변수의 값은 향후 표현식에서 사용할 수 있으며 그렇지 않으면 현재 표현식에서만 사용할 수 있습니다.

예 :

   expr my_struct->a = my_array[3] 
   expr -f bin -- (index * 8) + 5 
   expr unsigned int $foo = 5
   expr char c[] = "foo"; c[0]

중요 참고 :이 명령은 '원시'입력을 사용하기 때문에 명령 옵션을 사용하는 경우 명령 옵션의 끝과 원본 입력의 시작 사이에 '-'를 사용해야합니다.


Xcode에 대한 질문에는 대답하지 않지만 JetBrains의 AppCode 는 우리 대부분이 다른 플랫폼에서 알고있는 표준 IDE 방식으로이를 수행합니다.

ReferenceURL : https://stackoverflow.com/questions/4825486/xcode-evaluating-expressions-while-debugging

반응형