2014-09-29 2 views
0

문제 : Xcode에서 동작하는 중단 점을 사용하여 프로그램을 추적하려고합니다. 그래서 관심이있는 것은 내 함수가 항상 한 스레드에서 실행되는 경우입니다.lldb/Xcode : 스레드 인덱스, ID 또는 이름을 인쇄하는 방법?

매뉴얼이 있습니다 : http://lldb.llvm.org/formats.html 모든 필수 변수가 있지만 p/expr 명령으로 어떤 이유로 작동하지 않습니다.

그래서 나는 p $ {thread.id} 또는 expr-thread.id와 같은 것을 원하지만 나는 그들과 운이 없다. 내가 아는 방법은 나쁜

은 다음과 같습니다

P/X (긴) pthread_self()

얻을 수있는 이름 :

페이지 새 문자 [256] // $ 3 = 0x000000007480840과 같은 적절한 포인터를 반환합니다.

p (int) pthread_getname_np ((pthread_t) yourId, $ 3, (size_t) 256) // i t는

P $ 3 // 당신이 누출

하지만 오히려 나쁜 해결 방법을보고, 그 이름 당신이 메모리에 대해 걱정하는 경우 $ 3 // 삭제

페이지를 볼 수 버퍼에 스레드 이름을 쓴다 중단 점에 적합하지 않습니다.

+0

이러한 변수는 식에서 작동하지 않는 것으로 알려져 있으며, 전적으로 설계된 것입니다. 표현식에서 스레드 정보를 검색하려면 코드 에서처럼 스레드 정보를 검색해야합니다. –

답변

2

"formats.html"페이지에 언급 된 형식은 표현식이 아닌 lldb가 인쇄 할 때마다 스레드 및 프레임 정보가 인쇄되는 방식으로 사용됩니다. 내 .lldbinit에서

settings set thread-format thread #${thread.index}: tid = ${thread.id}{, name = ${thread.name}}{, function: ${function.name}} {, stop reason = ${thread.stop-reason}}{, return = ${thread.return-value}}\n 

, 그래서 중지 할 때 나는 스레드 ID & 이름을 볼 수 있습니다 : 예를 들어,이 있습니다.

Xcode에서 실행중인 경우 Xcode가 모든 중지를 Xcode 콘솔에 표시하지 않기 때문에 일반적으로 중지시 인쇄 된 스레드 정보를 볼 수 없습니다. 당신이 관심있는 중단 점에서 중단 점 명령을 넣을 수 있습니다, 당신의 목적에 따라서

(lldb) thread info 
    thread #1: tid = 0x34ca69, name = A_Cool_Thread, function: -[SKTGraphicView alignLeftEdges:] , stop reason = breakpoint 2.1 

하고 "스레드 명령이 될 수 있습니다하지만 당신은 여전히"thread 정보 "명령을 사용하여이 정보의 일부를 호출 할 수 있습니다 정보 ". 그러면 모든 정류장에서 ID와 이름 등을 표시합니다.

주, 같은 일을하는 또 다른 방법은 예를 들어, 파이썬 중단 명령을 사용하는 것입니다 :

(lldb) breakpoint command add -s python <BPNO> 
Enter your Python command(s). Type 'DONE' to end. 
def function (frame, bp_loc, internal_dict): 
    """frame: the lldb.SBFrame for the location at which you stopped 
     bp_loc: an lldb.SBBreakpointLocation for the breakpoint location information 
     internal_dict: an LLDB support object not to be used""" 
    print "Thread ID is: ", frame.thread.GetThreadID(), " and name: ", frame.thread.GetName() 
    DONE 
(lldb) 

그럼 당신은 당신이 같은 것을 볼 수 브레이크 포인트 누를 때마다 :

Thread id is: 3459689 and name: A_Cool_Thread 

BTW, 당신은 당신이 어느 시스템에 있었는지 말하지 않았지만 Mac OS X에서 여기에 나열된 스레드 ID는 pthread ID가 아닙니다. pthread id는 프로그램의 주어진 시간에 존재하는 모든 쓰레드에 대해서만 유일하게 보장되므로, 주어진 시간에 프로그램의 모든 쓰레드는 서로 다른 pthread ID를 가지지 만, 서로 다른 시간에 두 개의 쓰레드가 서로 다른 pthread ID가 있습니다. 그러나 Mac OS X에는 "전역 적으로 고유 한 스레드 ID"가 있습니다.이 ID는 프로그램 실행 중에 고유합니다.이것이이 스레드 ID입니다.

관련 문제