Xcode에서 GDB를 사용하면 디버깅하는 동안 로컬 변수를 변경할 수 있습니다 ( XCode에서 디버깅하는 동안 NSString 값을 변경하는 방법 참조 ). 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'의 약어입니다.
'expr myLabel.text = @"hello!"
그러나 error: property 'text' not found on object of type 'UILabel *'
... 어떤 생각이 있습니까?
expr (void)[label setText:@"Foo"]
해야합니다. 도트 구문은 일반적으로 디버거에서 작동하지 않습니다. lldb는 아마도 당신이 c-struct의 멤버에 액세스하기를 원할 때 그것을 해석하지만 이것이 이것이 작동하지 않는 이유인지 확실하지 않습니다. Dot-Syntax도 작동하지 않습니다 po
. 대신 po label.text
당신이 사용해야합니다po [label text]
@property
.
p
바로 가기로 사용할 수도 있습니다 expr
. 예 :(lldb) p url = @"http://google.com"
e
바로 가기로 사용할 수도 있습니다 expr
. BTW p
는 인쇄의 별명으로 expr --
(evalue raw input, 플래그 없음) 의 별명 expr -o -- [object]
이거나 po
일반적으로 객체에 대해 더 유용한 출력을 제공합니다.
다음은 나를 위해 작동합니다. Xcode 8을 사용하고 있습니다.
변수 (예 : "dict")를 nil로 설정 한 다음 코드 흐름을 테스트하려면 다음을 시도해보십시오.
콘솔과 비슷한 모양입니다.
(lldb) expression dict = nil
(NSDictionary *) $5 = nil