IAR嵌入式软件编程调试技巧:数据断点追溯Data变化、CallStack查看当前执行函数、设置堆栈、Memory、多次执行断点、编译文件含义等


使用数据断点:

1、选中某一个数据,点击右键->Set Data Breakpoint:
这里写图片描述/2、在弹出页面选择该Data断点实现的条件,例如该Data的读、写,或者可以在Conditions中设置断点产生条件,如Data == 100时进入断点。以及通过Action 在断点执行时产生相应的动作。
这里写图片描述


Set next statement 再次执行到当前断点

如果断点已经执行完,还想继续跳到该断点,可以在断点处右键,选择Set next statement

这里写图片描述


设置堆栈大小

1、右键工程目录选择Options:
这里写图片描述
2、依次选择Linker -> config,然后点击Edit,选项卡选择Stack/Heap Size,编辑实际堆栈大小:
这里写图片描述


Call stack查看当前正在执行的所有函数:

在Debug模式下,IAR菜单栏选择View -> Call Stack,执行到某一断点时,就可以清晰的看到当前断点时刻,所调用的函数等信息
这里写图片描述

好多攻城狮都会有疑问,这里多说明一下,什么是Call Stack:
Call Stack:调用堆栈,(当前函数执行过程的空间展示)
当发生函数调用的时候,栈空间中存放的数据是这样的:
1、 调用者函数把被调函数所需要的参数按照与被调函数的形参顺序相反的顺序压入栈中,即:从右向左依次把被调函数所需要的参数压入栈;
2、 调用者函数使用call指令调用被调函数,并把call指令的下一条指令的地址当成返回地址压入栈中(这个压栈操作隐含在call指令中);
3、 在被调函数中,被调函数会先保存调用者函数的栈底地址(push ebp),然后再保存调用者函数的栈顶地址,即:当前被调函数的栈底地址(mov ebp,esp);
4、 在被调函数中,从ebp的位置处开始存放被调函数中的局部变量和临时变量,并且这些变量的地址按照定义时的顺序依次减小,即:这些变量的地址是按照栈的延伸方向排列的,先定义的变量先入栈,后定义的变量后入栈;

所以,发生函数调用时,入栈的顺序为:
  参数N
  参数N-1
  参数N-2
  …..
  参数3
  参数2
  参数1
  函数返回地址
  上一层调用函数的EBP/BP
  局部变量1
  局部变量2
  ….
局部变量N


使用Memory查看数据内容

例如查看某个指针指向的数据内容:
Debug模式下,右键Watch 一个char *的指针dataC,这时只能看到指针指向的第一个数据:
这里写图片描述
同样在View菜单下,点击Memory1,将dataC指针存放的地址放到Goto的内容栏中,即可查看数据内容:
这里写图片描述


IAR各编译文件含义:

.dep文件
ide所使用的文件依赖信息,这个会自动生成的,可以删掉
.ewp文件
工程文件/project,包含代码,编译,链接选项等,不包含调试设置等信息,这个不能删
.ewd文件
工程调试设置,保存的是IAR设置中的Debugger选项,这个最好不要删
.eww文件
解决方案/工作空间/workspace,可以直接双击打开,可以放多个工程文件,最好也不要删


IAR更改字体

在代码框邮件Option,如下图所示,依次点击左侧Editor->colors and fonts
其中Common Fonts是console和其他县市的字体,Editor是代码字体。

这里写图片描述

欢迎转载,Howie原创作品,本文地址:

http://blog.csdn.net/HowieXue/article/details/80381023

谢谢