14360|9

603

帖子

1

TA的资源

纯净的硅(中级)

楼主
 

【MSP430 编译器使用经验】IAR的调试功能 [复制链接]

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

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

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

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

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

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

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


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

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


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

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

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

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

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

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


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


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

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


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

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


最新回复

感谢楼主,刚开始用iar,受教了  详情 回复 发表于 2017-3-23 17:11

赞赏

1

查看全部赞赏

 
点赞 关注(2)

回复
举报

16

帖子

2

TA的资源

一粒金砂(初级)

沙发
 
很好。。。。。。。
 
 

回复

1万

帖子

16

TA的资源

版主

板凳
 
楼主是在仿真器下调试的吧????

点评

恩,没错。  详情 回复 发表于 2014-8-10 19:16
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

603

帖子

1

TA的资源

纯净的硅(中级)

4
 
ddllxxrr 发表于 2014-8-10 16:58
楼主是在仿真器下调试的吧????

恩,没错。
 
 
 

回复

303

帖子

5

TA的资源

一粒金砂(高级)

5
 
很好的经验指导,谢谢楼主分享啊!
 
 
 

回复

303

帖子

5

TA的资源

一粒金砂(高级)

6
 
额,楼主萌萌哒,谢谢楼主的经验分享!
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(初级)

7
 
很棒。。。。。
 
 
 

回复

51

帖子

0

TA的资源

一粒金砂(高级)

8
 
亲,我的为啥只能在汇编中运行调试,不能在C代码中运行

点评

这位童鞋,最大的可能,有这两种,会导致你的调试运行在汇编中。 1.进入调试模式以后,你手动打开了汇编窗口Disassembly,并把光标定在了该窗口中。 2.出于某些原因,进入了没有源码的区域(比如一个断点打在了没  详情 回复 发表于 2017-1-30 13:32
 
 
 

回复

603

帖子

1

TA的资源

纯净的硅(中级)

9
 
扫把鑫 发表于 2016-12-8 10:52
亲,我的为啥只能在汇编中运行调试,不能在C代码中运行

这位童鞋,最大的可能,有这两种,会导致你的调试运行在汇编中。
1.进入调试模式以后,你手动打开了汇编窗口Disassembly,并把光标定在了该窗口中。
2.出于某些原因,进入了没有源码的区域(比如一个断点打在了没有源码的某个lib的里面)
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

10
 
感谢楼主,刚开始用iar,受教了
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

开源项目 更多>>
    随便看看
    查找数据手册?

    EEWorld Datasheet 技术支持

    相关文章 更多>>
    关闭
    站长推荐上一条 1/10 下一条

     
    EEWorld订阅号

     
    EEWorld服务号

     
    汽车开发圈

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表