为什么附加在Linux中停止进程/线程?

时间:2015-05-25 10:45:58

标签: linux gdb ptrace

我理解单步执行和int 3字节如何用于调试程序。在第一种情况下,跟踪器使用PTRACE_SINGLESTEP能够一次调试一个指令的程序。在x86上,这意味着在调试时将设置陷阱标志。在第二种情况下,0xcc个字节被插入到tracee的地址空间中,每当SIGTRAP出现时,控制权就会传递回跟踪器(调试器)。

现在,当我使用gdb调试器附加到程序时,tracee暂停。内部会发生什么?是否插入了0xcc个字节? ptrace库如何暂停tracee的执行?

1 个答案:

答案 0 :(得分:3)

ptrace是一个系统调用,由内核实现。内核决定进程是否可以执行。当它以普通的方式通过ptrace连接时,它会暂停执行 - 大概是通过设置一个标志而不是安排它,但我从来没有看过那么深。

请注意,较新版本的Linux内核包含PTRACE_SEIZE请求,可用于在不停止进程的情况下附加到进程。 ptrace手册页对此进行了解释。