现象:

1.当case比较复杂的时候(含有for循环对mem进行读/写)

发现for循环时总是有汇编指令不执行跳过去了,(其实是汇编不熟和指令太多无法理智分析指令了)。

事实是指令是对的,但执行错了(所以debug时一定要保证不改变问题本质的情况下尽量简化case,编译出最简单的指令序列,方便分析指令序列背后的原理,否则就无法定位编译是否有错误)。

2.当case比较简单的时候(仅仅对若干个mem地址写操作)

发现地址跟数据对不上,系统并未按指定地址写入指定值。但地址、数据都不少。直觉告诉我,stack的push /pop 乱了,并未遵循先进先出的规则。

栈也是对memory读写操作,只不过一系列的读写操作有特别的意义(在一块固定的memory空间上)。

 之后重点关注了栈中读写单元的操作,通过观察systembus上数据操作。发现systembus上的数据也不对,卧槽。

此时怀疑1.编译本身就错了。(不过太可能,如果流程错了但以前是对了。而且可以通过分析指令序列看看,分析简单的指令序列也是有必要的,有时候。)

2.memory 接口做错了。发现接口错了。

重要的提示:

1.push/pop也是对memory空间读写操作。

2.一定要知道那种现象是对的,否则错了也不知道。

3.多查看接口,不要过于深入模块内部追信号。

4.对系统抽象数据流要非常熟悉。

  5.尽量简化系统简化代码,方便分析定位问题。

6.通过制造错误,分析现象验证猜测。

  7.尽量隔离问题,不要让模块的问题扩散到系统级,否则很小的bug到系统就会隐藏的很深,不易定位。

最新文章

  1. Nancy之静态文件处理
  2. 【BZOJ】3427: Poi2013 Bytecomputer
  3. ASP.NET生成WORD文档,服务器部署注意事项
  4. hdu 5442 (ACM-ICPC2015长春网络赛F题)
  5. 我对java反射机制的理解
  6. C语言中数组的几种输入
  7. Android监听点击事件实现的三种方法
  8. 标准SAP中的物料类型
  9. 谷歌postman插件用不了的命令行指令
  10. Unity MegaFiers 顶点动画
  11. JavaScript技巧&写法
  12. C++中模板Template的使用
  13. Description has only two Sentences(欧拉定理 +快速幂+分解质因数)
  14. 宝塔linux面板.txt
  15. 5 分钟让你秒懂 Docker !
  16. 在同一个Apache服务器软件上部署多个站点的基础方法
  17. SharePoint CU、Hotfix和SP版本的区别
  18. CentOS 7 Shell脚本编程第九讲 read命令简单介绍
  19. EF6学习笔记(六续) 复杂数据模型建表测试
  20. java内存结构学习的一种打开方式

热门文章

  1. 集合框架Collection<E>接口
  2. [題解](單調隊列/水)luogu_P3088擠奶牛
  3. VUE循环菜单
  4. js_jquery
  5. 如何使用fastJson来解析JSON格式数据和生成JSON格式数据
  6. C. Functions again DP + 分类讨论
  7. disasters
  8. [转]POI : How to Create and Use User Defined Functions
  9. 初始Mybatis,好累,自己感觉自己快坚持不了了
  10. bootstrap警告框、进度条和列表组