Hexagon TRACE32 使用指南(4)
7 调试多线程应用程序
7.1 概述
本章介绍用于调试多线程应用程序的 ISDB 寄存器。这些寄存器控制以下事件:
- 当硬件或软件断点发生时,哪些硬件线程进入调试模式
- 当外部恢复请求发生时,哪些硬件线程恢复
7.2 IDSB 调试控制寄存器
表 7-1 列出了用于控制多线程应用程序调试的 ISDB 寄存器。
每个 6 位寄存器字段对应六个硬件线程(编号为 0-5,其中 0 对应每个寄存器字段中的 LSB)。对于这些字段中的每一位:
- 0:未指定相应的硬件线程
- 1:指定了相应的硬件线程
这些寄存器字段的默认设置为 111111。
注意 使用寄存器字段来控制硬件线程使它们能够进入调试模式或恢复执行在团队中。
8 在软件模拟器上调试应用程序
8.1 概述
TRACE32 通常用于在硬件调试平台上调试程序。但是,当与 MCD 软件扩展一起使用时,TRACE32 可用于调试在 Hexagon 处理器指令集模拟器 (hexagon-sim) 上运行的程序。
本章介绍如何使用 TRACE32 和 MCD 在模拟器上调试程序。
注意
本章不打算作为 TRACE32 或模拟器的文档——它假定用户对这两种工具都有经验。
有关详细信息,请参阅文档 Hexagon Simulator 用户指南
8.2 MCD
多核调试 (MCD) 扩展是一个动态库,用作 TRACE32 和模拟器之间的接口。
- 它支持完整的多核调试功能。
- 它可用于 TRACE32 的 Windows 和 Linux 版本。
8.3 安装
TRACE32必须专门配置加载MCD动态库文件。这是使用 TRACE32 配置文件完成的,该文件指定 MCD 动态库的文件名(以及可选的路径名)。
Hexagon 处理器软件开发工具提供了以下示例文件来支持 MCD 的使用:
- MCD 动态库文件
- TRACE32 配置文件
- TRACE32 启动脚本文件
表 8-1 列出了工具发布目录中的文件名及其位置。
动态库文件的名称在示例配置文件中指定了以下命令:
PBI=MCD hexagon-mcd64.so (Linux version)
PBI=MCD hexagon-mcd64.dll (Windows version)
可以通过两种方式指定动态库文件的路径名:
系统环境变量(表 8-2)
TRACE32 配置文件
表8-2列出了设置为包括动态库路径名的路径变量。
或者,可以修改 TRACE32 配置文件中的 MCD 命令以包含动态库文件的完整路径。例如:
PBI=MCD C:\Qualcomm\HEXAGON_Tools\version\Tools\bin\hexagon-mcd64.dll
注意 启动脚本文件被指定为用于启动 TRACE32 的命令中的命令参数(第 8.4.1 节)。
8.4 快速入门指南
MCD 可以启动模拟器的新实例,或连接到现有的模拟器实例。
MCD 扩展在 TRACE32 中使用 PRACTICE 命令 SYSTEM.MCDCONFIG… 配置。
注意 SYSTEM.MCDCONFIG 必须在尝试 SYSTEM.MODE.ATTACH 命令之前执行。
8.4.1 使用配置文件启动
TRACE32/MCD 以下命令使用 Hexagon 处理器工具版本提供的示例配置和脚本文件启动 TRACE32 和 MCD。
Linux:
t32mqdsp6 -c <install_root>/Examples/TRACE32/Linux_Example/linux.cfg
-s <install_root>/Examples/TRACE32/Linux_Example/hexagon.cmm
Windows:
t32mqdsp6.exe -c <install_root>\Examples\TRACE32\Windows_Example\win.cfg
-s <install_root>\Examples\TRACE32\Windows_Example\hexagon.cmm
8.4.2 使用 SYSTEM.MCDCONFIG 配置 MCD
使用以下命令在 TRACE32 中配置 MCD:
SYSTEM.MCDCONFIG [arch=version]
[hostname=hostname]
[port=port_number]
[debug=mask]
[simargs=valid_sim_arguments]
[interactive=(yes|no)]
命令参数定义如下:
arch
可选的 arch 参数指定要模拟的 Hexagon 处理器版本。参数值指定为 vX,其中 X 是模拟器选项 -mvX 中指定的处理器版本之一。
例如,将 v5a_256 指定为 arch 参数会导致 MCD 使用选项 -mv5a_256 启动模拟器。有关模拟器选项的更多信息,请参阅 Hexagon 模拟器用户指南。
arch 参数必须与正在调试的可执行文件的处理器体系结构相匹配。
注意 附加到现有模拟器时会忽略 arch 参数。作为使用 arch 的替代方法,可以使用模拟器选项 -mvX 在 simargs 参数中指定 Hexagon 处理器版本。
hostname
可选的主机名参数指定模拟器实例已经在其上运行的机器的主机名。可以指定任何有效的主机名(包括“localhost”)。
hostname 用于将 TRACE32 连接到 Hexagon 处理器模拟器的现有(即已经运行)实例。该实例可能正在当前机器或另一台机器上运行。
注意 如果指定了主机名,则还必须指定端口。
port
可选端口参数指定将用于与模拟器实例通信的 TCP/IP 端口。端口号值可以是 strtoul() 可接受的任何数字,并且不违反 TCP/IP 端口号的标准规则。
端口用于将 TRACE32 连接到模拟器的现有实例。如果模拟器独立于 TRACE32 启动,则必须指定。
端口也用于在运行 TRACE32 的同一台机器上启动模拟器实例,但使用默认值 (808368) 以外的端口号。
在这种情况下,指定了端口参数,但没有指定主机名。在需要避免端口号冲突的情况下(例如,在同一台主机上运行多个 MCD 扩展调试器,每个调试器通过不同的端口进行通信时),指定备用端口号。
注意
作为使用端口的替代方案,可以使用Simulator选项-g在Simargs参数中指定端口号。
debug
可选的调试参数选择性地控制MCD扩展本身对诊断信息的打印。
Debug指定一个掩码值,该值确定了打印的信息类型。蒙版值位定义如下:
/* DEBUG control, settable with SYS.MCDCONFIG debug=xx */
#define REGISTER_OPS 1 // register read/write message
#define MEMORY_OPS 2 // memory read/write msgs
#define STATUS_REPLY 4 // status reply msgs from simu
#define FLOW_MSGS 8 // program flow messages
#define PACKET_FLOW 0x10 // low-level packet diagnostics
#define ERROR_MSGS 0x20 // error states
#define TXLIST_MSGS 0x40 // transmit list diags
#define TRIGGER_OPS 0x80 // breakpoint diags
#define ALL_MSGS 0xFF // all of the above
诊断信息被写入 stderr,可以通过在启动 TRACE32 时将其重定向到文件来捕获。
例如(在 Windows 上):
t32mqdsp6.exe -c win.cfg win.cmm 2 > my_debug_output.txt
结果文件是ASCII文本。
debug 用于调试 MCD 扩展本身(如果怀疑它是系统错误的来源,这将很有用)。生成的诊断文件可以深入了解特定问题的原因;但是,它主要供 MCD 维护人员使用。
注意
生成的诊断文件会快速增长并变得非常大。
使用调试时,请考虑尽量减少打开的 TRACE32 窗口的数量,因为每个打开的窗口都会向模拟器产生恒定的流量。
interactive
可选的交互式参数控制发生错误时是否出现弹出窗口(例如语法错误或过早的模拟器退出)。
Interactive接受以下值:
- yes - 启用弹出窗口(默认)
- no - 禁用弹出Windows
注意
弹出窗口仅在Windows中支持。
使用 MCD 参数
启动新模拟器实例的最简单且最不容易出错的方法是仅使用 simargs 参数。
附加到现有模拟器实例的最简单方法是仅指定端口参数和可选的主机名参数(如果未指定,则默认为“localhost”)。然后,在 MCD 连接到模拟器后,它将向模拟器查询所有必要的详细信息。