【问题标题】:Why does attaching stop a process/thread in Linux?为什么附加会停止 Linux 中的进程/线程?
【发布时间】:2015-08-06 19:53:33
【问题描述】:

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

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

【问题讨论】:

    标签: linux gdb ptrace


    【解决方案1】:

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

    请注意,较新版本的 Linux 内核包含一个 PTRACE_SEIZE 请求,可用于附加到进程而不停止它。 ptrace 手册页对此做了一些解释。

    【讨论】:

      猜你喜欢
      • 2018-08-27
      • 1970-01-01
      • 2020-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多