2014-05-19 6 views
2

런타임 : LLDB screenshot동적 오브젝티브 C에서 로컬 변수를 액세스 엑스 코드를 통해 디버거에 연결되면 LLDB 로컬 변수의 유용한 뷰 (스크린 샷의 왼쪽 아래)를 제공

는 I가 LLDB 발견을 위의 스크린 샷의 오른쪽에 표시된대로 로컬 변수 목록을 제공하는 frame variable 명령 (및 gdb의 info locals)

내 희망은 런타임에이 기능을 장치에서 수행 할 수 있다는 것입니다. 예를 들어 backtrace_symbols()을 사용하여 스택 추적에 액세스하고 현재 선택기를 _cmd과 기타 몇 가지를 통해 액세스 할 수 있습니다.

이 분야에 경험이있는 사람이 있습니까? 미리 감사드립니다.

+0

그냥 런타임 (I 더 - C 목표를 사용하여 디버거 유사한 방식으로 지역 변수에 액세스 할 수있는 방법은 없습니다 ... 당신이 해결하기 위해 노력하고있는 더 큰 문제에 대해 다시 생각하는 것입니다 왜 당신도 그 중 하나를 원할 지 모르겠습니다.) LLDB/GDB는 바이너리의 릴리즈 빌드에없는 디버그 정보에 의존합니다. –

답변

4

Xcode/LLDB는 기호 테이블이라고하는 이진 파일의 디버그 정보에 액세스 할 수 있기 때문에이 정보를 표시 할 수 있습니다.이 정보는 소스 위치에서 어떤 메모리 위치가 소스 코드의 어떤 이름과 일치하는지 이해하는 데 도움이됩니다. 이것은 모두 Objective-C 런타임 외부에 있으며 런타임에 인터페이스를 가져올 인터페이스가 없습니다.

이것이 작동하지 않는 또 다른 이유가 있습니다. 디버거에서 실행할 코드를 만들 때 컴파일러 최적화가 해제되므로 코드에서 참조하는 모든 변수가 있습니다.

릴리스 용으로 빌드 할 때 일반적으로 컴파일러 최적화가 들어가서 신중하게 명명 된 로컬 변수를 재 배열하여 작업 속도를 향상시킵니다. 그것들은 심지어 CPU 레지스터에있는 메모리에 저장된 적이조차되지 않을 수도 있습니다. 또는 옵티마이 저가 필요할 필요가 없다는 것을 스스로 입증 할 수 있다면 전혀 존재하지 않을 수도 있습니다.

내 조언