Hexagon GDB Debugger介绍(9)

202 篇文章 2 订阅

2.8.9 调试 RTOS 应用程序

当实时操作系统 (RTOS) 用作程序执行环境的一部分时,调试器可以显示与 RTOS 相关的信息。

info hexagon-rtos
显示 RTOS 线程信息。 对于每个内存保护域,列出以下信息:
a.地址空间标识符(asid)
b.软件线程数
c.线程信息

i.线程名称
ii. 软件线程数
iii.线程优先级值
iv. 正在运行的线程的线程号(TNUM)(可选)
v.线程状态(RUNNING、READY、WAITING、STOPPED、HAALTED)
vi. 线程被阻塞的 RTOS 资源(例如,互斥锁或消息通道)(如果状态为 WAITING )
vii.L4 等待代码(在括号中显示为线程状态值的后缀)

infohexadecimal-rtos 显示的信息示例:

asid: 1 Thread Counts: 0x5
Name: roottask, Thread no: 0x104001, Priority: 0xfb, Status:
WAITING(0xffffffff),
Name: qmutex_server, Thread no: 0x114001, Priority: 0xff,
Status: WAITING(0xffffffff),
Name: qmsgq_server, Thread no: 0x118001, Priority: 0xfd,
Status: WAITING(0xffffffff),
Name: qtimer_server, Thread no: 0x11c001, Priority: 0xfc,
Status: WAITING(0xffffffff),
Name: qtimer_int, Thread no: 0x120001, Priority: 0xfe,
Status: WAITING(0xffffffff),
asid: 2 Thread Counts: 0x1
Name: thread_test.reloc, Thread no: 0x10c001, Priority:
0x64, TNUM: 0, Status: RUNNING(0x2),
注意:
线程状态 STOPPED 表示该线程已被删除。 HALTED 表示发生了页面错误。
L4 等待代码主要用于调试 RTOS 内核。

info msg-channels

显示 RTOS 消息通道信息。 对于每个消息通道,列出以下信息:
❒ 频道 ID
❒ 连接到通道的消息队列
❒ 在通道上等待的接收线程

info msg-queue msgq_name

显示有关指定 RTOS 消息队列的信息。 对于指定的消息队列,列出以下信息:

❒ 消息队列优先级
❒ 队列中的最大消息大小
❒ 已连接消息通道的通道 ID
❒ 队列中的消息数
❒ 特定于消息的信息(类型、大小、缓冲区指针)

要获取消息队列的名称,请使用 info msg-channels 命令列出所有消息队列的名称。

info mutex mutex_ID

显示有关指定 RTOS 互斥锁的信息。 对于指定的互斥锁列表,以下信息:
❒ 互斥类型
❒ 持有互斥体的线程
❒ 互斥锁计数
❒ 等待互斥锁的线程

要获取互斥锁的 ID,请使用 info threads 命令列出线程被阻塞的互斥锁。 或者,打印传递给 RTOS 函数 qmutex_lock 或 qmutex_unlock 的互斥对象。

info timers

显示 RTOS 定时器信息。 对于每个计时器列出以下信息:
❒ 定时器类型(一次性或定期)
❒ 定时器到期前的剩余时间
❒ 有关定时器消息队列的信息

2.9 停止和继续

使用调试器的主要目的是让您可以在程序终止之前停止它; 或者,如果您的程序遇到问题,您可以调查并找出原因。

在调试器内部,您的程序可能会因多种原因而停止,例如断点或在调试器命令(例如 step )之后到达新行。 然后,您可以检查和更改变量、设置新断点或删除旧断点,然后继续执行。 通常,调试器显示的消息提供了对程序状态的充分解释; 您也可以随时明确请求此信息。

info program

显示有关程序状态的信息:程序是否正在运行,以及它为什么停止。

2.9.1 断点、观察点和捕捉点

只要到达程序中的某个点,断点就会使您的程序停止。 对于每个断点,您可以添加条件以更详细地控制程序是否停止。 您可以使用 break 命令及其变体(参见第 2.9.1.1 节)设置断点,以通过行号指定程序应该停止的位置、函数名称或程序中的确切地址。

您可以安排让程序中的值在调试器在断点处停止时自动显示。 见第 2.12.6 节。

您还可以安排在调试器在断点处停止时调用 Tcl 脚本函数。 见第 2.9.1.7 节。

在某些开发平台中,您可以在运行可执行文件之前在共享库中设置断点。 HP-UX 系统有一个小限制:您必须等到可执行文件运行才能在程序未直接调用的共享库例程(即作为 pthread_create 调用中的参数的例程)中设置断点。

观察点是一个特殊的断点,它在表达式的值发生变化时停止您的程序。 您必须使用不同的命令来设置观察点(请参阅第 2.9.1.2 节)。 除此之外,您可以像管理任何其他断点一样管理观察点:使用相同的命令启用、禁用和删除断点和观察点。

捕获点是另一个特殊的断点,它在发生某种事件时停止您的程序,例如抛出 C++ 异常或加载库。与观察点一样,您可以使用不同的命令来设置捕获点(请参阅第 2.9.1.3 节)。与观察点一样,您可以像管理任何其他断点一样管理捕获点。

创建时,调试器会为每个断点、观察点或捕获点分配一个编号;这些数字是从 1 开始的连续整数。在许多用于控制断点各种功能的命令中,您使用断点编号来说明要更改哪个断点。每个断点都可以启用或禁用;如果禁用,它对您的程序没有影响,直到您再次启用它。

一些命令接受一系列要操作的断点。断点范围可以是单个断点编号,例如 5 ,也可以是两个这样的编号,按升序排列,由连字符分隔,例如 5-7 。当一个断点范围被赋予一个命令时,该范围内的所有断点都会被操作。

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

weixin_38498942

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值