簡體   English   中英

gdb如何附加到多線程進程

[英]how does gdb attach to multithread process

當我們使用gdb attach調試正在運行的進程時,可以使用gdb attach pid ,如果該進程有兩個或多個線程,則pid是主線程tid。

現在,我想實現一個簡單的調試器來調試多線程進程,但是當我使用調試器附加多線程進程時,只有main thread掛起。

我想知道為什么只使用主線程tid, gdb可以附加該進程的所有線程,gdb如何掛起所有線程? 我們假設使用gdb attach ,所有線程都已創建。

ptrace PTRACE_ATTACHSIGSTOP發送到該進程,該進程將掛起整個進程,即所有線程。

我想知道為什么只使用主線程tid,gdb可以附加該進程的所有線程,gdb如何掛起所有線程?

當您attach PROCESS_PID gdb內部為每個線程調用ptrace(PTRACE_ATTACH)。 在Linux上,您可以自己檢查:

$ strace -e ptrace -p GDB_PROCESS_PID

只需運行具有幾個線程的程序,運行gdb,然后在另一個控制台中運行attach PROCESS_PID之前運行strace。 您必須為每個線程看到ptrace(PTRACE_ATTACH)。

具有與進程PID相同數值的主線程TID是Linux系統的歷史事故; 在其他Unix系統上則不是這樣。

當gdb(或任何調試器)使用ptrace附加到進程時,該進程的所有線程都將被掛起。

暫無
暫無

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

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