1
我正在執行一個多線程應用程序和10次中的9次,斷點處理工作得很好,但有時我得到一個SIGCHLD事件而不是SIGTRAP。ptrace(PTRACE_SINGLESTEP)+ waitpid = SIGCHLD
這是序列:
- 應用程序正在運行,主線程遇到INT3
- 調試器的waitpid函數返回SIGTRAP
- 調試SIGSTOPs的已經不是 「T(跟蹤站)」 的所有線程,使用tgkill
- 調試運行的ptrace(PTRACE_SINGLESTEP)上INT3'ed螺紋
- 調試waitpid函數的(固定RIP和的0xCC字節後),預計SIGTRAP,但得到SIGCHLD代替
我該怎麼處理這個SIGCHILD?忽略它會使調試器永遠停留在等待中。用初始PTRACE_SINGLESTEP的PTRACE_CONT螺絲將其重新注入大衆。
它似乎只發生在主線程(PID == TID)上,而不是用於childthreads(又名LWP)。
我在虛擬盒子裏使用UBUNTU 12.04 64bit。