2017-10-03 13 views
0

lldb 연습으로 lldb을 첨부하고 Apple의 macOS TextEdit.app에서 기호식 중단 점을 설정하려고합니다. Foundation 클래스에서 중단 점을 설정할 수 있습니다. 하지만 개인 수업에서는 항상 얻을 것 같습니다 중단 점을 실제 위치로 해석 할 수 없습니다. 왜?개인용 Objective-C 클래스에서 lldb "중단 점을 해결할 수 없습니까?"

배송 된 실행 파일이 삭제된다는 점을 이해하지만 Objective-C 심볼 이름을 제거 할 수없고 앱을 "크랙하는"방법을 설명하는 몇 가지 이전 기사를 읽었으며 실제로 작동하는 것처럼 보입니다. gdb로. 그리고 TextEdit 실행 파일에서 otool -ov을 실행하면 모든 개인 기호와 그 주소가 표시됩니다.

는 재단 클래스 잘 작동 방법 :

(lldb) breakpoint set -F "-[NSString initWithFormat:]" 
Breakpoint 1: where = Foundation`-[NSString initWithFormat:], address = 0x00007fff2c0c29d0 
(lldb) breakpoint set -r '\[NSString .*\]$' 
Breakpoint 2: 139 locations. 

을하지만 민간 Document 클래스에서 같은 시도하거나 할 때 실패 내가 찾은 그 방법 중 하나에 사용하여 스티브 Nygard의 class-dump :

현재
(lldb) breakpoint set -F "-[Document validateMenuItem:]" 
Breakpoint 3: no locations (pending). 
WARNING: Unable to resolve breakpoint to any actual locations. 
(lldb) breakpoint set -r '\[Document .*\]$' 
Breakpoint 4: no locations (pending). 
WARNING: Unable to resolve breakpoint to any actual locations. 

답변

1

이 lldb 만 ObjC를 사용 런타임 데이터를 사용하여 메소드가 표현식 분석기에서 호출 될 때 유형 정보를 제공합니다. 브레이크 포인트 룩업을 위해 심볼 테이블에있는 메소드를 폴딩하지 않습니다.

+0

감사합니다. @ 짐 잉햄. 이것이 (아직) lldb에서 구현되지 않은 기능이라고 말하고 있습니까? 그것은 gdb에서 구현 되었습니까? –

+0

otool 보고서에서 관심있는 방법에 대한 주소를 얻고 해당 주소에 중단 점을 설정하면 이론적으로 해결할 수 있습니까? –

+0

첫 번째 질문은 애플의 gdb가 어떤 목적 으로든 ObjC 런타임 데이터를 읽도록 가르친 적이 없다는 것이다. 나는 FSF gdb가 이것을 수행하지 않는다고 생각한다. 나는 현재 계획을 세우지 않았지만 확실하게 lldb에 추가 할 수 있습니다. 이 기능을 추가하는 데 투표하려면 Apple의 버그 기자에게 레이더를 보냅니다. –