本工程很简单,就是在启动完成后,从第一个硬盘的第二个分区开始,加载8个分区到内存0x10000处。
本工程总是运行出错,C代码进不去,出现和proj1那样16进制代码重复运行的问题。第一反应就是跳转到32位时出错了,看了很多遍代码,没有问题,仔细对比了proj1和proj2的代码,尤其是启动部分代码,也没有问题。proj2和proj1唯一变化的就是在后面加了读硬盘的代码,会不会这些代码有错误?但是这些代码前面加了打印,为什么也没有打印出来?难道这些代码出错,导致前面执行打印的代码执行完了,还没来得及出效果就重启了?(后来事实证明串口打印没有出现这种情况,只要往串口输出,就会打印)。
把新代码注释掉,仍然有问题。甚至把整个C代码全部注释掉,还是有问题。这时开始烦躁了,代码一模一样,为什么会有问题呢?这时应该有发散型思维,不要总是扣着代码这一块儿来考虑,应该想想最后执行的是二进制代码,要端到端考虑一下二进制代码的生成、执行过程哪个地方是薄弱环节,从最可能有问题的方面入手进行考察。
代码生成过程如下:
1. 写源代码
2. 编译
3. 签名(55aa)
4. 放到img
代码执行过程:
5. 通过qemu执行img
其中写源代码部分检查和proj1一样,此时不要烦躁,要看看其他部分。此时第一直觉是怀疑第5步,但第5步是无法验证的,因为对qemu实际上不了解,此时认为其他地方不可能有问题,又怀疑qemu,结果开始烦躁。实际上第2、3、4步都应该检查一下。而qemu已经用了这么多年,第5步应该认为不是薄弱环节,最后再怀疑它。2、3、4是编译过程,一点都没改,在proj1没问题,在proj2应该也没问题,所以认为不会有问题。实际上源代码改了,2、3、4虽然过程没问题,但输出都可能有问题。
本次发现问题的过程还是不相信qemu,于是再次执行proj1,发现没问题。重新执行proj2,发现有问题。因为对比了两次的执行,万幸dd会打印出一些输出,发现proj1中dd的启动扇区512字节,而proj2中扇区是684字节。从而发现了问题。说明代码写的太多了,启动扇区太大了。签名把启动扇区破坏了。
后续调试建议:
1. 全面考虑影响出问题的原因
2. 分析哪些不容易出问题
3. 先考虑容易出问题的部分。
对于ucore,容易出问题的部分,按照顺序排序,分别是源代码,编译过程,最后才是执行,而执行虽然是最不可能出问题的,如果已经考虑了所有其他部分的影响,还是没有发现原因,应该就是qemu出了问题。除非自己没有考虑周全。
分享到:
相关推荐
hive 开发UDF 使用maven工程 引发jar包缺失 hive 开发UDF 使用maven工程 引发jar包缺失
Root project 'Almost-Famous' +--- Project ':famous-cloud' +--- Project ':famous-config' \--- Project ':famous-unique' +--- Project ':famous-common' +--- Project ':famous-login' +--- Project ':famous-...
Version : 5.7 Vendor : Fedora Project Release : 2.20090207.fc11 Date : 2009-02-26 09:37:30 Group : Development/Libraries Source RPM : ncurses-5.7-2.20090207.fc11.src.rpm Size : 1.71 MB Packager :...
1. **RT-Thread简介** - RT-Thread是为嵌入式设备设计的,支持多种处理器架构,如ARM Cortex-M系列,RISC-V等。 - 它提供了丰富的中间件服务,如TCP/IP网络栈、文件系统、图形用户界面(GUI)、设备驱动等,满足了...
gEDA homepage: http://www.geda-project.org -----gschem.exe 1.9.2 (g9e1f72c) -----pcb.exe Compile Time Options ----- GUI: gtk : Gtk - The Gimp Toolkit Exporters: bom : Exports a Bill of Materials ...
2006-03-11 15:26 122,880 关键路径分析.mpp 2005-10-06 00:21 339,456 固定资产信息系统项目.mpp 2005-11-17 16:56 622,592 固定资产信息系统项目.多比较基准.mpp 2005-11-17 16:56 637,440 固定资产信息系统项目....
team-project-team2:由GitHub Classroom创建的team-project-team2
【标题】"CS188 吃豆人游戏 Project 2: Multi-Agent Search" 是一个基于Python编程的项目,旨在教授学生多智能体搜索算法在游戏环境中的应用。这个项目来源于伯克利大学的计算机科学课程,课程编号CS188,即人工智能...
ZOO-Project is a WPS (Web Processing Service) open source project released under a MIT/X-11 style license . It provides an OGC WPS compliant developer-friendly framework to create and chain WPS Web ...
431-Project1:RIT CSCI 431
CS-355-Project-2 CS 355 项目 2 MVC 完成! 使用 Intellij #MYSQL STATEMENTS SET foreign_key_checks = 0; -- Project 01 高中运动队数据库 -- 作者:MACKENZIE LARSON -- 日期:4/5/15 -- 如果存在则丢弃表 ...
composer create-project drupal-composer/drupal-project:9.x-dev some-dir --no-interaction 使用composer require ...您可以将新的依赖项下载到您的安装中。 cd some-dir composer require drupal/devel ...
WebUml-ProjectManager WebUml项目管理器后端。 职责: 用于元模型和表示模型元素的CRUD 要求: GIT 1.9( ) Java 8( ) Maven 3.0.5( ) heroku-toolbelt 3.6.0( ) MongoDB的 推荐工具: jq( ) 在...
来自emule-project的原版emule,里面没有关键字过滤,可以自由的下载一切资源,不可多得啊~
:gear: 自行设定# Clone repo$ git clone https://github.com/marcorichetta/cs50-project1.git$ cd cs50-project1# Create a virtualenv (Optional but reccomended)$ python3 -m venv myvirtualenv# Activate the...
midterm-project-aagamsh1:GitHub Classroom创建的midterm-project-aagamsh1
Lesson 1 - Why should you learn how to program? Lesson 2 - Basic principles of learning a programming language UNIT 1 - VARIABLES, TYPES, EXPRESSIONS, AND STATEMENTS Lesson 3 - Introducing Python: a ...
BTS-D2D-Project-MatLab:MWSN中基于能耗的路由协议之间的比较 作者:RubénDiab 目标项目: 移动无线传感器网络(MWSN)中基于能耗的路由协议之间的比较 已实现的路由协议: 直接沟通 浸出 飞马座 梦 实施的渠道和...
- Load/Save project - Optimised shader - Fog Support - HDR Support - Visual selection node preview - Light Support - Blend Mode support - Normalmap with light Support - Preview directly the scene - ...
1.vue-projectManage:https://github.com/chenxingxing6/vue-projectManage 2.mycloud-admina:https://github.com/chenxingxing6/mycloud-admin 3.mycloud:https://github.com/chenxingxing6/mycloud 4.file-online-...