내가 제안 적어도 :
- (NSString*)description {
return [NSString stringWithFormat:@"%@; x=%f, y=%f", [super description], _x, _y];
}
수동으로 NSObject
기본을 복제하여 귀하의 슈퍼 클래스가 포함하도록 선택했습니다 수있는 기본이 아닌 행동을 차단하지 않을 그래야.
그 외에도 "요약 문자열 구문 분석 오류"는 lldb 오류입니다. 디버거에서만보고됩니다. its documentation에 따라 po
은 Objective-C 개체에 대해 정확합니다. p
은 C 또는 C++ 객체 용입니다. 따라서 오류에주의 할 필요가 없습니다. 기본적으로 잘못된 lldb 명령을 사용했다고 말하는 것입니다.
편집 : 그것은 가치가 무엇인지, CFArray
에서 사용하는 방법은 open source과 모양에 대해 : 엑스 코드의 디버거 ISN을 : 나는 대답이라고 도박을 기꺼이 위의 다른 의견과 마찬가지로
static CFStringRef __CFArrayCopyDescription(CFTypeRef cf) {
CFArrayRef array = (CFArrayRef)cf;
CFMutableStringRef result;
const CFArrayCallBacks *cb;
CFAllocatorRef allocator;
CFIndex idx, cnt;
cnt = __CFArrayGetCount(array);
allocator = CFGetAllocator(array);
result = CFStringCreateMutable(allocator, 0);
switch (__CFArrayGetType(array)) {
case __kCFArrayImmutable:
CFStringAppendFormat(result, NULL, CFSTR("<CFArray %p [%p]>{type = immutable, count = %u, values = (%s"), cf, allocator, cnt, cnt ? "\n" : "");
break;
case __kCFArrayDeque:
CFStringAppendFormat(result, NULL, CFSTR("<CFArray %p [%p]>{type = mutable-small, count = %u, values = (%s"), cf, allocator, cnt, cnt ? "\n" : "");
break;
}
cb = __CFArrayGetCallBacks(array);
for (idx = 0; idx < cnt; idx++) {
CFStringRef desc = NULL;
const void *val = __CFArrayGetBucketAtIndex(array, idx)->_item;
if (NULL != cb->copyDescription) {
desc = (CFStringRef)INVOKE_CALLBACK1(cb->copyDescription, val);
}
if (NULL != desc) {
CFStringAppendFormat(result, NULL, CFSTR("\t%u : %@\n"), idx, desc);
CFRelease(desc);
} else {
CFStringAppendFormat(result, NULL, CFSTR("\t%u : <%p>\n"), idx, val);
}
}
CFStringAppend(result, CFSTR(")}"));
return result;
}
어떤 의미에서든 똑똑하고 정확하게 올바른 # po
Objective-C 설명을 얻는 방법을 사용할만큼 똑똑하지 않습니다. 당신의 객체가 uninflected Objective-C 객체라면 디버거는 그것을 이해할 수 없을 것입니다.
당신은 "오버라이드 (override)"라고 말합니다 - 이것은 서브 클래스 또는 카테고리입니까? 그리고 수퍼 클래스가 무엇입니까? –
그리고 Xcode에서 "p objectName"을한다고 말하는 것은 아닙니다. Xcode 디버거에서는 항상 객체에 대해'po'를했습니다. 'p'는 스칼라를위한 것입니다. –
주목할 점 중 하나는, Hot Licks는 lldb가 어떤 형식도 실행하지 않고 객체를 포맷하는 방법을 알고있는 내장 포맷터를 가지고 있기 때문에 "p objectName"이 표준 Foundation 객체 (NSString, NSArrays 등)의 대부분에서 작동한다는 것입니다 코드를 작성하십시오. Andy가 그의 업데이트에서 언급했듯이, Python으로 자신 만의 객체에 대한 사용자 정의 포맷터를 작성할 수도 있습니다. –