VB内部是两种机制,对于调试的程序和编译成P代码的程序,其实是对代码进行解释执行。可以理解为运行在一个虚拟机上,解释代码并动态构造各种变量。由于变量是虚拟机自己维护的,因此虚拟机会有一种方法来根据变量名索引到对应的变量值上(比如建一个大的hash表)。要实现监视变量的话显然很方便只要查表就可以了。
而对于编译成本地代码的程序,其内部已经被编译成了二进制可执行代码,因此会失去大部分调试的信息,此时需要用专业的调试器才可以进行追踪调试。
VB6的IDE内部进行调试的时候是使用第一种机制进行的,这也就是为什么在VB6的IDE内部运行程序要比编译成本地代码再运行慢得多。
基本上大部分解释性语言比如PHP、Lua等等都是这样的结构,你去看看他们的解释器的结构有助于你理解VB6的机理。但是了解了内部结构不见得就一定能那么简单的用,VB6不一定把这些内部的东西公开到外部接口中,你得查查相关资料。要不就得自己从头写虚拟机了。
1.
解释执行,不建议用EbExecuteLine。第一是效率问题,第二是兼容性问题,第三是拓展性问题。
2.
你可以尝试自己进行解析。
你学vb几年了,遇到的问题应该都能想办法解决。
既然你会汇编,你应该知道程序中的变量是怎么回事吧。自行解释执行时候,调试更加容易了。因为你知道你运行到了哪儿,你变量放在何处。
提示:
你需要
表达式解析(仍然不建议用scriptcontrol或者executeline)、一个Stack(CallStack
&
ParamsStack)(最好针对这个优化一下
否则比较慢)、局部变量
常量()、全局变量
常量()、正则匹配库
等等。
自己解释才是王道。
你可以从简单开始完善你的代码解释工具。
干想的话是没可能相通的,要想知道这个,应该学学编译原理吧。
我觉得以你的编程经验来说,编译原理应该不是困难的东西了。
《WINDOWS核心编程》
里讲过调试器的问题,但是只能用C语言实现。
有专门的函数创建调试器的。