2012-06-08 4 views
2

bt 명령에서 선택된 항목을 가져올 수 있는지 궁금합니다. 예 : 특정 함수에 대한 호출 함수 찾기. 아이디어는 기본적으로 해당 함수에 중단없는 중단 점을 추가 한 다음 호출 스택을 인쇄하는 것입니다. 함수 호출, 어쩌면 그것의 호출 함수. 결국 이것은 bt 명령의 결과를 필터링하는 것으로 귀결됩니다. 그 사이에 프레임 워크와 런타임 메소드를 제외시키기 위해서는 필터링이 필요할 수 있습니다.lldb : 전화 기능을 얻는 방법?

답변

5

오늘이 작업을 수행하려면 약간의 파이썬 스크립팅을 사용해야합니다. 나쁘지 않습니다. 나는 # 1을 브레이크 포인트하려면이 명령을 추가 해요, 난, 내 중단 점 (-s python는이 스크립트 언어 파이썬으로 작성된 의미에 명령을 추가 (mach_msg()이 예제에) 내 브레이크 포인트를 설정

(lldb) br se -n mach_msg 
(lldb) br comm add -s python 1 
Enter your Python command(s). Type 'DONE' to end. 
> thread = frame.GetThread() 
> frnum = 0 
> for fr in thread.frames: 
> print '% 2d %s' % (frnum, fr.GetFunctionName()) 
> frnum = frnum + 1 
> frame.GetThread().GetProcess().Continue() 
> DONE 

).

파이썬 코드는 현재 중단 점 개체와 프레임 개체와 함께 자동으로 제공됩니다 (lldb의 "help break command add"참조). 프레임 객체에서 현재 스레드를 얻은 다음 해당 스레드의 스택 프레임을 반복합니다.

lldb에는 이러한 python 개체에서 수행 할 수있는 작업에 대한 많은 정보가 있습니다. 예 :

(lldb) script help (lldb.SBFrame) 
(lldb) script help (lldb.SBThread) 

http://lldb.llvm.org/python-reference.html

+0

하가, 친구가 당신이 브레이크 포인트에 넣을 수있는 "명령"스크립트 유형을 놓친 지적을 참조하십시오. "br comm add -s command 1"과 원하는 lldb 명령 ("bt", "c") 다음에 "DONE"을 사용하여 파이썬없이이 작업을 수행 할 수 있습니다. –

+0

다음 메시지가 나타납니다 : "경고 : 중단 점에 연결된 명령이 없습니다." – Adobels

관련 문제