2013-03-06 1 views
6

현재 XCode로 디버깅하는 데 문제가 있습니다. 모든 스택 추적에는 마지막 두 건의 호출 만 표시됩니다. lldb 콘솔도 사용할 수 없습니다. 예를 들어 간단한 unrecognized selector 오류 만이 추적 간단한 엑스 코드 재시작이 문제를 해결LLDB 스택 추적은 Xcode의 마지막 2 번만 호출합니다.

* thread #1: tid = 0x2503, 0x32d2e960 libobjc.A.dylib`objc_exception_throw, stop reason = breakpoint 1.1 
    frame #0: 0x32d2e960 libobjc.A.dylib`objc_exception_throw 
    frame #1: 0x37c4ae06 CoreFoundation`-[NSObject(NSObject) doesNotRecognizeSelector:] + 170 
+0

동일한 문제가 있습니다 ... Mac OS X 10.7을 사용하고 있으며 이미 mdimport를 사용했습니다. 모든 심볼 폴더에. 이거 해결 했니? –

답변

6

[NSThread callStackSymbols]을 디버거에서 인쇄 해보십시오.이 오류는 디버거에서 표시되지 않는 경우가 있습니다.

또한 내 경험에 따르면 GDB는 훨씬 더 안정적입니다.

+0

gdb (와'callStackSymbols')는 똑바로 스택 워크를합니다. lldb는 메소드의 명령어를 검사하여 레지스터가 저장되고 스택이 조작되는 방식을 결정합니다. 작년에 팔에 lldb stackwalk가 개선되었지만 Obj-C의 손에 최적화 된 디스패치 루틴은 올바르게 정적으로 분석하기가 매우 어렵습니다. gdb와'callStackSymbols'에 의해 사용 된 간단한 follow-the-frame-chain 알고리즘은 다른 경우에도 실패 할 것이며, 이들 중 어느 것도 항상 올바르게 동작하지 않을 것입니다. 스택 되감기는 꽤 까다로울 수 있습니다. –

+0

@JasonMolenda GDB가 순진한 스택 워크를하지 않는다는 것을 확신합니다. 종종 + callStackSymbols가 작동하는 백 트레이스를 제공하지 못합니다. –

+0

좋은 트릭. 감사! 그래도 불편을 덜어줬으면 좋겠다. :( – Kalle

5

로그 나타낸다. 그러나이 버그는 잠시 후에 계속 발생합니다. 이것에 관한 버그를보고 할게.

+0

간단하지만 효과적입니다. 고맙습니다! 나는 똑같은 문제가 있었다. 디버거는 마지막 두 개의 스택 추적 요소 만 표시합니다. 호출은 모두 단순한 정적 메소드 호출이었습니다. xcode를 다시 시작하면 문제가 해결되었습니다. –

0

Objective-C 런타임 기능을 사용하여 되감기가 힘들 수 있지만 어셈블리는 수동으로 조정되며 lldb는이를 지나치게 푸는 방법을 찾는 데 어려움을 겪을 수 있습니다. 이 경우 하나의 프레임이 더 멀리있는 것처럼 보이고 더 이상 얻을 수없는 것처럼 보입니다.