2016-12-15 19 views
0

frame variable 인 경우에만 디버그 정보를 사용했는지 또는 메서드 호출의 시작 시점에 변수를 인트로 스 트록 할 수 있습니다.프레임이 최상위에 있지 않으면 스택 프레임이 나타 납니까?

가끔 우리 코드가 일부 시스템 또는 세 번째 lib에서 중단 될 수 있으므로 변수 또는 스택을 검사하려고 할 수 있습니다. 이것에 대한 해결책을 찾으려면 Disassemble 프레임을 읽고 어셈블리 코드를 읽고 수동으로 스택을 검사하십시오.

하지만 프레임의 스택이 최상위에 없을 때 빠른 방법을 찾을 수 없습니다. lldb 또는 Xcode에서이 작업을 수행하는 간단한 방법.


모든 스택 메모리를 덤프 할 수있는 project in github이 발견되었습니다. 그래서 일부 네이티브 lldb 명령을 사용하여 메서드 호출의 스택 메모리를 덤프 할 수 있습니까?

+0

"프레임의 스택 세그먼트"가 의미하는 것이 확실하지 않습니다. –

+0

그냥 메서드 호출에 의해 생성 된 스택 주소를 의미합니다. @JimIngham – Karl

답변

0
그것은처럼 나에게 소리

파이썬 API의 당신이 원하는 조사의 종류에 가장 적합 할 것 lldb에 :

http://lldb.llvm.org/python_reference/index.html

당신은 당신이에서 얻을 수있는, 그런 다음 CFA합니다 SBStackFrame.GetCFA()로 파이썬 API. 함수가 입력되면 CFA (콜 프레임 주소)가 스택 프레임 주소가됩니다. 거기에서 다음 젊은 프레임의 CFA는이 프레임에서 사용되는 스택 메모리입니다.

SBProcess.ReadMemory를 사용하여 메모리를 확보 할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 왜 lldb가 이것을 명령으로 추가할까요? – Karl

+0

이유는 없지만 자원. 그것은 공통점이있는 것이 아닙니다. 이것은 내가 명령으로 들어 본 첫 번째 요청입니다. lldb.llvm.org 버그 리포터에서 개선 요청을 제출하면 누군가 시간을 가졌을 때 문제가 발생합니다. 그러나 LLDB Python API의 동기 중 하나는 lldb 개발자의 리소스를 기다리지 않고 이러한 종류의 기능을 추가 할 수 있다는 것입니다. –