软件调试——CPU异常列表】的更多相关文章

CPU异常主要分为三类:错误类异常,陷阱类异常和终止类异常 1 错误类异常 Fault CPU遇到该类异常后,会先将CS和EIP(当前发生错误的指令,而不是下一条指令)压栈,然后跳到异常处理函数中,执行完成后恢复到原位置重新执行该指令,如果还有错误,还会再进. 例如内存缺页异常就是错误类异常,CPU遇到缺页异常时会跳转到异常处理,将缺少的内存页从物理内存中置换回来,再恢复重新执行内存访问指令. 2 陷阱类异常 Trap CPU遇到该类异常后,会将CS和EIP压栈,这个EIP就是当前指令的下一条指…
<软件调试的艺术>学习笔记——GDB使用技巧摘要 <软件调试的艺术>,因为名是The Art of Debugging with GDB, DDD, and Eclipse. 作者是美国的Norman Matloff和Peter Jay Salzman,中文版由张云翻译.是人邮出版社图灵程序设计丛书初版.这里称为"艺术",个人觉得有点过了,但是其中关于gdb以及在gdb基础之上集成的DDD和Eclipse调试技巧的整理确实是做的很好,对于Linux/开源社区下的…
第4章断点和单步执行 断点和单步执行是两个经常使用的调试功能,也是调试器的核心功能.本章我们将介绍IA-32 CPU是如何支持断点和单步执行功能的.前两节将分别介绍软件断点和硬件断点,第4.3节介绍用于实现单步执行功能的陷阱标志.在前三节的基础上,第 4.4节将分析一个真实的调试器程序,看它是如何实现断点和单步执行功能的. 4.1  软件断点 x86系列处理器从其第一代产品英特尔8086开始就提供了一条专门用来支持调试的指令,即INT 3.简单地说,这条指令的目的就是使CPU中断(break)到…
SPI核软件调试结果 一.硬件搭建 配置如下: 1.采用手动复位: 2.输入时钟27M,AXI总线工作频率100M: 3.axi_quad_spi 配置为标准模式: 4.配合软件例程的使用,挂载了CPU,axi interrupt controller等IP核. 二.软件调试 1.给SPI Flash发送写使能命令 运行结果: 2.对SPI flash进行擦除操作 运行结果: 3.向SPI flash里面写入数据(单页写模式) 运行结果: writebuffer里面的数据通过XSpi_Trans…
Windbg在软件调试中的应用 Windbg是微软提供的一款免费的,专门针对Windows应用程序的调试工具.借助于Windbg, 我们常见的软件问题:软件异常,死锁,内存泄漏等,就可以进行高效的排查. 在开始用WinDbg调试应用程序之前,我们得先做些准备工作. 设置符号文件路径. 设置源代码路径. 打开待调试的可执行程序或Dump文件. 上述3个操作步聚比较简单,均在File菜单的子菜单项中设置,此处就不在细说,值得一提的就是需要设置的符号文件路径有三类: 1.Windows自身的模块的符号…
Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html 两种异常(CPU异常.用户模拟异常)的收集  文章的核心:异常收集的是什么?(TrapFrame与ExceptionRecord):如何收集异常?(看文章). 1. 异常的分类 ① CPU指令异常 (比如除零异常) CPU运行检测到: ② 用户模拟异常 (throw 1) 其在收集是存在不同,但在派发时和处理时是完全相同的,下面我们就来分析一下其存在的不同. 2.…
目录 一.问题详情 top 命令截图 联系腾讯云排查 检查系统日志发现异常 二. 问题解析 三.问题原因 最终结论 四.扩展 进程的几种状态 马后炮 如何快速清理僵尸进程(Z) 内核参数相关 如何查看哪些文件被哪些进程被锁 一.问题详情 linux一切皆文件 2021年4月2号,晚上10.45分左右,线上业务异常,后排查 线上服务器CPU 异常高,机器是 16核 64G的.但是实际负载已经达到了 140左右. top 命令截图 联系腾讯云排查 虚拟机所属于物理机是否有故障. 虚拟机所用的资源是否…
声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记.欢迎转载! ----------------------------------------------------------------------------------------------------- 自动化测试 1.有效的自动化测试 明确说明测试结果是否通过 不需要安装.测试后也能够撤销对环境所做的任何修改 单击运行所有的测试 全面覆盖,做到足够解决完全覆盖是可能的 2. 自动化测试…
声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记.欢迎转载! -------------------------------------------------------------------------------------------- 缺陷优先 如何使缺陷修复与软件开发相结合? 如何估计缺陷修复花费的时间? 如何确保项目不会陷入<人月神话>中所描述的无数缺陷修复的焦油坑中呢? 缺陷优先 要采用早起缺陷修复原则,并且基于以下两…
声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记.欢迎转载! ----------------------------------------------------------------------------------------------- 缺陷可以随时发生,从代码编写完毕到代码发布后的成年累月! 无论你开发什么样的软件,都需要创建一些流程,通过这些流程,可以告诉你软件哪里出了问题,并且应该如何修复! 1.缺陷管理系统 既有简单用途的,…
声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记.欢迎转载! -------------------------------------------------------------------------------------------------- 有时尽管修复设计的是一个孤立的代码区,但你还是需要大局观,在修复缺陷之后花时间反思一下! 一旦确定了错误的来源,就可以采取措施避免它再发生!有些情况下,只不过是告诉你未来在在这一方面要更加小心…
声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记.欢迎转载! 修复缺陷 对于一个好的修复来说,不仅仅是让软件运行正确,还需要为将来奠定基础.一些列零散的未经仔细考虑的修改,都将是原本的简洁设计逐步消失. 好的修复必须同时实现以下目标: 修复问题 避免引入回归 维持或者提高代码的整体质量 -----------需要参考的规则如下---------- 1.清除障碍 确保一切从头开始,当你不舍得抛弃诊断阶段所做的修改时,利用源码控制系统. 需要对所做的修…
声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记. 不要急于动手! 尽管可以利用各种工具和技术以及软件自身查找缺陷,但是你最重要的财富是你的智慧 一种调试方法 提出假设->设计实验->假设不成立,重新开始 采用不同类型的实验 进行几种不同类型的实验,但是每种实验必须有一个明确的目标.比如软件内部运行状态.软件的输入参数.本身编码逻辑. 实验必须起到验证的作用 实验是一种达到目的手段,而不是目的的本身.可以通过实验用来证明或者推翻假设.…
声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记. 重现第一,提问第二 问题重现是实证过程的最强大武器,如果不能重现问题,你也无法证明修复了它 首先按照缺陷报告的描述的步骤来做, 抓住重点,包含三个控制因素 软件本身:确保你使用的软件版本和bug提交的版本一致,使用相同的编译工具和相同的编译参数. 软件运行环境:如果要与外界环境交互,则确保使用相同外部系统.比如测距仪,需要在同样的光照环境.温度和供电方式. 提供的输入:如果软件代码的运行和配置参数…
windows程序员进阶系列:<软件调试>之堆 (一) 堆是软件在运行时动态申请内存空间的主要途径.从堆上申请来的空间需要程序员自己申请和释放,且申请和释放操作必须绝对匹配.忘记释放或者多次释放可能会导致严重问题. 与栈类似,使用堆的过程中也会由于向堆中写入超过所申请堆大小的数据,覆盖堆上的其他内容,而导致堆溢出问题. 由于堆的特殊性,一旦堆被破坏将会导致一些严重的问题.由于如果对堆不够了解的话对于这些问题将会手足无措.本文将会详细的介绍堆的方方面面,通过以下几篇文章的讲解便可以很清晰的了解堆…
SPI 核软件调试记录 1.首先说说int SpiFlashWaitForFlashReady(void)这一函数,基本上其它函数在执行的时候,都会事先执行一次此函数.    因为此函数的作用主要是用来等待,所以整个语句在一个循环里面.第一步是检测spi flash 的状态,若spi flash 已经完成了上一次传送,   状态为XST_SUCCESS,否则,函数直接返回XST_FAILURE 即not ready.检测ReadBuffer[1]中的值 若果为0,则break循环,函数返回XST…
Video Timing Controller v6.1软件调试记录 GUI配置: . case XVTC_VMODE_PAL: //576i@50 { TimingPtr->Interlaced = ; // Horizontal Timing TimingPtr->HActiveVideo = ; TimingPtr->HFrontPorch = ; TimingPtr->HSyncWidth = ; TimingPtr->HBackPorch = ; TimingPtr…
Video Test Pattern Generator(7.0)软件调试记录 . XVidC_VideoMode XVIDC_VM_576_50_I = XVIDC_VM_720x576_50_I . typedef struct { u16 HActive; u16 HFrontPorch; u16 HSyncWidth; u16 HBackPorch; u16 HTotal; u8 HSyncPolarity; u16 VActive; u16 F0PVFrontPorch; u16 F0…
Android开发调试常用命令列表 adb命令 am am start -n com.iflytek.autofly.account/.ui.MainActivity am start -n com.android.settings/.Settings am start "intent:#Intent;action=android.media.action.MEDIA_PLAY_FROM_SEARCH;\ S.android.intent.extra.focus=vnd.android.curs…
1. 视频: (1).VS下的C++调试方法.wnv (2).WinDbg高级调试技术.wmv (3).内存与句柄泄漏处理技巧.wmv 2. “WinDbg高级调试技巧” 中 [01:22]讲到“软件调试的书籍”有: 1.The Developer's Guide to Debugging 软件调试实战 2. Debug It ! Find, Repair, and Prevent Bugs in Your Code 软件调试修炼之道 3. 日臻完善 软件调试与优化 典型应用 3.…
Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html CPU异常的记录(trap00为例) 一.CPU检测到除零异常的执行流程 二.Trap00 函数的分析 当发生除零异常时,查IDT表会查到Trap00函数,该函数的目的是构建_KTRAP_FRAME结构,查错误码,之后调用 commonDispatchExcption进行封装. 我们可能很奇怪,明明CPU检测到的错误,本身就在内核,还会有 _KTRAP_FRAME…
编程中,调试几乎是必不可少的,一劳永逸.一次完成预想功能而完全不出bug的情况凤毛麟角,出现bug→调试→再出现bug→再调试……基本是软件工程中的常态.可以说,软件调试是每个coder的必修课,而<软件调试修炼之道>便是一本调试教科书,考虑到前两次大作业中出现的各种bug,我有必要系统地学习debug的一些思想和技巧,因此本周我阅读了这本书的Part 1:问题的核心.这一部分由五章组成:山重水复疑无路,重现问题,诊断,修复缺陷,反思.以下我将分别浅谈我的阅读感想. 1.概览调试:流程.问题和…
反调试--Windows异常-SEH 概念: SEH:Structured Exception Handling SEH是Windows默认的异常处理机制 如何使用 在代码中使用 __try​​__except()//结构类型的语句 __except()小括号里面填写表达式,表达式为真的时候执行里面的内容 __try里面包含的是可能触发异常的语句,except里面包含的是出现了异常后执行的操作. 例子: int main(){ __try { cout<<"hello,world&q…
最近在看张银奎先生的<调试软件>一书,想将关键的技术记录下来,以便日后查阅,也分享给想看之人吧. 1 通用寄存器 EAX,EBX,ECX,EDX:用于运算的通用寄存器,可以使用AX,BX等16位或AL,AH等8位短寄存器,访问长寄存器的相应地址 ESP,EBP:Extended Stack/Base Pointer,指栈顶和当前栈的起始地址 ESI,EDI:源和目标寄存器,比如在循环操作中,与ECX组合,分别表示计数器(ECX),起始数(ESI),目标数(EDI) 64位扩展通用寄存器:RAX…
操作系统是计算机系统中的基本软件.它负责管理系统中的软硬件资源.通常都包括文件管理.内存管理.进程管理.打印管理.网络管理等基本功能.除此之外,支持调试也是操作系统设计的一项根本任务. 0x01  进程和进程空间 进程和程序的关系好比是类和实例的关系,运行一个程序时,操作系统就为这个程序创建一个实例.一个程序可以有多个实例在运行.   操作系统角度的进程称为一个task,而一个进程可以包含多个线程,CPU一级的任务可以看成是Windows系统下每个进程中的一个线程,在这个层面上看,Windows…
一.High CPU试验 1.示例代码 static void Main(string[] args) { Console.Clear(); Console.WriteLine("到命令行下,切换到windbg目录,执行adplus -hang -pn highcpu.exe -o c:\\dumps"); Console.WriteLine("如果要停止,按Ctrl+C结束程序"); Console.WriteLine("================…
1.!runaway !runaway命令显示每个线程消费的时间 Bit 0 (0x1) 让调试器显示每个线程消耗的用户模式时间(user time),默认不加就是0x1 Bit 1 (0x2) 显示每个线程消耗的内核时间(kernel time). Bit 2 (0x4) 显示每个线程从创建开始经历了多少时间. 就是三者的组合:1 2 3 4 5 6 7 [cpp] view plaincopy 0:002> !runaway User Mode Time Thread       Time…
有效调试不仅仅是排除缺陷,其包含如下几个步骤 弄明白软件为何运行错误 修复这个问题 避免破坏其它部分 保持或者提高代码的总体质量 确保同样的问题不在其它地方发生,也不会再次发生 构建实验.观察结果 依赖观察和经验,而不是理论和纯逻辑推理 阅读源码,推理软件的运行状况,通常效率低下而危险 要仔细的构建实验环境并观察软件的运行状况 需要澄清的几个问题 你知道发生了什么吗? 要明确知道到底发生了什么,什么情况下发生的. 不要完全依赖缺陷报告,缺陷报告本身的错误也不会少 如果没有缺陷报告,应该在了解整个…
13:05 2015/9/11 午睡醒来收到几封CPU使用率预警邮件.登录对应服务器,打开资源监视器,看到sqlservr.exe进程的CPU达到40%(平常服务器CPU消耗在10%以内).查看CPU信息跟踪表,近一小时的CPU都维持在40%左右.图1 CPU使用率预警邮件图2 资源监视器和CPU信息跟踪表开启profiler跟踪,筛选CPU>60毫秒的事件.发现有一个存储过程调用非常频繁,而且cpu>90 read>2800.查看此过程,语句很简单,返回记录数很少,表上有对应索引.但从…
因为: 硬件 norflash 有寿命,所以尽量少用,而且自己也不会把 程序在 KEIL中从SDRAM 中调试,不会设置.所以采取软件虚拟的方法调试. 主要修改一下几部分: 1.  ledcircle.sct 文件 ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************…