【发布时间】:2014-01-15 20:57:09
【问题描述】:
我正在跟踪一个多线程应用程序,并且 10 次中有 9 次断点处理工作正常,但有时我得到一个 SIGCHLD 事件而不是 SIGTRAP。
这是顺序:
- 应用程序正在运行,主线程命中 INT3
- 调试器的 waitpid 返回 SIGTRAP
- 调试器 SIGSTOP 使用 tgkill 停止所有尚未“t(跟踪停止)”的线程
- 调试器在 INT3 线程上运行 ptrace(PTRACE_SINGLESTEP)(修复 RIP 和 0xCC 字节后)
- 调试器 waitpid 并期望 SIGTRAP,但改为获取 SIGCHLD
我应该如何处理这个 SIGCHILD?忽略它会使调试器永远停留在后面的等待进程中。使用带有初始 PTRACE_SINGLESTEP 的 PTRACE_CONT 螺钉将其注入回被调试者。
似乎它只发生在主线程 (PID==TID) 上,而不发生在子线程 (aka LWP) 上。
我在虚拟盒子中使用 UBUNTU 12.04 64bit。
【问题讨论】: