Visual Studio Attach to Process 如何工作?

How does the Visual Studio Attach to Process work?

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

Windows 包括对调试器的支持。一个进程必须启用调试器权限,一旦完成,该进程就可以附加到任何其他进程并使用 windows 调试器功能

对其进行调试

http://msdn.microsoft.com/en-us/library/windows/desktop/ms679303(v=vs.85).aspx

对于 javascript 之类的东西,您似乎需要 javascript 调试器的等价物。

在 Visual Studio 多进程项目的情况下,您通常必须切换调试器附加到哪个进程才能调试该进程。我不知道是否有办法同时为多个进程设置挂起的断点。可能还有其他调试器可以更好地处理多个进程,但我没有使用过这样的工具。

一般来说,Windows 提供 an API 编写调试器,让您检查和修改另一个进程中的内存,并在另一个进程中发生异常时获得通知。

调试进程处于循环状态,等待来自被检查进程的事件通知。要设置断点,调试器进程会修改被调试程序中的代码以引发异常(通常是 x86 的 int 3 指令)。

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

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

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

对于解释型语言,如 JavaScript,调试器与解释器一起工作以提供相同类型的功能(检查内存、设置断点等)。