ptrace - ptrace(PTRACE_SINGLESTEP) + waitpid = SIGCHLD

  显示原文与译文双语对照的内容

我是ptracing的多线程应用程序和 9超出 10次,breakpointhandling工作正常,但有时我得到一个of事件。

这是顺序:

  • 应用程序正在运行,主线程点击 INT3
  • 调试器的waitpid返回 SIGTRAP
  • debugger SIGSTOPs所有还没有" t ( 跟踪停止)的线程,使用 tgkill
  • 调试器在 int3 ed线程上运行 ptrace(PTRACE_SINGLESTEP) ( 修复RIP和 0xCC 字节后)
  • 调试器和waitpid期望 SIGTRAP,但得到了 SIGCHLD

我该用这个SIGCHILD做什么? 忽略它使得调试器在以下waitpids中永远保持。 用PTRACE_CONT螺钉将它的注入 debugee,初始PTRACE_SINGLESTEP为。

它似乎只发生在主线程( PID==TID ),而不是 childthreads ( aka LWP ) 。

我正在使用虚拟框中的12.04 64bit 。

时间: 作者:

在debugee中使用 PTRACE_SINGLESTEP ( 数据参数) 注入SIGCHLD似乎很有用。

作者:
...