小编典典

调试器如何工作?

all

我一直想知道调试器是如何工作的?特别是可以“附加”到已经运行的可执行文件的那个。我知道编译器将代码翻译成机器语言,但是调试器如何“知道”它所附加的内容?


阅读 117

收藏
2022-07-06

共1个答案

小编典典

调试器如何工作的细节取决于您正在调试的内容以及操作系统是什么。对于 Windows 上的本机调试,您可以在 MSDN 上找到一些详细信息:Win32 调试
API

用户通过名称或进程 ID 告诉调试器要附加到哪个进程。如果是名称,则调试器将查找进程 ID,并通过系统调用启动调试会话;在 Windows
下,这将是DebugActiveProcess

连接后,调试器将像任何 UI 一样进入事件循环,但不是来自窗口系统的事件,而是操作系统将根据正在调试的进程中发生的情况生成事件 -
例如发生异常。请参阅WaitForDebugEvent

调试器能够读取和写入目标进程的虚拟内存,甚至可以通过操作系统提供的 API
调整其寄存器值。请参阅Windows的调试功能列表。

调试器能够使用符号文件中的信息将地址转换为源代码中的变量名称和位置。符号文件信息是一组单独的 API,并不是操作系统的核心部分。在 Windows
上,这是通过Debug Interface Access SDK实现的。

如果您正在调试托管环境(.NET、Java 等),该过程通常看起来相似,但细节不同,因为虚拟机环境提供调试 API 而不是底层操作系统。

2022-07-06