簡體   English   中英

lldb / Xcode:如何打印線程索引,ID或名稱?

[英]lldb/Xcode: how to print thread index, id or name?

問題:我想在斷點的幫助下使用Xcode中的動作來跟蹤程序,所以我感興趣的是我的函數是否總是在一個線程中執行。

有手冊: http : //lldb.llvm.org/formats.html ,它具有所有必需的變量,但是由於某些原因,它們在p / expr命令中不起作用。

所以我想要像p $ {thread.id}或expr-thread.id之類的東西,但是我沒有運氣。

我知道不好的方法是:

p / x(長)pthread_self()

並獲得名稱:

p new char [256] //它將返回合適的指針,例如$ 3 = 0x000000007480840

p(int)pthread_getname_np((pthread_t)yourId,$ 3,(size_t)256)//將線程名寫入緩沖區

p $ 3 //您將看到它的名字

p delete $ 3 //如果擔心內存泄漏

但它看起來是一個不好的解決方法,並且不太適合斷點。

“ formats.html”頁面中提到的格式不是用於表達式,而是用於在lldb打印時打印線程和框架信息的方式。 例如,我有這個:

    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

在我的.lldbinit中,這樣我可以在停止時看到線程ID和名稱。

如果您在Xcode中運行,則通常不會在停止處看到線程信息,因為Xcode不會在每次停止時都向Xcode控制台回顯。 但是您仍然可以使用“線程信息”命令來調用其中一些信息:

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

因此,出於您的目的,您可以在所需的斷點上放置一個breakpoint命令,並使該命令為“線程信息”。 然后,每站都會顯示ID和名稱以及其他內容。

請注意,另一種執行相同操作的方法是使用Python斷點命令,例如:

(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

順便說一句,您沒有說您使用的是什么系統,但是在Mac OS X上,此處列出的線程ID不是pthread ID。 pthread ID僅保證在程序中在給定時間存在的所有線程都是唯一的,因此,盡管程序在給定時間的每個線程將具有不同的pthread ID,但不能保證在不同時間有兩個線程會具有不同的pthread ID。 Mac OS X有一個“全局唯一的線程ID”,但是,在程序運行期間它是唯一的。 這就是該線程ID。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM