Closed czlx-github closed 10 months ago
复现:在NEMU开启device时,在am-tests目录下运行video测试,然后点击关闭按钮。NEMU会回到等待输入的状态,再次运行c命令后程序会继续运行。
c
解释: 当NEMU状态为NEMU_QUIT(在device_update()里检测到关闭窗口时会设置为这个状态),但cpu_exec()里刚开始的状态判断没有考虑这个情况:
NEMU_QUIT
device_update()
cpu_exec()
switch (nemu_state.state) { case NEMU_END: case NEMU_ABORT: printf("Program execution has ended. To restart the program, exit NEMU and run again.\n"); return; default: nemu_state.state = NEMU_RUNNING; }
执行指令返回后的状态判断中,case NEMU_QUIT: statistic();没有退出程序,故再次运行c命令会导致上面的状态判断里设置NEMU的状态为NEMU_RUNNING,从而继续执行指令。
case NEMU_QUIT: statistic();
NEMU_RUNNING
你应该是在非批处理模式下引发这个问题的?
是的
你可以提一个PR, 以记录你的贡献.
抱歉,个人觉得PA作为教学系统,由我修改不太合适。还是麻烦老师修复了。
没关系的, 之前已经有很多热心的爱好者提了很多PR, 你可以看看已合并PR的列表.
好的,之后我提个PR修复这个问题,谢谢老师。
复现:在NEMU开启device时,在am-tests目录下运行video测试,然后点击关闭按钮。NEMU会回到等待输入的状态,再次运行
c
命令后程序会继续运行。解释: 当NEMU状态为
NEMU_QUIT
(在device_update()
里检测到关闭窗口时会设置为这个状态),但cpu_exec()
里刚开始的状态判断没有考虑这个情况:执行指令返回后的状态判断中,
case NEMU_QUIT: statistic();
没有退出程序,故再次运行c
命令会导致上面的状态判断里设置NEMU的状态为NEMU_RUNNING
,从而继续执行指令。