我们可以自己建立自己的工程了,但这一步只是开发中的第一小步。今天就来说说开发中举足轻重的另外一件事:调试。

其实调试本身也并不难,楼主总结,调试关键在于两件事,一是运行,二是观察,为了更好的实现这两者,就牵涉到如何设置断点。

运行很简单了,仔细观察调试工具栏:

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

运行是以指令指针为参照的,在环境中表现为绿色的小箭头:

指令指针指向的该行,表示的是接下来准备要执行的代码行。

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

观察,就是看——看什么?什么都看!

在菜单View中,我们可以了解都有哪些可以看,重点都在中间那一段中。

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

除了上述这些,还有一些可以看的东西,由于楼主不常用,因此楼主也不是百分百的清楚它们的意义和用法,就不在这里胡说八道了。
总体来说即使只弄明白上述这些,在调试的时候也足够了,绝对能让你想看哪里,就看哪里。

最后是断点,这个东西,可简单可复杂。所以下面我们简单来说说,便于大家好接受。

基本的断点,通过下载调试按钮旁边的有着红色圆的按钮,就可以在光标当前行进行设置或者取消了,

当然你也可以直接点击代码左侧的灰色区域,使断点出现或者消失。

这是一个普通的位置断点,在IAR中也被称为代码断点,也就是当运行到这里的时候停下来。下图是断点窗格里看到的代码断点

设置好代码断点,让程序运行,程序就会在运行到断点的位置时自动暂停下来了。
以前经常有童鞋来问楼主,打了断点为啥停不下来……很简单,压根没跑到你设置断点的地方呗!

在我使用的环境中,除了代码断点,还支持条件断点和高级断点的设置。

可能是由于楼主也不太会使用这个,只能设置到读写某个变量时暂停,我连单独的读或写操作都无法指定,如下图所示。

在用其他环境调试的时候,楼主也经常利用条件断点来监视某个变量被修改成非法值的时机点,以此来跟踪调查程序运行混乱的问题。

简单总结一小下,调试时我们在做程序的时候,话费最多时间的阶段,所以从学习IDE的使用开始上手,能有效提高我们调试的效率,把程序做得更大更好更稳定。

iar调试的更多相关文章

  1. 一步一步学FRDM-KE02Z(一):IAR调试平台搭建以及OpenSDA两种工作模式设置

    摘要:FRDM-KE02Z是飞思卡尔公司较为新的微控制器,学习和开发资料较少.从本篇开始会陆续介绍其相关的开发流程,并完成一个小型的工程项目.这是本系列博客的第一篇,主要介绍开发环境IAR for A ...

  2. IAR调试时出现IAR one or more breakpoints could not be set and have been disabled的解决办法

    问题:在IAR调试时,单步执行的时候绿色箭头一直指向汇编界面,不指向C语言界面,并且不能在C语言界面设置断点,以及在代码编辑界面,设置断点,点调试时总提示IAR one or more breakpo ...

  3. IAR调试查看程序时间

    在无仿真器情况下设置: 调试仿真,点击view菜单下registers 软件仿真时计算两断点CYCLECOUNTER(在CPU registers中)的差值,乘以指令周期(MCLK)便是执行时间

  4. IAR调试cc2541串口遇到的Warning : Possible IDATA stack overflow detected

    1. 遇到的错误如下,似乎是栈空间不够使用 2. 修改界面如下,增加IDATA的大小,不过最大似乎是0XFF.

  5. 痞子衡嵌入式:IAR在线调试时设不同复位类型可能会导致i.MXRT下调试现象不一致(J-Link / CMSIS-DAP)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IAR在线调试时设不同复位类型可能会导致i.MXRT下调试现象不一致. 做Cortex-M内核MCU嵌入式软件开发,可用的集成开发环境( ...

  6. 痞子衡嵌入式:IAR内部C-SPY调试组件配套宏文件(.mac)用法介绍

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是IAR内部C-SPY调试组件配套宏文件(.mac)用法. 痞子衡之前写过一篇 <JLink Script文件基础及其在IAR下调用 ...

  7. 【STM32H7教程】第7章 STM32H7下载和调试方法(IAR8)

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第7章   STM32H7下载和调试方法(IAR8) 本 ...

  8. 【安富莱专题教程第2期】uC/Probe简易使用说明,含MDK和IAR,支持F103,F407和F429开发板

    说明:1. 在uCOS工程调试时,这个软件还是非常给力的,方便查看各种信息,可以认为是MDK或者IAR调试功能的图形化版本,使用JLINK连接可以随时连接查看,无需目标端代码.2. 当前教程中,我们使 ...

  9. IAR FOR STM8S 错误 An error occurred while retrieving GDI features: gdi-error [40201]解决方法

    今早使用IAR调试编译调试一个工程,发现IAR竟然出现如下错误信息 An error occurred ]: Can't access configuration database 在网上查看了一下, ...

随机推荐

  1. hierarchyid

    hierarchyid: http://www.cnblogs.com/shanyou/archive/2011/07/01/2095968.html RABBITMQ: http://www.rab ...

  2. Leetcode 4Sum

    Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = tar ...

  3. phpunit测试学习 2 分类总结断言涉及哪些方面

    11:27 2015/12/9phpunit测试学习 2,  分类总结断言涉及哪些方面先推荐windows快速打开某处路径下的cmd,进入测试状态:可以在文件夹中,按住Shift+鼠标右键,这时候你就 ...

  4. 【BZOJ】3835: [Poi2014]Supercomputer

    题意 \(n(1 \le 1000000)\)个点的有根树,\(1\)号点为根,\(q(1 \le 1000000)\)次询问,每次给一个\(k\),每一次可以选择\(k\)个未访问的点,且父亲是访问 ...

  5. Memcached: List all keys

    In the general case, there is no way to list all the keys that a memcached instance is storing. You ...

  6. android中工作线程安全

    当应用程序启动,创建了一个叫“main”的线程,用于管理UI相关,又叫UI线程.其他线程叫工作线程(Work Thread). Single Thread Model 一个组件的创建并不会新建一个线程 ...

  7. jackson注解使用心得

    maven依赖: <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId ...

  8. php 删除目录及子文件

    function del_dir($dir) { if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') { $str = "rmdir /s/q &q ...

  9. swif-throws异常抛出

    import UIKit enum VendingMachineError: Error { case invalidSelection //选择无效 case insufficientFunds(c ...

  10. C#拾遗-边边角角

    1.扩展方法 public static 方法返回值类型 扩展方法名(this 要扩展类型 obj,调用扩展方法时需要的参数){ return "返回值"} 2.运算符重载 pub ...