2021 NEMU PA1 RTFSC 优美地退出

优美地退出

仅提供查错思路,怎么改正还需自己理解nemu的框架,RTFSC!
在这里插入图片描述
启动nemu:make run
在这里插入图片描述
键入q后:
在这里插入图片描述
发现报错
(我之前以为是makefile的问题,查看native.mk后发现并不是)

查错

先找到main函数
在这里插入图片描述
在这里插入图片描述
查看:
在这里插入图片描述
结合之前的文档:init_monitor()函数:
在这里插入图片描述
engine_start()函数:
在这里插入图片描述
查看一下sbd_mainloop():
在这里插入图片描述
在这里插入图片描述
发现一个rl_gets()函数;
在这里插入图片描述
上网搜了一下,发现使用readline库
继续往下读发现一个结构体:cmd_table[]
在这里插入图片描述
往上翻找到:
在这里插入图片描述
这个结构体的定义值得学习一下,int (*handler) (char *) , 可以使用cmd_table[i].xxx(cmd_help,cmd_c,cmd_q)执行相应的函数,很妙

与在nemu运行时能够使用的命令契合
在这里插入图片描述
于是猜测:
通过readline()读入命令然后通过strtok()过滤空格,通过strcmp()将键入的命令与cmd_table[i].name进行对比然后执行相应函数,那么在我们键入q时就会调用cmd_q函数:
在这里插入图片描述
什么也不做只返回-1:
在这里插入图片描述
然后判断 if(cmd_q < 0){return;} , -1 < 0所以直接返回main函数了:
在这里插入图片描述
随后返回并调用 is_exit_status_bad() :(find搜索一下)
在这里插入图片描述

到这里应该了解了为什么会发生错误,main()函数返回了-1 , 自己理解并修改一下

  • 8
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值