LLDB가 view.bounds를 인쇄 할 수없는 이유는 무엇입니까?
이런 것들은 디버깅 할 때 나를 미치게 만듭니다.
(lldb) p self.bounds
error: unsupported expression with unknown type
error: unsupported expression with unknown type
error: 2 errors parsing expression
(lldb) p (CGRect)self.bounds
error: unsupported expression with unknown type
error: unsupported expression with unknown type
error: C-style cast from '<unknown type>' to 'CGRect' is not allowed
error: 3 errors parsing expression
(lldb) p [self bounds]
error: 'bounds' has unknown return type; cast the call to its declared return type
error: 1 errors parsing expression
(lldb) p (CGRect)[self bounds]
(CGRect) $1 = origin=(x=0, y=0) size=(width=320, height=238)
(lldb) You suck!
error: 'You' is not a valid command.
(lldb) …
처음 세 번의 시도가 실패한 이유는 무엇입니까? 더 간단한 인쇄 방법이 self.bounds
있습니까? 감사.
다음 방법으로 액세스 할 수 있습니다.
p (CGRect)[view bounds]
또는
p view.layer.bounds
view.bounds
실제로 view.layer.bounds
의 유형 정보를 [UIView bounds]
사용할 수없는 것 같습니다.lldb
Xcode 6.3부터 더 나은 솔루션이 있습니다. 요컨대, LLDB 용 UIKit을 가져와야 다음 유형에 대해 알 수 있습니다 expr @import UIKit
.. 체크 아웃 이 기사를 당신의 인생을 더 쉽게하기 위해 몇 가지 트릭을 배울 수 있습니다.
당신이 좋아하는거야 엑스 코드를 6.3+
TLDR
(lldb) e @import UIKit
(lldb) po self.view.bounds
LLDB의 Objective-C 표현식 파서는 이제 모듈을 가져올 수 있습니다. 모든 후속 표현식은 모듈에 정의 된 함수 및 메서드 프로토 타입에 의존 할 수 있습니다.
(lldb) p @import Foundation
(lldb) p NSPointFromString(@"{10.0, 20.0}");
(NSPoint) $1 = (x = 10, y = 20)
Xcode 6.3 이전에는 디버그 정보가없는 메서드와 함수에 반환 유형을 지정하기 위해 명시적인 유형 변환이 필요했습니다. 모듈을 가져 오면 개발자는이 정보를 수동으로 결정하고 지정하는 더 많은 노동 집약적 인 프로세스를 피할 수 있습니다.
(lldb) p NSPointFromString(@"{10.0, 20.0}");
error: 'NSPointFromString' has unknown return type; cast the call to its declared return type
error: 1 errors parsing expression
(lldb) p (NSPoint)NSPointFromString(@"{10.0, 20.0}”);
(NSPoint) $0 = (x = 10, y = 20)
모듈 가져 오기의 다른 이점으로는 더 나은 오류 메시지, 64 비트 장치에서 실행할 때 가변 함수에 대한 액세스, 잠재적으로 잘못된 유추 인수 유형 제거 등이 있습니다.
추신 : 당신이 또한 p와 po를 혼동한다면
p == print == expression -- == e --
po == expression -O -- == e -O --
--
command+flag
vs 사이의 구분자inputs
-O
플래그는 객체 description
메소드 를 호출하기위한 것입니다.
LLDB는 사용할 때 보내는 메시지에 대한 표기법 점 지원하지 않습니다 p
그의 왜
p self.bounds
작동하지 않지만
p [self bounds]
그렇습니다.
(하지만 실제로 사용할 때 객체에 대해 지원합니다 po
)
또한 LLDB에는 런타임시 사용할 수있는 비 객체의 유형 정보가 없으므로 반환 값을 캐스팅하여 명시 적으로 유형을 제공해야합니다.
Xcode 6.3을 사용하면 UIKit을 가져온 다음 프레임 또는 뷰 경계를 인쇄 할 수 있습니다.
expr @import UIKit
p self.view.bounds
당신이 이것을 실행할 때의 맥락이 무엇인지 모르겠습니다. 그러나 lldb가 self
.
lldb가 평가하기 위해서는 어떤 종류의 클래스가 속성을 가지고 self.bounds
있음을 알아야합니다 . 이러한 컨텍스트에서 호출 할 수 있으므로 ObjC 유형 이라고 가정 할 수 없습니다 .self
bounds
self
void test()
{
struct
{
int bounds;
} self;
}
그래서 당신은 오류를 얻습니다 error: unsupported expression with unknown type
However, if you call it using [self bounds]
, lldb knows that self
much be ObjC type because []
syntax only apply to ObjC type. But since the type of self
is not clear, it still cannot evaluate the result of [self bounds]
so you need to cast it to CGRect
Try with following expression,
p self.view.bounds.size.width
or use,
po self.view
p - Print is only uses to print normal/simple values while, po - Print Object works same as NSLog to print value of an object
I tried @an0's answer expr @import UIKit
, but it didn't work.
Then I added a pch file, and add these lines of code in the file:
#ifndef PrefixHeader_pch
#define PrefixHeader_pch
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#endif
#endif /* PrefixHeader_pch */
Next, link the pch file to my project:
Run the app again, then I can use the dot notation in lldb console:
(lldb) po self.view.bounds
For how to add a pch file , see the answer here PCH File in Xcode 6
ReferenceURL : https://stackoverflow.com/questions/18885255/why-cant-lldb-print-view-bounds
'programing' 카테고리의 다른 글
"for"문에서`! =`또는`<`를 사용해야합니까? (0) | 2021.01.18 |
---|---|
파일을 무시하는 방법 grunt uglify (0) | 2021.01.18 |
16 진수 문자열에 대한 바이트 배열 (0) | 2021.01.18 |
요인 수준 정리 (여러 수준 / 라벨 축소) (0) | 2021.01.18 |
응용 프로그램을 다시 시작하지 않고 동적으로 로그 수준 변경 (0) | 2021.01.18 |