Visual Studio附加到Process的工作原理是什么?

ATL*_*DEV 9 compiler-construction debugging remote-debugging

我一直想知道Visual Studio的调试器和调试器的内部工作原理.它如何与代码进行通信和控制,尤其是当它在主机进程或外部网络服务器(附加到进程)中运行时?编译器或链接器是否使用回调修补代码,以便调试器得到控制?如果它确实以这种方式工作,那么解释语言(如不包含调试代码的JavaScript)如何工作?

Adr*_*thy 6

通常,Windows提供了一个用于编写调试器的API该API可让您检查和修改另一个进程中的内存,并在另一个进程中发生异常时获取通知。

调试过程位于一个循环中,等待被检查过程的事件通知。要设置断点,调试器进程会修改被调试者中的代码以引起异常(通常int 3是x86 的指令)。

编译器和链接器共同工作,以一种调试器可以读取的格式提供有关程序的符号信息。在Windows上,通常是单独的PDB文件中的CodeView。

在Unix派生的世界中,有一个名为ptrace的API,其功能与Windows调试API基本相同。

对于远程调试,在远程计算机上放置了一个小程序,该程序与在本地计算机上运行的实际调试器进行通信并代表该调试器运行。

对于JavaScript之类的解释语言,调试器与解释器一起使用,以提供相同种类的功能(检查内存,设置断点等)。