发新帖我要提问
12
返回列表
打印
[开发工具]

Keil常用的调试操作

[复制链接]
楼主: uiint
手机看帖
扫描二维码
随时随地手机跟帖
21
beacherblack| | 2025-3-14 14:21 | 只看该作者 回帖奖励 |倒序浏览
进入调试模式

点击工具栏中的“Debug”按钮(或使用快捷键),进入调试模式。
复位操作

功能:将程序复位到起始状态,类似于硬件上的复位按键操作。
操作方式:在调试工具栏中点击“Reset”按钮。
全速运行

功能:使程序从当前位置开始全速执行,直到遇到断点或其他停止条件。
操作方式:在调试工具栏中点击“Run”按钮(或使用快捷键F5)。
停止运行

功能:终止正在全速运行的程序,使程序暂停在当前执行位置。
操作方式:在调试工具栏中点击“Stop”按钮(或使用快捷键)。
单步调试

功能:逐条执行程序指令,以便精确观察程序的执行流程和变量变化。
操作方式:在调试工具栏中点击“Step”按钮(或使用快捷键F11),如果当前指令是函数调用,则会进入函数内部执行;如果当前指令不是函数调用,则执行下一条指令。
单步跳过

功能:与单步调试类似,但会跳过函数调用,直接执行函数调用后的下一条指令。
操作方式:在调试工具栏中点击“Step Over”按钮(或使用快捷键F10)。
单步返回

功能:当程序处于函数内部时,执行完当前函数的剩余部分并返回到调用该函数的位置。
操作方式:在调试工具栏中点击“Step Out”按钮(或使用快捷键Ctrl+F11)。
运行到光标处

功能:使程序直接运行到光标所在的代码行。
操作方式:在调试工具栏中点击“Run to Cursor Line”按钮(或使用快捷键Ctrl+F10)。
插入/移除断点

功能:在程序的特定位置设置断点,以便程序执行到该位置时自动暂停,方便进行调试和观察。
操作方式:在代码编辑窗口的左侧边缘,单击鼠标左键可在当前行插入断点(断点以红圆表示);再次点击同一位置的断点可将其移除。也可以右键点击断点位置,选择“Remove All Breakpoints”来删除所有断点。

使用特权

评论回复
22
claretttt| | 2025-3-14 16:02 | 只看该作者
通过“Watch Window”窗口添加感兴趣的变量,实时观察这些变量值的变化。

使用特权

评论回复
23
robertesth| | 2025-3-14 21:58 | 只看该作者
设置断点:在代码中设置断点,程序运行到断点处会暂停,方便观察和修改变量值。
单步执行(Step Into)‌:逐条执行代码,进入函数内部。
单步跳过(Step Over)‌:逐条执行代码,但不进入函数内部。
单步退出(Step Out)‌:从当前函数中逐条执行返回到调用函数。
查看和修改变量值:在调试过程中,可以查看和修改变量的值,以验证程序逻辑或改变程序流向。
观察窗口(Watch Window)‌:添加变量到观察窗口,实时监控变量的变化。
寄存器窗口:查看和修改CPU寄存器的值。
内存窗口:查看和修改内存地址的内容。
调用堆栈窗口:查看当前函数调用的堆栈信息。
硬件断点:使用硬件断点而不是软件断点,这在某些情况下可以提高调试效率。
条件断点:设置条件断点,只有当特定条件满足时,程序才会在断点处暂停。
自动变量窗口:查看当前作用域内的自动变量。
逻辑分析仪:使用逻辑分析仪功能,观察和分析数字信号的波形。
性能分析:使用性能分析工具,评估程序的运行效率。
远程调试:通过JTAG或SWD接口与目标硬件连接,进行远程调试。
保存和加载调试状态:保存当前的调试状态,以便后续继续调试。

使用特权

评论回复
24
cemaj| | 2025-3-15 01:01 | 只看该作者
逐步执行代码,观察每一步的变化。

使用特权

评论回复
25
claretttt| | 2025-3-15 04:15 | 只看该作者
在调试过程中,可以通过 “Watch” 窗口查看变量的值。在 “Watch” 窗口中输入要查看的变量名,即可实时显示变量在程序运行过程中的值。也可以直接在代码编辑器中,将鼠标悬停在变量上,查看变量的当前值。

使用特权

评论回复
26
hudi008| | 2025-3-15 08:12 | 只看该作者
右键点击已设置的断点,选择 “Breakpoint Properties”,在弹出的对话框中可以设置条件断点。例如,设置当某个变量满足特定条件时才触发断点,这样可以更精准地定位程序中的问题。

使用特权

评论回复
27
mmbs| | 2025-3-15 10:52 | 只看该作者
在代码编辑器中,点击要设置断点的代码行左侧的空白处,会出现一个红点,表示断点已设置。也可以通过右键点击代码行,选择 “Insert/Remove Breakpoint” 来设置或删除断点。当程序运行到断点处时,会暂停执行,方便查看当前程序的状态。

使用特权

评论回复
28
51xlf| | 2025-3-15 12:40 | 只看该作者
执行跟踪与性能分析              

使用特权

评论回复
29
robincotton| | 2025-3-15 14:26 | 只看该作者
寄存器查看:
在调试过程中,可以打开“Registers”窗口查看CPU寄存器的状态和变化情况。
内存查看:
“Memory”窗口允许用户查看特定地址范围内的内存内容,对于分析数据存储和指针问题特别有用。

使用特权

评论回复
30
elsaflower| | 2025-3-15 16:14 | 只看该作者
使用 “Memory” 窗口可以查看内存中的数据。在 “Memory” 窗口中输入内存地址,即可查看该地址处的内存值,还可以以不同的格式(如字节、字、双字等)显示内存数据,有助于分析数组、结构体等数据在内存中的存储情况。

使用特权

评论回复
31
uptown| | 2025-3-15 17:56 | 只看该作者
查看变量值:在调试过程中,可以通过 “Watch” 窗口查看变量的值。在 “Watch” 窗口中输入要查看的变量名,即可实时显示该变量在程序运行过程中的值的变化。
添加表达式:除了查看单个变量的值,还可以在 “Watch” 窗口中添加表达式,例如 “a + b”“x > 10” 等,Keil 会计算并显示表达式的值。
自动窗口:“Auto” 窗口会自动显示当前语句中使用到的变量及其值,方便快速查看相关变量的状态。
内存窗口:可以通过 “Memory” 窗口查看内存中的数据。在 “Memory” 窗口中输入内存地址,即可查看该地址处的内存值,还可以以不同的格式(如字节、字、双字等)显示内存内容。

使用特权

评论回复
32
claretttt| | 2025-3-15 19:41 | 只看该作者
内存查看窗口(Memory):可以输入想要查看内存的起始地址来查看该地址处的内存数据。这对于检查内存中的数据变化非常有用。
系统视窗(System Viewer):用于查看当前单片机外设及内核寄存器的值。在调试外设底层时经常会使用到该窗口,可以直接修改外设寄存器的值(部分只读寄存器无法修改)。
调用栈窗口(Call Stack Window):用于查看当前程序的调用关系。当出现硬件错误异常时,可以快速定位到触发异常的位置。
寄存器窗口(Register Window):用于查看当前内核的相关寄存器值,如SP(栈指针)、LR(链接寄存器)、PC(程序计数器)等。这些寄存器对于理解程序的当前状态和执行流程非常重要。
反汇编调试窗口(Disassembly Window):显示当前执行的汇编代码,与源代码视图同步。这有助于理解C/C++代码是如何转换为处理器指令的,以及在调试时实际执行的指令。
命令窗口(Command Window):可以输入一些控制命令来执行调试操作,如设置断点、访问变量寄存器、数据转换等。同时,该窗口也显示编译器或调试器的输出信息。

使用特权

评论回复
33
uytyu| | 2025-3-15 21:46 | 只看该作者
单步调试(F11):每次点击按钮,程序执行一行代码。如果遇到函数,会进入函数内部。
单步跳过调试(F10):每次点击按钮,程序执行一行代码。如果遇到函数,不会进入函数内部,而是直接运行函数并跳到下一条语句。

使用特权

评论回复
34
lihuami| | 2025-3-16 11:34 | 只看该作者
复位(Reset):点击复位按钮后,程序将回到最开始处,即复位中断处理函数处。这相当于硬件上的复位操作,有助于将程序重置到初始状态。
全速运行(Run):点击全速运行按钮后,程序将开始正常执行,直到遇到断点或程序结束。这有助于快速查看程序的运行情况。
停止运行(Stop):当程序在全速运行时,点击停止运行按钮可以中止当前正在运行的程序。这有助于在需要时暂停程序执行,以便进行进一步的调试。
单步执行(Step Into):每点击一次单步执行按钮,程序将执行一条语句。如果遇到函数,则会进入函数内部执行。这是调试程序时最常用的功能之一,有助于逐步跟踪程序的执行过程。
单步跳过(Step Over):在C语言窗口中,单步跳过操作将按单条语句执行,但遇到函数时不会进入函数内部,而是直接全速运行函数并跳到下一条语句。这对于检查代码逻辑和流程非常有帮助,同时可以避免进入不必要的函数内部。
单步返回(Step Out):当程序运行在函数内部时,点击单步返回按钮将执行完当前函数的剩余语句,然后跳出该函数体,准备执行下一条语句。这有助于快速跳过一些不必要的代码,提高调试效率。
运行到光标处(Run to Cursor):点击此按钮后,程序将直接运行到光标所在的位置。这有助于快速定位到需要调试的代码段,以便进行详细的检查和修改。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则