如果我理解正确的话,Linux gdb 断点现在的工作原理是用"int 3"覆盖操作码并在命中操作码时进行跟踪。Ptrace并不是永远存在的。在将 ptrace 引入内核之前,断点是如何工作的?
我不得不不同意你的假设:ptrace
几乎永远存在:
ptrace在第七版Unix[1979]中首次实现,并且存在 在 Unix 的 SVr4 [1989] 和 4.3BSD [1986] 分支中。
(来源:维基百科,"ptrace",我添加了年份(
gdb
的首次发布是在1986年。
就 Linux 而言,自 Linux 1.0 以来,ptrace
一直是系统调用 - 您可以在 man 2 syscalls
中找到初始版本。
(我知道这并不能回答"如何在没有 ptrace 的情况下进行调试"的问题,一旦出现更具技术性的答案,我很乐意删除它,但在此之前,我认为这提供了一些相关的历史视角。