找回密码
 立即注册
查看: 131|回复: 27

IAR入门指南之调试

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:348
  • 最近打卡:2025-05-02 08:34:59

7

主题

281

回帖

1055

积分

金牌会员

积分
1055
发表于 2025-4-10 13:05:14 | 显示全部楼层 |阅读模式
调试通过探讨一些 C-SPY 调试器的特性, 本章展示它们的性能以及如何使用它们:
●    准备调试
●    查看变量
●    使用断点
●    分析应用的运行时行为
注意,根据你安装的产品软件包, 可能含也可能不含C-SPY 。
根据你的硬件,这里没探讨的附加特性或许会在你使用的 C-SPY 驱动里提供。 一般来说, 它用来设置不同类型的观察点, 附加的断点类型, 各种触发系统, 更复杂的追踪系统等等。
准备调试
1    开始C-SPY之前, 选择 Project>Options>Debugger>Setup 并选择满足你的调试系统的 C-SPY 驱动:仿真或硬件调试系统。
2    Category 列表中,选择合适的 C-SPY 驱动并审查你的设置。
3     当你做好了 C-SPY 设置, 单击 OK
4    选择 Tools>Options>Debugger 进行配置:
●   调试器的行为
●   调试器对堆栈使用的追踪。

回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-4-10 13:08:00 | 显示全部楼层
C-SPY 调试器入门指南

C-SPY 调试器是一款功能强大的工具,专为嵌入式系统开发设计,能够帮助开发者高效地调试应用程序。本文将详细介绍 C-SPY 调试器的核心功能及其使用方法,涵盖从准备调试到分析应用运行时行为的全过程。

1. 准备调试

在启动 C-SPY 调试器之前,首先需要配置调试环境。具体步骤如下:

1. 选择调试驱动:在项目设置中,选择 Project > Options > Debugger > Setup,然后根据你的调试系统选择合适的 C-SPY 驱动。通常,调试系统分为仿真调试和硬件调试两种类型。
   
2. 审查设置:在 Category 列表中,选择相应的 C-SPY 驱动,并仔细审查各项设置,确保其符合你的调试需求。

3. 确认配置:完成设置后,点击 OK 保存配置。

4. 调试器行为配置:通过 Tools > Options > Debugger 进一步配置调试器的行为,例如调试器的响应方式、堆栈追踪等。

2. 启动调试器

完成上述准备工作后,即可启动 C-SPY 调试器。调试器启动后,将加载你的应用程序,并准备执行调试操作。

3. 执行你的应用

在调试器中,你可以通过以下方式控制应用程序的执行:
单步执行:逐行执行代码,观察程序的每一步行为。
全速运行:让程序以正常速度运行,直到遇到断点或异常。
暂停/恢复:在程序运行过程中,随时暂停以检查当前状态,或恢复执行。

4. 查看变量

C-SPY 调试器提供了强大的变量查看功能,允许你实时监控程序中的变量值。你可以通过以下方式查看变量:
局部变量窗口:显示当前函数中的局部变量。
全局变量窗口:显示程序中的全局变量。
表达式求值:输入任意表达式,调试器将实时计算并显示其值。

5. 监视内存和寄存器

调试器还支持对内存和寄存器的监视,帮助你深入了解程序的运行状态:
内存窗口:显示指定内存地址的内容,支持多种数据格式(如十六进制、ASCII 等)。
寄存器窗口:显示 CPU 寄存器的当前值,便于分析程序的底层行为。

6. 使用断点

断点是调试过程中不可或缺的工具,C-SPY 调试器支持多种断点类型:
代码断点:在指定代码行设置断点,程序执行到该行时暂停。
条件断点:设置断点触发条件,例如当某个变量达到特定值时触发。
数据断点:监视特定内存地址,当该地址的数据发生变化时触发断点。

7. 查看终端 I/O

C-SPY 调试器还提供了终端 I/O 功能,允许你查看程序的输入输出信息。这对于调试涉及串口通信或其他 I/O 操作的应用非常有用。

8. 分析应用的运行时行为

通过 C-SPY 调试器,你可以深入分析应用程序的运行时行为,包括:
调用栈:查看函数的调用顺序,帮助定位问题。
性能分析:分析程序的执行时间,优化性能。
事件追踪:记录程序运行过程中的关键事件,便于后续分析。

9. 高级特性

根据你安装的软件包和使用的硬件,C-SPY 调试器可能还提供一些高级特性,例如:
观察点:设置不同类型的观察点,监控特定条件。
复杂断点:支持更复杂的断点类型,如基于表达式的断点。
触发系统:设置触发条件,控制调试器的行为。
追踪系统:提供更复杂的追踪功能,记录程序的详细执行路径。

总结

C-SPY 调试器是一款功能全面、易于使用的调试工具,能够显著提高嵌入式系统开发的效率。通过合理配置和使用其各项功能,开发者可以快速定位和解决程序中的问题,确保应用程序的稳定性和性能。希望本文能为你提供有价值的参考,助你在嵌入式开发中更加得心应手。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:348
  • 最近打卡:2025-05-02 08:34:59

7

主题

281

回帖

1055

积分

金牌会员

积分
1055
发表于 2025-4-13 22:27:32 | 显示全部楼层
C-SPY 开始之前设定硬件
你可以在C-SPY 开始之前用 C-SPY 宏来初始化目标硬件。例如, 如果你的硬件使用外部存储器,它在代码可以下载给它之前必须启用, C-SPY 需要宏,在你想调试的应用程序可以被下载之前,完成这一动作。像下面这样:
1   创建新文本文件并定义你的宏函数。比如,启用外部SDRAM的宏可能看起来像这样:
/* 你的宏函数。 */ enableExternalSDRAM()
{
message "Enablingexternal SDRAM\n";
writeMemory32( /* 在这里放你的代码。 */ );
/* 如果有必要这里还可以放。 */
}

/* 设置确定执行时间的宏。 */
execUserPreload()
{
enableExternalSDRAM();
}
因为使用了内置的execUserPreload设置宏函数, 你的宏函数,在与目标系统的通信建立之后并在 C-SPY 下载你的应用程序之前,会被直接执行。
2    用文件扩展名mac保存文件。
3   启动 C-SPY 之前, 选择 Project>Options>Debugger 并单击Setup 标签。 选择Use Setup file 选项并选择你刚创建的宏文件。现在你的启动宏会在 C-SPY 启动序列执行过程中装载。

启动调试器
你可以有两种做法启动调试器:

Download and Debug 启动 C-SPY 并加载当前的项目到目标系统。
Debug withoutDownloading 启动 C-SPY 不用重新加载当前的项目到目标系统。假定代码映像已经在目标上,因此这条命令对仿真器不起作用。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:348
  • 最近打卡:2025-05-02 08:34:59

7

主题

281

回帖

1055

积分

金牌会员

积分
1055
发表于 2025-4-13 22:31:45 | 显示全部楼层
你可以加载多个调试文件(映像) 到目标系统。在 IDE 中加载附加的调试文件, 选择 Project>Options>Debugger>Images。 这意味着整个程序是由几个映像组成的。 例如, 你的应用 (一个映像) 是由引导加载程序 (另一个映像)启动的。 应用程序映像和引导加载程序是由不同的项目构建并产生的不相关的输出文件。
C-SPY 伴随应用程序加载后启动。
截图202504132232382802.jpg
C-SPY 必须读取目标系统来更新窗口的内容 ( 需要更新的窗口,例如内存和追踪窗口)这在调试的时候会影响响应时间。如果你有几个窗口同时打开,而响应时间太长(尤其是应用在硬件上执行), 就关闭一两个窗口来缩短响应时间。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:348
  • 最近打卡:2025-05-02 08:34:59

7

主题

281

回帖

1055

积分

金牌会员

积分
1055
发表于 2025-4-13 22:34:17 | 显示全部楼层
退出C-SPY:
  单击Debug 工具条上的Stop Debugging 按钮。
执行你的应用
你可以在 Debug 菜单上或Debug工具条上找到执行命令,诸如:

Step Over 执行下一条语句, 函数调用, 或指令, 不进入 C/C++ 函数或汇编语言子程序。


Step Into 执行下一条语句,  或指令, 进入 C/C++ 函数或汇编语言子程序。

NextStatement 直接执行下一条C/C++ 语句,不用停在单个函调用上。
你还可以在菜单和工具条上找到命令,如Go, Break, Reset, Run to Cursor, Autostep, 等。
C-SPY 允许与大部分其它调试器相比单步更精确,因为它不是面向行的而是面向语句的, 是因为单步断点。能够单步进入单个函数调用,这个函数调用是较复杂的语句的一部分,在你使用包含许多嵌套函数调用的C 源代码时特别有用。对于 C++ 也很有用, 它往往会有很多隐性函数调用,例如构造函数, 析构函数, 赋值运算符和其他用户定义的运算符。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:348
  • 最近打卡:2025-05-02 08:34:59

7

主题

281

回帖

1055

积分

金牌会员

积分
1055
发表于 2025-4-13 22:36:27 | 显示全部楼层
查看函数调用:1  选择View>Call Stack打开调用堆栈窗口。 显示当前函数在顶部的C/C++函数调用堆栈。双击任意函数, IDE中所有受影响的窗口的内容更新,显示该特定的调用帧的状态。
截图202504132237182836.jpg
      一般来说,这有助于两个目的:
●   确定哪段上下文中调用了当前的函数。
●    追踪变量或参数不正确的值的根源,如此在调用链中定位该函数问题出在哪里。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:348
  • 最近打卡:2025-05-02 08:34:59

7

主题

281

回帖

1055

积分

金牌会员

积分
1055
发表于 2025-4-13 22:39:44 | 显示全部楼层
在反汇编模式中调试:选择View>Disassembly 打开反汇编窗口, 如果还没打开的话。你将看到与当前C语句对应的汇编语言代码。
反汇编模式使你精确地一次一条汇编指令地执行应用程序。换句话说, C/C++ 模式一次一条语句或一个函数地执行你的应用程序。无论你用什么模
式调试,你都可以显示并改变寄存器和内存的内容。

截图202504132238599973.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:348
  • 最近打卡:2025-05-02 08:34:59

7

主题

281

回帖

1055

积分

金牌会员

积分
1055
发表于 2025-4-13 22:40:20 | 显示全部楼层
切换模式:
你想使用什么模式,就用鼠标指针激活你的编辑器或者反汇编窗口。
查看代码覆盖范围信息:
右键单击反汇编窗口并选择Code Coverage>Enable然后在上下文菜单 选择Code Coverage>Show。绿色方块标注着已经执行过的代码。也可以查看 代码覆盖 第56页。
查看变量
C-S PY允许你在源代码中监视变量或表达式, 以便你执行应用程序时持续追踪它们的值。你可以有几种方法查看一个变量:
提示条监视提供最简单的方式在编辑窗口中查看变量的值或者较复杂的表达式。只要用鼠标指到该变量。值就显示在变量的旁边。
局部窗口, View 菜单提供,自动显示局部变量, 也就是, 当前在用的函数的自动变量和函数参数。
监视窗口, View 菜单提供,允许你监视 C-SPY 表达式和你选择的变量的值。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:348
  • 最近打卡:2025-05-02 08:34:59

7

主题

281

回帖

1055

积分

金牌会员

积分
1055
发表于 2025-4-13 22:41:59 | 显示全部楼层
实时监视窗口,View 菜单提供, 执行应用时重复采样并显示表达式的值。表达式里的变量必须是静态分配的,就像全局变量。 请注意这个窗口要求目标系统支持程序执行期间读取内存。
静态窗口,View 菜单提供, 自动显示变量静态存储期间的值。另外, 你可以自己选择这样的变量来显示。
自动窗口, View 菜单提供,自动选择显示当前语句或附近的变量和表达式。
快速查看窗口,精准控制何时评估或监视一个变量或表达式值的快速方法。
收集追踪数据,由驱动专用的菜单提供, 可以收集一系列目标系统中的事件, 通常是已执行的机器指令。根据你的目标系统,可以收集其他类型的追踪数据。例如,对内存的读写访问,以及C-SPY表达式的值。 另见 追踪 第 59 页。
注意:  当优化级别使用了None时, 所有非静态变量在其整个作用域一直存活,正因为如此,一直可以调试到该变量。当使用了较高等级的优化时, 调试变量可能就不会完全做到。
你可以增加,修改,删除表达式,以及改变显示格式。所有窗口中的操作命令都提供有上下文菜单。支持窗口之间合适的拖拽。
查看变量的值:
1    例如, 选择 View>Watch 打开监视窗口。
2   遵循下面的步骤选择变量:
●   单击监视窗口里的虚线框。
●    在出现的输入字段中, 输入变量名并按下回车键。
●    还可以从编辑窗口拖拽一个变量到监视窗口。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:348
  • 最近打卡:2025-05-02 08:34:59

7

主题

281

回帖

1055

积分

金牌会员

积分
1055
发表于 2025-4-13 22:43:22 | 显示全部楼层
此例中, 监视窗口显示了当前变量的值i 和 Fib数组。 你可以展开 Fib 数组查看它更多细节。








截图202504132243483509.jpg

1    要从监视窗口删除一个变量,选它并按下删除键。


回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 22:11 , Processed in 0.377012 second(s), 102 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表