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

  • 相关阅读:
    SD卡测试
    测试人员可能会遇到的问题
    HDU 1024 Max Sum Plus Plus
    HDU 1176 免费馅饼
    HDU 1257 最少拦截系统
    HDU 1087 Super Jumping! Jumping! Jumping!
    poj 1328 Radar Installation
    poj 1753 Flip Game
    HDU 1003 Max Sum
    HDU 5592 ZYB's Premutation(BestCoder Round #65 C)
  • 原文地址:https://www.cnblogs.com/chip/p/4187398.html
Copyright © 2011-2022 走看看