zoukankan      html  css  js  c++  java
  • mem之读操作调式总结(跟入栈出栈有关)

    现象:

    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到系统就会隐藏的很深,不易定位。

  • 相关阅读:
    Java并发编程(1)-Java内存模型
    Java源码解读(一) 8种基本类型对应的封装类型
    怎样修改织梦网站的favicon图标
    友情链接:图片链接或文字链接
    FCKeditor 添加行距、字体功能 (转载)
    如何解决织梦DedeCMS后台模块管理列表不显示
    制作兼容各种版本浏览器的新闻图片焦点切换效果
    织梦添加站内搜索
    织梦友情链接正确的调用方法和技巧
    织梦后台添加友情链接的方法(flink标签)
  • 原文地址:https://www.cnblogs.com/chip/p/4187398.html
Copyright © 2011-2022 走看看