Eclipse如何开发一个新语言的调试器

如题所述

啥叫新语言,调试器本身需要那种语言本身支持,因为调试时需要从调试器的客户端 (比如某个 IDE)向调试器发送指令请求它停在哪一行,并返回当前各变量的值。而这个不光是 eclipse 调试器这个客户端的事情,比如 Java 调试就需要 JVM 本身支持调试,JVM 调试器会打开一个 TCP 端口然后等客户端 (比如 Eclipse连接上来)或者 Eclipse 告诉 JVM 在启动初始化完成之后连接到 Eclipse 事先打开的 TCP 端口上来。


因些这其中其实主要有2件事:

    这个语言的执行环境(像 JVM)必须支持调试。

    并且用 TCP 这些方式与客户端 (比如 eclipse)通信,并相互之间交换指令和数据。至于相互通信的协议可以自行约定。



因此这其中主要的事情还是第一个,那就是这种新语言是如何支持调试并设计一种调试指令及通信协议。而写一个 Eclipse 调试器客户端本身是相对容易的事情,无非就是与调试器通信并按指令把数据显示在 eclipse 的调试视图中给人看,并在下断点时向调试器发送指令说明要停在哪一行或请求解析当前哪些变量的值。


拿 Java 调试来说,调试器由 JVM 自己提供,Eclipse 作为调试器的客户端与JVM 之间交换指令,比如,当我们下一个断点时 Eclipse 接收到请求向 JVM 发送指令请求停在某个类的某一行,JVM 在执行到这一行时会通知 调试器 已经停了,这时调试器会反馈给 Eclipse 说已经停了,这时 eclipse 一般会再次发送指令来请求 JVM 调试器解析一下 eclipse 的 variables 或 Expression / watch 这些视图中的那些变量的值,JVM 调试器解析了这些变量值之后会反馈给 eclipse,eclipse 就直接把结果显示出来就完成了,从这里来看 Eclipse 的调试插件就像一个普通的TCP 程序,只负责收集用户下的断点信息和 watch 变量和表达式信息并与 JVM 调试器互相通信,没有多少复杂的事情。

温馨提示:答案为网友推荐,仅供参考