📄 debugcmd.h
字号:
// DebugCmd.h: interface for the CDebugCmd class.
///////////////////////////////////////////////////////////////////////
//文件功能:实现调试器的功能,主要是将原先虚拟机中实现的调试器的功能
// 分离到这个类中以便于维护
//开发人员:杨军
//开发日期:2004-4-24
//修改人员:
//修改日期:
///////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_DEBUGCMD_H__A50EE760_E74C_47AC_B691_E9BCB5178AC4__INCLUDED_)
#define AFX_DEBUGCMD_H__A50EE760_E74C_47AC_B691_E9BCB5178AC4__INCLUDED_
#define EOI 0x00 //标识A命令中输入的汇编指令已经读到末尾
#include "PreInclude.h"
#include "CometVM.h"
class CDebugCmd
{
public:
//--------------对应的中间代码结构,用于生成目标代码---------------------
typedef struct tagAssembleCode {
InstructionType instType; //指令类型
int iGRNumber; //通用寄存器的编号
int iXRNumber; //变址寄存器的编号
S2 s2ALabelAddress; //IN, OUT指令中的ALabel的偏移量
S2 s2NLabelAddress; //IN, OUT指令中的NLabel的偏移量
S2 s2Address; //有效地址的偏移量
bool bGRUse; //标识是否使用了通用寄存器
bool bXRUse; //标识是否使用了变址寄存器
bool bAddressUse; //标识是否使用了地址偏移量
bool bALabelAddress; //标识是否使用了ALabel的偏移量
bool bNLabelAddress; //标识是否使用了NLabel的偏移量
} AssembleCode;
public:
CDebugCmd(CCometVM * argVM = NULL);
virtual ~CDebugCmd()
{
}
//-------------设置当前活动的虚拟机----------------------------------
void SetActiveVM(CCometVM * argVM);
//---------------------调试器的功能实现begins------------------------
//---------------------帮助功能的执行函数----------------------------
int DbgCmd_Help();
//---------------------Assemple功能的执行函数------------------------
int DbgCmd_Assemple(U2 argAddress);
//---------------------Dump 功能的执行函数------------------------
int DbgCmd_Dump(U2 argStartAddress, U2 argEndAddress);
//---------------------Go 功能的执行函数------------------------
int DbgCmd_Go(U2 argStartAddress, U2 argEndAddress);
//---------------------Proceed 功能的执行函数------------------------
int DbgCmd_Proceed(U2 argStartAddress, U2 argInstNumber);
//---------------------Trace 功能的执行函数------------------------
int DbgCmd_Trace(U2 argStartAddress, U2 argInstNumber);
//---------------------Unassemble 功能的执行函数------------------------
int DbgCmd_Unassemble(U2 argStartAddress, U2 argEndAddress);
//---------------------产生一条源程序指令的中间代码,为生成目标代码
// 进行准备----------------------------------
int PrepareSingleCaslStmt();
//---------------------检测用户输入的一条Casl源程序------------------
// 是否符合Casl语言的文法标准--------------------
int CheckSingleCaslStmt();
//---------------------处理以字符A作为起始字符的指令----------------
int Instruction_HeadedByA();
//---------------------处理以字符C作为起始字符的指令----------------
int Instruction_HeadedByC();
//---------------------处理以字符E作为起始字符的指令----------------
int Instruction_HeadedByE();
//---------------------处理以字符I作为起始字符的指令----------------
int Instruction_HeadedByI();
//---------------------处理以字符J作为起始字符的指令----------------
int Instruction_HeadedByJ();
//---------------------处理以字符L作为起始字符的指令----------------
int Instruction_HeadedByL();
//---------------------处理以字符O作为起始字符的指令----------------
int Instruction_HeadedByO();
//---------------------处理以字符P作为起始字符的指令----------------
int Instruction_HeadedByP();
//---------------------处理以字符R作为起始字符的指令----------------
int Instruction_HeadedByR();
//---------------------处理以字符S作为起始字符的指令----------------
int Instruction_HeadedByS();
//-----用于A命令中获得用户输入的指令串的下一个字符,并改变索引指针-------
char GetNextChar();
//-----略过A命令中所获得用户输入的指令串中的多余的空格(包括制表符\t)------------------
void PassBySpace();
//-----处理A命令中所获得用户输入的指令串中的操作数中的GR与EA部分--------
int HandleGRAndEA();
//-----处理A命令中所获得用户输入的指令串中的操作数中的GR部分--------
int HandleGR();
//-----处理A命令中所获得用户输入的指令串中的操作数中的EA部分--------
int HandleEA();
//-----处理A命令中所获得用户输入的指令串中的操作数中的地址偏移部分---
int HandleAddress(S2& argDataOut);
//-----处理A命令中输入IN, OUT指令的操作数部分-----------------------
int HandleALabelAndNLabel();
//----显示当前运行上下文信息,包括寄存器,堆栈等信息-------------------
int ShowRunContext();
//----显示下一条将要执行的指令,即PC指向的指令------------------------
int ShowNextInstruction();
//----将指定的一条目标指令反汇编成Casl源程序指令---------------------------
int UnassembleSingleInstruction(const ObjectCode& argObjCode, string& argDataOut);
//---------------------调试器的功能实现ends ------------------------
private:
//---------------当前活动的虚拟机的指针------------------------------
CCometVM * m_pVM;
//-----------------------用于作为分界符的空格字符串---------------------
char m_szSpace[10];
//-----------------------存放用户在调试器的A命令中输入的汇编指令--------
const char * m_cszInstruction;
//-----------------------处理A命令中的输入汇编指令时的长度--------------
int m_iLen;
//-----------------------处理A命令中的汇编指令时标识当前处理的字符指针--
int m_iPos;
//-----------------------A命令中为了生成目标代码而使用的中间代码结构----
AssembleCode m_asmCode;
};
#endif // !defined(AFX_DEBUGCMD_H__A50EE760_E74C_47AC_B691_E9BCB5178AC4__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -