delve是专门用来调试Go应用的利器。它和GDB类似,支持打断点,单步调试,Examin内存等功能。delve跟踪调试应用程序的原理和GDB实现原理类似,都是使用ptrace这个系统调用。
delve启动调试时候,会调用ptrace系统调用,将待调试跟踪的Go应用程序的pid传递给ptrace后,delve会成该Go应用执行的tracer
(跟踪者),该Go应用称为tracee
(被跟踪者),其会被标记为traced
(跟踪)状态。此后delve可以查看tracee
的内存和寄存器。
在tracee
在执行系统调用之前,系统内核会先检查tracee
是否处于被traced
的状态。如果是的话,内核暂停当前tracee
执行并将控制权交给tracer
,使tracer
得以查看或者修改tracee
的寄存器或内存信息。