[xcode] Xcode에서 LLDB로 디버깅하는 동안 변수 값을 변경하는 방법은 무엇입니까?

Xcode에서 GDB를 사용하면 디버깅하는 동안 로컬 변수를 변경할 수 있습니다 ( XCode에서 디버깅하는 동안 NSString 값을 변경하는 방법 참조 ). LLDB는 비슷한 기능을 제공합니까? 그렇다면 어떻게 사용할 수 있습니까?



답변

expr myString = @"Foo"

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

구문 : expression-

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

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

   -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.

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

예 :

expr my_struct-> a = my_array [3]
expr -f bin- (인덱스 * 8) + 5
expr char c [] = “foo”; c [0]

중요 참고 :이 명령은 ‘원시’입력을 사용하므로 명령 옵션을 사용하는 경우 명령 옵션의 끝과 원시 입력의 시작 사이에 ‘-‘를 사용해야합니다.

‘expr’은 ‘expression’의 약어입니다.


답변

다음은 나를 위해 작동합니다. Xcode 8을 사용하고 있습니다.

변수 (예 : “dict”)를 nil로 설정 한 다음 코드 흐름을 테스트하려면 다음을 시도해보십시오.

  1. 원하는 값으로 초기화 한 후 중단 점을 올바르게 설정하십시오.
  2. 그런 다음 lldb 명령 행에서 “expression dict = nil”을 실행하여 변경하십시오. (예 : “nil”)
  3. 중단 점을 넘어서십시오.
  4. 다음 줄에서 변수 “dict”를 확인하십시오. 그것은 없을 것입니다.

콘솔과 비슷한 모양입니다.

(lldb) expression dict = nil
(NSDictionary *) $5 = nil


답변

Xcode 10 또는 11을 사용하는 경우 필요한 변수로 초기화 한 후 중단 점을 올바르게 설정하면 po myString = "Hello World"쉽게 사용하여 변수를 변경할 수 있습니다.


답변