vb是怎样解释执行和单步调试的

学vb几年了,虽说掌握的还不错,但是对vb6的内部机制还是不太了解
我现在想用vb写一个解释执行的软件,就是在这个软件上可以写代码(暂用"DIY语言"称之),然后调用我自己写的解释器把他们翻译成vb源代码,然后再调用vb的解释器执行这些翻译后的代码
我用 "vba6.dll " 中的 EbExecuteLine 函数做的,但是无法进行调试
其实我是想把这个软件做的和vb的单步执行调试时的那样,随时可以监视各个变量的值
重点是要说明一下vb单步调试时时怎样的内部机制,我怎么能使用它?
高分只是为了吸引高手的到来,分不重要,望高手们不吝赐教
一楼的朋友,汇编我也是会的,至少我用汇编做单片机还是马马虎虎能做出来的,我只是想了解vb的内部机制,并不是要用汇编造什么语言。
我用vb也是写了好几万行代码的,但还属于编码工人级别,vb虽然简单,但是有时候还是有点繁琐,所以我就把很多东西封装成了函数或自定义控件等,我要造这么个解释器的目的就是能简化编程,借vb的东风快速开发数据库应用软件。解释器我已经写好了,执行的时候用的是"vba6.dll "中的 EbExecuteLine 函数做的,但却没有调试功能。

VB内部是两种机制,对于调试的程序和编译成P代码的程序,其实是对代码进行解释执行。可以理解为运行在一个虚拟机上,解释代码并动态构造各种变量。由于变量是虚拟机自己维护的,因此虚拟机会有一种方法来根据变量名索引到对应的变量值上(比如建一个大的hash表)。要实现监视变量的话显然很方便只要查表就可以了。
而对于编译成本地代码的程序,其内部已经被编译成了二进制可执行代码,因此会失去大部分调试的信息,此时需要用专业的调试器才可以进行追踪调试。

VB6的IDE内部进行调试的时候是使用第一种机制进行的,这也就是为什么在VB6的IDE内部运行程序要比编译成本地代码再运行慢得多。

基本上大部分解释性语言比如PHP、Lua等等都是这样的结构,你去看看他们的解释器的结构有助于你理解VB6的机理。但是了解了内部结构不见得就一定能那么简单的用,VB6不一定把这些内部的东西公开到外部接口中,你得查查相关资料。要不就得自己从头写虚拟机了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-07-01
1.
解释执行,不建议用EbExecuteLine。第一是效率问题,第二是兼容性问题,第三是拓展性问题。

2.
你可以尝试自己进行解析。
你学vb几年了,遇到的问题应该都能想办法解决。

既然你会汇编,你应该知道程序中的变量是怎么回事吧。自行解释执行时候,调试更加容易了。因为你知道你运行到了哪儿,你变量放在何处。

提示:
你需要 表达式解析(仍然不建议用scriptcontrol或者executeline)、一个Stack(CallStack & ParamsStack)(最好针对这个优化一下 否则比较慢)、局部变量 常量()、全局变量 常量()、正则匹配库 等等。

自己解释才是王道。

你可以从简单开始完善你的代码解释工具。
第2个回答  2010-06-24
干想的话是没可能相通的,要想知道这个,应该学学编译原理吧。
我觉得以你的编程经验来说,编译原理应该不是困难的东西了。

《WINDOWS核心编程》 里讲过调试器的问题,但是只能用C语言实现。
有专门的函数创建调试器的。
第3个回答  2010-06-25
好难啊
第4个回答  2010-06-23
这个好像得用汇编吧 建议学学汇编语言
相似回答