PA1.3 代码+笔记

这篇博客详细介绍了PA1中的监视点和断点的实现,包括监视点的结构体管理、断点的正则表达式判断以及它们在NEMU模拟器中的作用。博主强调理解原理的重要性,提供了相关代码和截图辅助理解,并解答了关于断点机制、调试器与模拟器的区别等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果有什么地方有误 请多多指教;

写这个不是让同学们直接抄的,请弄懂原理哦,我觉得我解释的蛮清楚了。

遇到了问题也可以评论留言或者私信我;

 

pa1代码➕思路,pa2代码+思路,pa3仙剑奇侠传仅代码。见评论区。

                          

1 PA1 – 开天辟地的篇章:最简单的计算机

1.3 监视点

1)监视点的结构体

typedef struct watchpoint {  
  int NO;  //编号
  struct watchpoint *next;  
  int value;  //旧值,
  int newvalue;  //新值,
  char type;  //类型监视点w or断点b
  char Enb;  //是否开启
  char str[32];  //被监视的表达式
  /* TODO: Add more members if necessary */  
  
  
} WP; 

 

  1. 实现监视点的池的管理。

new_wp是从free链表中取一个结点给head链表,且将表达式、值赋给它,修改开关,并输出该节点的编号。运用正则表达式判断是否为断点,若是则type为b,否则为w,具体见下文断点处。

 

free_wp函数是遍历head链表直到找出对应NO的结点,从head中删除,添加到free链表中。同时修改类型、表达式、值、开关。

 

3)温故而知新

框架代码中定义wp_pool等变量时使用了关键字static,在此处的含义是静态全局变量,该变量只能被本文件中的函数调用,并且是全局变量,而不能被同一程序其他文件中的函数调用。在此处使用static是为了避免它被误修改。

  1. 实现以下功能:
  1. 如讲义中所言,每当cpu_exec()执行完一条指令,调用函数judge_wp对所有表达式求值判断是否变化,若变化则返回-1,暂停,输出提示并返回。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值