EIM代理消息定义-CSDNCode.doc
BlueantStudio QQ群:325880743,微信公众号:blueantstudio
Script.NET V4
[Script.NET 调试器设计说明] Script.NET架构设计文档
目录
1. 调试器 3
1.1. 脚本调试的流程和思路 3
1.2. 调试事件说明 3
Script.NET 调试器设计说明
调试器
脚本调试的流程和思路
脚本调试的一般思路是对被调试脚本打桩,也就是在被调试脚本的每一个有效行前面增加一个断点桩,对于目前Tcl脚本的调试,是将被调试脚本加载到内存中逐句的分析,在每个有效代码行前面插入了一个扩展命令,命令格式是 :
td?lineno;
其中td是自己扩展的调试扩展命令,lineno是实际的代码行号。
分析完之后,在内存中运行修改过的脚本,这样脚本执行到每一行的时候都会先执行td扩展命令,并将这一行的行号传递给这个命令。
在td扩展命令中,会判断当前的调试状态,如果是单步,则每次都暂停下来等候用户的操作,如果是断点方式,则判断当前行是否在断点列表中,如果不在就直接退出td命令,如果在就暂停下来。 对于单步又分为单步向下,单步进入子函数,单步退出子函数三种类型,对于进入和退出子函数是通过对当前堆栈深度的判断来判断的,例如当前深度为2,如果下一次深度为3,说明进入了一个子函数,如果当前操作是单步进入子函数,则就需要停下来,否则就不停下来。
对于Python的调试,思路虽然类似,但因为Python自己已经提供了一个调试扩展包,叫pdb,因此只要按照pdb的要求,从pdb派生一个python调试类,通过派生的调试类来执行脚本就可以实现调试,同时断点是依靠在派生类的一些函数中调用解释器中的扩展命令来实现的,总体来说python的调试实现会简单一些,而且因为是语言内建的,不需要自己解析脚本文件,因此通用性更好一些。Ruby可能也有类似的实现方法。
解释器组件中的SetDebugEvent函数是一个对调试来说比较关键的函数,这个函数的触发是编辑器中点击单步、单步进入等操作按钮的时候触发的,对每一种操作都有标准的命令码定义,只要在这个函数中做相应的调试操作处理就可以。
InitialDebugMode函数用于初始化调试模式。主要是初始化调试窗口等操作。
RefreshDebugWindow函数用于刷新调试窗口,支持的4个标准调试窗口是变量、对象、过程、堆栈窗口。
调试事件说明
调试器事件说明,定义在IInterp.h中。分为调试器事件和平台事件,平台事件是由平台某个功能菜单触发的,发送给调试器,调试器根据事件类型进行相应处理。调试器事件是调试器执行的时候发送给外部其他模块的事件,例如设置当前行是发送给编辑器模块的回调事件。
脚本调试的时候是由编辑器启动一个独立的调试线程来调用解释器的RunScriptFile函数的,而界面上的操作(例如调试过程中进行的单步操作或显示变量窗口操作)是在平台界面线程中的。大部分脚本语言对于线程之间的操作不会有什么问题,但有些脚本就有问题,例如ruby脚本要求当前调用ruby API的线程是ruby脚本运行时候的原始线程,如果不是就可能异常,因此ruby脚本调试时候如果直接点击界面操作的刷新变量窗口,就会导致异常,解决方法就是调试过程中所有需要操作ruby API的操作都通过调试事件,激活调试过程中的DebugBreak函数中的调试等待事件,对操作逐个进行判断,然后在调试线程中执行相应的操作。为此,平台调试命令事件增加了一些新的事件。
// 调试事件类型
enum{
// 以下为调试器回调事件
IDB_USER_CALL, // 调用函数
IDB_USER_LINE, // 执行一行
IDB_USER_RETURN, // 函数返回
IDB_USER_EXCEPTION, // 发生异常
IDB_USER_SETCURRENTLINE,// 设置当前行
// 以下为平台调试命令事件
IDB_STOP = 10, // 终止
IDB_NEXT, // 执行到下一个断点
IDB_GOTO, // 执行到某个行断点或命名断点
IDB_STEPINTO, // 单步进入函数
IDB_SETPOUT, // 从函数返回
IDB_STEP, // 单步不进入函数
IDB_END, // 通知解释器文件调试结束,可以执行善后处理
IDB_SETFILE = 20, // 设置被调试的文件
IDB_REFRESH_DEBUGWINDOW = 30, // 刷新调试窗口
};
Script.NET 调试器设计说明
您可能关注的文档
- 95年专技高考电机工程技师电子学(包括电力电子学).doc
- 960713提昇病人辨识.ppt
- 970515(桃园县平镇市民大学)-陈泓睿副理.ppt.ppt
- 97长庚技术学院.doc
- 98-99年度管考表格填写注意事项.doc.doc
- A09032税收票证销毁申请审批单.doc.doc
- AAccess教程第五章窗体.doc
- AC-PT与华三无线控制器(V7)对接文档一.前言项目背景华三无线.doc
- Access数据库在authorware中的应用.doc
- ACM使用指南.ppt.ppt
- 2025年北京戏曲艺术职业学院辅导员招聘考试真题汇编附答案.docx
- 2025年十堰市市直机关公开遴选公务员106人备考题库附答案.docx
- 2025年南充科技职业学院辅导员考试参考题库附答案.docx
- 2025年南京理工大学泰州科技学院辅导员考试参考题库最新.docx
- 2025年北京宣武红旗业余大学辅导员考试笔试真题汇编附答案.docx
- 2025年北京第二外国语学院辅导员考试笔试题库最新.docx
- 2026年存储芯片行业市场竞争格局与发展趋势报告.docx
- 2026秋招:电商运营试题及答案.doc
- 公司烧结原料工安全操作规程.docx
- 2025年内蒙古开放大学辅导员招聘考试真题汇编附答案.docx
最近下载
- 九年义务教育控辍保学工作方案.doc VIP
- 2025年安徽中考语文试卷及答案出炉 .pdf VIP
- KA 25-2025 煤矿井下机电设备完好性要求.docx VIP
- 劳动合同中止期间的工资支付与社保缴纳义务.docx VIP
- T BALI 003—2023 节律照明灯具性能要求.pdf VIP
- 2012年江苏高考数学试卷真题及答案.doc VIP
- 高中地理野外实践活动与乡土文化传承的结合研究教学研究课题报告.docx
- 2025光伏电站光伏组件并网验收测试标准光伏组件安装质量检查标准.docx VIP
- 上汽通用五菱宝骏610_汽车使用手册用户操作图解驾驶车主车辆说明书pdf电子版下载.pdf VIP
- 运筹学题库及答案.doc VIP
原创力文档

文档评论(0)