使用调试环境 - 2023.2 简体中文

AI 引擎工具和流程用户指南 (UG1076)

Document ID
UG1076
Release Date
2023-12-04
Version
2023.2 简体中文

Vitis IDE 调试环境具有诸多基于 GUI 的传统调试环境内常见的功能特性,例如 GDB。您可在代码中添加断点、单步跳过或单步进入代码、循环或函数的特定行、检验变量状态并将其强制设为特定值。这些只是 Vitis IDE 调试环境中的一小部分功能特性。

启动Debug(调试)透视图后,您将看到其中显示的多个窗口或视图,例如,显示在右上角的Debug视图,如下图所示。调试进程期间,有多个窗口会显示调试状态,包括调用栈、位于断点处的代码、单步跳过状态、断点视图、变量视图、寄存器视图、反汇编视图和流水线视图。

Debug视图会显示所调试的核的状态。它会显示调试器停止的位置(包括哪个文件和文件的哪一行源代码),及其采取的行动(断点、单步跳过等),如下图所示。

图 1. “Debug”视图

下图显示了Breakpoints(断点)信息,包含当前设置断点。打勾的方块表示此断点已启用。单击复选标记即可将其清除并在调试期间禁用断点。这样您即可管理断点,而无需移除断点或者将其重新添加回代码中。

图 2. “Breakpoint”视图
重要:AI 引擎仿真器或者协同仿真进行调试时,每个 AI 引擎拼块都支持 4 个断点。TCF 框架默认会在 AI 引擎内核 main() 处停止。连接到 while 语句的断点会耗用两个断点资源。变通方法是将断点附加到 while 循环内部。这样仅耗用一个断点。

在源码级调试器中,您可以追踪分配给存储器或寄存器的源码变量。其位置和内容均可可视化。但启用所有最优化时,无法直接执行源码变量追踪:

  • 局部标量变量通常驻留在寄存器内,通常执行过程中在不同时间点追踪不同变量。
  • 分配给存储器的变量并不总是会直接更新。例如,在循环前,可在寄存器中加载全局变量。然后在循环内即可在寄存器中对该变量进行操作,或者在循环后仅将其重新存储到存储器中。这称为最优化冗余存储移除。
  • 同样,如果单一源码行的代码分散在最终对象代码中,那么单步执行源代码会变得困难。