参考文档:http://www.docin.com/p-1983183635.html

IAR调试按钮功能说明

先来看常用的快捷键:

全速运行:F5
单步运行:F10

加断点/取消断点:Ctrl+F9

退出调试:Ctrl+Shift+D

注释多行:Ctrl+K(单行也是这个)

取消注释:Ctrl+Shfit+K

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

用来显示所有断点View——>Breakpoints

关闭方式是单击右键,选择delete,如下图所示:

1.从左向右依次是:复位,暂停,步过,步入,步出,下一句,至光标,运行,退出调试模式。

运行是以指令指针为参照的,在环境中表现为绿色的小箭头:
指令指针指向的该行,表示的是接下来准备要执行的代码行。

复位:指令指针回到开头,
暂停:使正在奔跑的程序立定
步过:执行当前这句话,如果这句话是函数调用,就把整个函数执行完,停在下一句
步入:执行当前这句话,如果这句话是函数调用,就进入到函数里,停在函数的第一句话
步出:一直执行到从当前的函数返回,停在函数返回后的下一句话
下一句:执行C语言的一条语句,停在下一句代码上
至光标:一直运行到光标所在行,并停在这一行上
运行:运行到遇到断点
退出调试模式:……额,就是退出调试模式

2.我们主要来看看重点中的重点,楼主比较常用的有以下这些:
Breakpoints:也就是断点
Disassembly:反汇编,也就是你写的程序经过编译烧写之后,在单片机中的样子
Memory:内存,可以查看全部内存中的数据,看起来就像一般的16进制编辑器
Symbolic Memory:符号内存,不但能看到内存数据,还能看出来对应程序中的什么变量
Register:寄存器,查看全部寄存器的内容
Watch:观察,可以根据你的需要,指定查看什么,根据楼主的经验,查看全局变量方便一些,在变量可见范围内,也可以查看局部变量和静态变量(static)
Locals:查看函数局部(变量等)内容,包括函数的参数
Statics:查看静态内存变量,注意不是指静态变量(static),而是生命周期是整个程序生命期的变量,原则上不在堆栈中的局部变量,应该都是静态内存变量。
auto:自动,指的不是C语言中的自动变量,而是指根据指令指针当前的位置,自动显示出相关的变量
Call Stack:调用栈,表示到当前位置的函数调用顺序图

Stack:栈,就是栈的数据表示

3.调试技巧

1)关于Run to(在工程中Project>Options>Debugger>Setup>Run to)

默认工程Run to的内容是main,这个选项指定了程序调试的起点,注意这里写的是程序调试的起点并不是程序的起点,而且我们需要明白main不是程序的起点,编译器把一些初始化工作放在了main之前,比如全局变量的初始化。那么我们调试的时候也可以输入其它的调试起点,我们可以指定程序中IAR识别的任意标号或者函数名称。

2)关于在反汇编窗口和内存窗口中快速定位函数位置和变量位置
我们经常需要在Disassembly窗口中找到指定函数的位置,或者需要在Memory窗口中找到指定变量的位置,一般情况下选中函数名称然后把函数名称拖放到Disassembly窗口,相关函数就会显示在Disassembly窗口中,也可以把变量名称用相同的操作显示在Memory窗口中。

3)单步调试速度缓慢的问题
我们在单步调试过程中如果发现速度缓慢,那么以下的几点需要引起我们的注意:

如果使用硬件仿真系统,我们需要为单步调试留下足够的硬件断点,在调试中的单步运行通常是用断点来实现的,通过把断点设置在下一个语句后,来完成单步调试的功能。硬件的断点数量是有限的,如果没有可用的硬件断点,调试器就会在每个汇编指令处停止一下,这样完成一条完整的语句的所有汇编代码越多时间就越长。

在Trace和Function Profiling窗口中使用Enable/Disable按钮关闭数据跟踪功能。因为在每个单步之后要收集这些跟踪的数据,所以数据跟踪可能会降低单步的速度。需要注意的是,紧紧关闭相关的窗口是不能关闭数据跟踪功能的,必须通过Enable/Disable按钮来完成。

只打开有限数量的SFR寄存器窗口,这可以通过2种方法实现。一种是通过在Watch窗口中手动输入SFR寄存器的名字;另一种是创建自定义的特殊功能寄存器组,操作步骤如下,Tools>Options>Register Filter>Use register filter如下图:

选择New Group

把关心的SFR放到组中

如果不需要Memory和Symbolic Memory窗口,关闭它们,因为在每个单步之后要读出这些内存数据。

如果不需要Watch,Live Watch,Locals,Statics窗口,关闭它们,原因同上。

关闭Stack窗口和相关的设置,Tools>Options>Stack,去掉Enable graphical stack display and stack usage tracking的选择,如下图:

如果可能,提高调试器和目标板的通讯速度。

4)关于Call Stack(在工程中View>Call Stack)

如下图:

IAR集成环境产生大量的支持信息,这允许调试过程中在没有运行损失的情况下显示完整的函数调用链。这通常会帮助我们确定目前函数的上下文,跟踪变量和参数中的不正确值的来源从而定位出现的问题。

5)EFM_ASSERT宏的合理应用
EFM32的CMSIS库中有一个宏被大量的应用,它的名字叫EFM_ASSERT。这个宏应用了2个参数,一个是__FILE__,一个是__LINE__,这在IAR中分别表示文件名和文件内的行号。这2个参数可以直接告诉我们出现问题的文件和所在的行。

以下通过一个具体的EFM32代码来看看以上提到的几点的应用。

为了演示gpioSetup内部的问题,我们可以把程序调试的起点直接设置到gpioSetup,如下图:

然后全速运行程序,发现程序停在了assertEFM函数内部,通过View>Locals,如下图:

可以看到问题出在em_gpio.c的270行,该行正是GPIO_PinModeSet函数的第一个语句。
我们再通过View>Call Stack,如下图:

可以快速的定位到问题出在以下位置,如下图:

作为主推低功耗的EFM32系列单片机,想要最终实现低功耗,除了硬件本身支持之外,合理的代码也是很重要的。通过不断的调试,我们可以更加准确的把握这一系列的单片机,也可以掌握很多的调试技巧,希望以后有更多的技巧分享给大家。

IAR调试按钮功能说明及调试主要看哪些内容相关推荐

  1. videojs默认显示controls 按钮功能失效_一文看懂Yearning SQL审核平台功能模块设计...

    概述 Yearning SQL审核平台目前兼容99%的Mysql 标准SQL语法. 已知不支持的语句类型有: 复杂的查询语句(多表,多函数,非必现.并不是所有复杂语句不支持) create table ...

  2. 【Android 逆向】代码调试器开发 ( 代码调试器功能简介 | 设置断点 | 读写内存 | 读写寄存器 | 恢复运行 | Attach 进程 )

    文章目录 一.代码调试器功能简介 二.Attach 进程 一.代码调试器功能简介 代码调试器功能 : 设置断点 : 无论什么类型的调试器 , 都必须可以设置断点 , 运行到断点处 , 挂起被调试进程 ...

  3. 【Flutter】Flutter 调试 ( 调试回退功能 | Debug 调试中查看变量的方式 | 控制台信息 )

    文章目录 一.调试回退功能 二.Debug 调试中查看变量的方式 三.Debug 控制台信息 四.相关资源 一.调试回退功能 在调试过程中 , 经常错过关键位置的调试 , 如没有进入关键方法进行调试 ...

  4. Visual Studio 2005中编译调试新功能

    在日常的编程中,程序员经常离不开的工作之一,就是调试.当写好一段代码或程序后,在运行后总会出现这样那样的问题,比如各样的错误,程序员就必须进行调试,将这些错误排除.在最新出炉的Visual Studi ...

  5. idea调试怎么跳出循环_Intellij IDEA调试功能使用总结

    这段时间一直在使用Intellij IDEA, 今天把调试区工具的使用方法记录于此. 先编译好要调试的程序. 1.设置断点 选定要设置断点的代码行,在行号的区域后面单击鼠标左键即可. 2.开启调试会话 ...

  6. idea调试按钮作用

    idea调试按钮含义 1: F8 :step over 下一步下一步, 当遇到调用方法, 直接把方法当做一句话执行完毕,不会进入方法 2: F7 : step into 也是下一步的意思,但是当遇到 ...

  7. vs调试按钮为灰色的_IntelliJ IDEA 调试 Java 8,实在太香了

    前段时间,栈长发布了一篇关于 Java 8 Optional.map 的实用文章,留言区就有的人说 Java 8 的语法糖不方便调试,还要视情况使用. 留言区也有人说 IntelliJ IDEA 早已 ...

  8. 痞子衡嵌入式:IAR环境下无法直接下载调试i.MXRT分散链接工程的解决方案(宏文件.mac+双Flashloader)...

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IAR环境下无法直接下载调试i.MXRT分散链接工程的解决方案. 分散链接与加载一直是嵌入式领域比较劝退新手的难题,在恩智浦 i.MXR ...

  9. 【转载】ISP各模块功能介绍及调试经验

    海思平台下的ISP功能介绍及问题调试 平台说明 该调试是在海思平台下进行的(我用的是3559,在3519/3516测试也是没有问题的,只是部分参数稍微有差异.其海思他系列处理器的ISP调试大体上也是一 ...

最新文章

  1. Androidx CoordinatorLayout 和 AppBarLayout 实现折叠效果(通俗的说是粘性头效果)
  2. C#进阶系列——动态Lamada
  3. python的动态性以及 使用__slots__
  4. PMP考试错题记录(2)
  5. python学习笔记之编写readConfig读写配置文件
  6. axios mysql_axios的简单使用
  7. 博士申请 | 阿联酋阿布扎比人工智能大学许志强老师招收全奖博士/硕士
  8. 【CF#931.B】World Cup (思维,模拟)
  9. 微软遭遇XP SP3疯狂重启尴尬境地
  10. linux man使用方法 和centos安装中文man包
  11. 不能调试的问题的解决
  12. JAVA Metrics 度量工具使用介绍
  13. npm webstorm配置_怎样使用webstorm中配置nodejs环境及npm
  14. 【图文说明】屏幕录像专家如何安装、录制小文件的录像
  15. Android经典蓝牙连接
  16. 【数据集划分】误用shuffle,导致训练集和测试集掺混
  17. 递归详解——让你真正明白递归的含义
  18. 云计算学习1——OpenStack云计算安装部署步骤图文并茂(先电2.2)
  19. 输入字符串,输出字符串中出现次数最多的字母及其出现次数。如果有多个字母出现次数一样,则按字符从小到大顺序输出字母及其出现次数。
  20. 从零开始-自动化立体库设计与计算

热门文章

  1. cosbench 安装
  2. 基于IPV6的数据包分析
  3. 【BZOJ 4555】[Tjoi2016Heoi2016]求和 多项式求逆/NTT+第二类斯特林数
  4. java 入门-helloWorld
  5. 如何运维能让网站稳定高效--稳定篇
  6. 笔记本电脑按开机键没反应怎么办?(先记得长按开机键,大约10秒钟看看可以吗)
  7. Java 生成有序 UUID
  8. 分布式工具的一次小升级⏫
  9. 小K的农场(luogu P1993
  10. 内核中的UDP socket流程(2)——API “sys_socket”