2016-11-23 3 views
1

주어진 프레임에서 "자아"를 얻고 싶습니다. 이것을 할 수있는 방법이 있습니까?XCode LLDB - 주어진 프레임에서 자아 가져 오기

"프레임 정보"및 기타 몇 가지 옵션을 시도했습니다.

(lldb) frame info frame #11: 0x0000000102767ab8 UIKit`-[UIImageView _resolveImageForTrait:] + 463 (lldb)

다음 예제 예를 들어 내가 11 프레임에서 버튼 객체를 원한다.

enter image description here

답변

2

ABI의이 인수 전달 레지스터를 지정에서 다음 그들은 여전히 ​​때문에 그것은, 함수가 호출 될 때 디버그 정보 O를 당신이 중지되는 경우 승/최적화 기능에 대한 매개 변수를 얻을 매우 쉽습니다. 따라서 조사하고있는 문제가 재현 할 수있는 것이라면 자동 연속 중단 점을 -[UIImageView _resolveImageForTrait:]에두고 해당 명령에 $arg1을 인쇄하거나 넣으면됩니다.

그러나이 스택부터 시작하여 가치를 계산하려는 경우 인생은 상당히 어려워집니다. 관심있는 프레임이 다른 함수를 호출 했으므로 더 이상 인수 전달 레지스터에 살지 않는다는 보장을받습니다.이 인수는 다시 사용되었습니다. 그리고 함수의 본문에 인수가 들어갈 필요가 없습니다. 최적화 된 코드에서는 컴파일러가 코드를 가장 빠르게 실행하는 것으로 간주합니다.

실제로 통화가 중단 된 후 해당 프레임에서 self가 참조되지 않으면 정보가 더 이상 존재하지 않을 수 있습니다.

self가 해당 프레임에서 아직 살아 있다면, 그것은 아마도 imageWithTraitCollection :을 호출하기 전에 함수의 어딘가에 스택에 푸시되었을 것입니다. 디버그 정보는 그 위치를 알려주지 만, 사용자가 선택할 수있는 유일한 방법은 어셈블리 코드를 읽고 함수의 시작 부분에있는 첫 번째 인수 레지스터에서 중지 된 지점으로 self를 전파하는 것입니다. 이것은 작은 기능에있어서 그리 나쁘지는 않을 것입니다.

관련 문제