ptrace(PTRACE_SINGLESTEP)+ waitpid = SIGCHLD

时间:2014-01-15 20:57:09

标签: ptrace waitpid

我正在使用多线程应用程序,10次中有9次,断点处理工作正常,但有时我得到SIGCHLD事件而不是SIGTRAP。

这是序列:

  • 应用程序正在运行,主线程命中INT3
  • 调试器的waitpid返回SIGTRAP
  • 调试器使用tgkill
  • 对所有尚未“t(跟踪停止)”的线程进行SIGSTOP
  • 调试器在INT3的线程上运行ptrace(PTRACE_SINGLESTEP)(修复RIP和0xCC字节后)
  • 调试器waitpid并且期望SIGTRAP,但是获得SIGCHLD

我应该怎么做这个SIGCHILD?忽略它会使调试器永远停留在以下waitpids中。使用带有PTRACE_SINGLESTEP的PTRACE_CONT螺钉将其注入debugee。

似乎它只发生在主线程(PID == TID)上,而不是发生在子线程(又称LWP)上。

我在虚拟框中使用UBUNTU 12.04 64位。

1 个答案:

答案 0 :(得分:1)

将带有PTRACE_SINGLESTEP(数据参数)的SIGCHLD注入debugee似乎是诀窍。