现象:

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

mem之读操作调式总结(跟入栈出栈有关)的更多相关文章

  1. bzoj 4034 [HAOI2015]树上操作 入栈出栈序+线段树 / 树剖 维护到根距离和

    题目大意 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所有点的点权都 ...

  2. php栈的定义及入栈出栈的实现 算法

    转自:php栈的定义及入栈出栈的实现 栈是线性表的一种,他的特点是后入先出,可以这么理解,栈就像一个存东西的盒子,先放进去的在最底层,后放进去的在上层,因为上层的东西把底层的东西压住了,下层的想要出去 ...

  3. Python模拟入栈出栈操作

    目标: 1.编写菜单,提示用户操作选项(push,pop,view,quit) 2.规则:定义列表,先入栈,后出栈,后入栈,先出栈 1.模拟入栈.出栈操作 >>> list1 = [ ...

  4. [置顶] 栈/入栈/出栈顺序(c语言)-linux

    说明: 1.栈底为高地址,栈顶为低地址. 2.入栈顺序:从右到左. 解释1:栈在内存中的结构 [注:0x00 到 0x04之间间隔4个地址] 入栈:指针先指向0x10,从高地址向低地址方向填数值,最终 ...

  5. 5, java数据结构和算法: 栈 , 入栈, 出栈, 正序遍历,,逆序遍历

    直接上代码: class ArrayStack{ //用数组模拟栈 int maxSize; int[] stack; int top = -1;//表示栈顶 public ArrayStack(in ...

  6. Bad Hair Day-POJ3250(简单的入栈出栈)

    Description Some of Farmer John's N cows (1 ≤ N ≤ 80,000) are having a bad hair day! Since each cow ...

  7. const以及入栈出栈

    #include "stdafx.h"#include <iostream>using namespace std; class StringStack{ enum{s ...

  8. 对Viewcontroller在UINavigationController中入栈出栈的一点点理解

    转载自:http://blog.csdn.net/intheair100/article/details/41119073 wait_record_arr 在viewdidload里面被alloc,如 ...

  9. 面试 16:栈的压入压出队列(剑指 Offer 第 22 题)

    我们今天继续来看看周五留下的习题: 面试题:输入两个整数序列,第一个序列表示栈的压入顺序,请判断二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如:压入序列为{1,2,3,4,5},那{ ...

随机推荐

  1. django (一) 环境的配置及Django文件简介

    1, 创建虚拟环境(virtualenv 和virtualenvwrapper) 1.1, virtualenv的概述 virtualenv是用来创建Python的虚拟环境的库,虚拟环境能够独立于真实 ...

  2. A.出题人的RP值

    链接:https://ac.nowcoder.com/acm/contest/358/A 题意: 众所周知,每个人都有自己的rp值(是个非负实数),膜别人可以从别人身上吸取rp值. 然而当你膜别人时, ...

  3. node项目 Error: Cannot find module 'mongoose'

    这是因为你部署的项目没有添加mongoose,使用 在自己项目的根目录下:npm install mongoose --save

  4. public private protected 三种访问修饰符在c#中的区别

    1. public 公有的可见性:在类自身内部可见: 可被子类继承: 类外部可见 2. protected 受保护的可见性:在类自身内部可见: 可被子类继承: 类外部不可见 3. private 私有 ...

  5. eureka集群环境搭建

    一:集群环境搭建 第一步:我们新建两个注册中心工程一个叫eureka_register_service_master.另外一个叫eureka_register_service_backup eurek ...

  6. Vuex.js状态管理共享数据 - day8

    VScode文件目录: amount.vue代码如下: <template> <div> <!-- <h3>{{ $store.state.count }}& ...

  7. okhttp使用心得(https验证不通过)(一)

    之前项目使用的是okhttp3.4版本的,tls协议支持1.0 1.2 等等 后来换成okhttp3.8.1,发现握手失败 找了好多原因之后  发现吧tls加上1.0后,就可以握手成功了,但是tls1 ...

  8. show processlist使用介绍

    这个命令中最关键的就是state列,mysql列出的状态主要有以下几种: Checking table 正在检查数据表(这是自动的).Closing tables 正在将表中修改的数据刷新到磁盘中,同 ...

  9. python自动化基础问题解析

      (1)自动化代码中用到的设计模式: po模式(page object): 1.PO提供了一种业务流程与页面元素操作分离的模式,这使得测试代码变得更加清晰. 2.页面对象与用例分离,使得我们更好的复 ...

  10. Codeforces Round #272 (Div. 2)-A. Dreamoon and Stairs

    http://codeforces.com/contest/476/problem/A A. Dreamoon and Stairs time limit per test 1 second memo ...