pthdb_session_committed 子例程
用途
便于检查和修改多线程应用程序的 pthread 库对象数据。
库
pthread 调试库libpthdebug.a
语法
#include <sys/pthdebug.h>
int pthdb_session_committed (pthdb_session_t session,
char ** name);
int pthdb_session_concurrency (pthdb_session_t session,
int * concurrencyp);
int pthdb_session_destroy (pthdb_session_t session)
int pthdb_session_flags (pthdb_session_t session,
unsigned long long * flagsp)
int pthdb_session_init (pthdb_user_t user,
pthdb_exec_mode_t exec_mode,
unsigned long long flags,
pthdb_callbacks_t * callbacks,
pthdb_session_t * sessionp)
int pthdb_session_pthreaded (pthdb_user_t user,
unsigned long long flags
pthdb_callbacks_t * callbacks,
char ** name)
int pthdb_session_continue_tid (pthdb_session_t session,
tid_t * tidp,
int cmd);
int pthdb_session_stop_tid (pthdb_session_t session,
tid_t tid);
int pthdb_session_commit_tid (pthdb_session_t session,
tid_t * tidp,
int cmd);
int pthdb_session_setflags (pthdb_session_t session,
unsigned long long flags)
int pthdb_session_update (pthdb_session_t session)
描述
为了便于调试多个进程, pthread 调试库支持多个会话,每个进程一个。 提供了用于初始化,破坏和定制这些会话的行为的函数。 此外,还提供了用于查询 pthread 库的全局字段的函数。 除了用于初始化会话的 "pthdb_session_init和可在会话初始化前调用的 "pthdb_session_pthreaded外,函数库中的所有函数都需要一个与初始化会话相关联的会话句柄。
pthdb_session_committed报告在保持/取消保持提交操作完成后调用的函数的符号名称。 该符号名称可用于设置断点,以便在保持/解除保持提交完成时通知调试器。 报告的实际符号名称随时可能更改。 使用以下代码在组合件中实现返回的函数名:
ori 0,0, 0 # no-op
blr # return to caller这允许调试器使用陷阱指令覆盖 no-op ,并通过单步跳过该指令将其保留在那里。 只有当PTHDB_FLAG_HOLD标志被设置时,才支持该函数。
pthdb_session_concurrency报告 pthread 库的并发级别。 并行级别为 M: N 比率,其中 N 始终为 1。
pthdb_session_destroy通知 pthread 调试库,调试器或应用程序已结束会话。 这将取消分配与会话相关的内存,并允许重新使用会话句柄。
pthdb_session_setflags更改会话的标记。 使用这些标志,调试器可以定制会话。 标志由以下值组成或一起组成:
| 项 | 描述 |
|---|---|
| pthdb_flag_gprs | 无论在库内部还是通过对调试器的回调,都应将通用寄存器包括在任何上下文读或写中。 |
| pthdb_flag_sprs | 无论在库内部还是通过对调试器的回调,都应将特殊用途寄存器包括在任何上下文读取或写入中。 |
| pthdb_flag_fprs | 无论在库内部还是通过对调试器的回调,都应将浮点寄存器包括在任何上下文读取或写入中。 |
| pthdb_flag_regs | 所有寄存器都应包含在任何上下文读取或写入中,无论是在库内部还是通过对调试器的回调。 这等同于PTHDB_FLAG_GPRS|PTHDB_FLAG_GPRS|PTHDB_FLAG_GPRS。 |
| pthdb_flag_hold | 调试器将使用 pthread 调试库挂起/取消挂起设施来阻止 pthread 的执行。 该标志不能与PTHDB_FLAG_SUSPEND 一起使用。 此标志仅应由调试器使用。 |
| pthdb_flag_suspend | 应用程序将使用 pthread 库的挂起/继续功能来阻止 pthreads 的执行。 该标志不能与PTHDB_FLAG_HOLD 一起使用。 此标志用于内省方式,仅应由应用程序使用。 注意: PTHDB_FLAG_HOLD和PTHDB_FLAG_SUSPEND只能传递给pthdb_session_init函数。 调试核心文件时,"pthdb_flag_hold和 "pthdb_flag_suspend都不应传递给 "pthdb_session_init。
|
pthdb_session_flags函数获取会话的当前标记。
pthdb_session_init函数告诉 pthread 调试库初始化一个与唯一给定用户句柄相关的会话。 pthdb_session_init将分配一个唯一的会话句柄,并将其返回给调试器。 如果应用程序的执行模式为 32 位,则调试器应将exec_mode初始化为PEM_32BIT。 如果应用程序的执行模式为 64 位,则调试器应将模式初始化为PEM_64BIT。 以上pthdb_session_setflags函数记录了这些标志。 回调参数是一个回调函数列表。 (另请参见pthdebug.h头文件) pthdb_session_init 函数会调用symbol_addrs函数获取符号的起始地址,并在 pthread 调试库中初始化这些符号的起始地址。
pthdb_session_pthreaded报告 pthread 库初始化后调用的函数的符号名称。 该符号名称可用于设置断点,通知调试器何时初始化 pthread 调试库会话,并开始使用 pthread 调试库检查 pthread 库状态。 报告的实际符号名称随时可能更改。 此函数是唯一可以在 pthread 库初始化之前调用的 pthread 调试库函数。 使用以下代码在组合件中实现返回的函数名:
ori 0,0,0 # no-op
blr # return to caller这样,调试器就可以用陷阱指令覆盖无操作指令,并通过跨步将其留在那里。
pthdb_session_continue_tid函数允许调试器在继续单步单个 pthread 或继续一组 pthread 之前,获取必须继续的线程列表。 此函数一次报告一个 tid。 如果列表为空或已到达列表末尾,则报告PTHDB_INVALID_TID。 调试器需要用内核线程继续执行任何 pthreads。 调试器负责放置停止线程和继续停止线程。 参数 "cmd可以是 "pthdb_list_next或 "pthdb_list_first;如果传递的是 "pthdb_list_first,则将重置内部计数器,并报告列表中的第一个 tid。
pthdb_session_stop_tid函数会通知 pthread 调试库,后者会通知 pthread 库停止调试器的线程的 tid。
pthdb_session_commit_tid 会报告后续的内核线程标识符,必须继续使用这些标识符才能提交保持和解除保持的更改。 此函数一次报告一个 tid。 如果列表为空或已到达列表末尾,则报告PTHDB_INVALID_TID。 cmd参数可以是 "pthdb_list_next或 "pthdb_list_first,如果输入 "pthdb_list_first,则内部计数器将被重置,并报告列表中的第一个 tid。
pthdb_session_update 会告诉 pthread 调试库更新其有关 pthread 库状态的内部信息。 每次进程停止时,应在其他 pthread 调试库函数之前调用该函数,以确保其结果可靠。
当调用pthdb_session_update函数时,或者当 list 函数报告PTHDB_INVALID_*值时,每个列表都会被重置到列表顶部。 例如,当pthdb_attr报告PTHDB_INVALID_ATTR属性时,列表会被重置到起始位置,以便下次调用时报告列表中的第一个属性(如果有的话)。
'PTHDB_INVALID_'项目的报告表示空列表或列表结束,其中'项目是这些值之一: PTHREAD、'ATTR'、'MUTEX'、'MUTEXATTR'、'COND'、'CONDATTR'、'RWLOCK'、'RWLOCKATTR、'关键或'TID。
参数
| 项 | 描述 |
|---|---|
| 会话 | 会话句柄。 |
| 用户 | 调试器用户句柄。 |
| 会话p | 指向会话句柄的指针。 |
| 名称 | 符号名称缓冲区。 |
| cmd | 重置为列表的开头。 |
| 同意 | 库并行缓冲区。 |
| 标志 | 会话标志。 |
| 国旗 | 指向会话标志的指针。 |
| 执行模式 | 调试器执行模式:32 位进程使用PEM_32BIT,64 位进程使用PEM_64BIT。 |
| 回调 | 回调结构。 |
| tid | 内核线程 ID。 |
| tidp | 内核线程 ID 缓冲区... |
返回值
如果成功,这些函数将返回PTHDB_SUCCESS。 否则,它们将返回错误值。
错误代码
| 项 | 描述 |
|---|---|
| pthdb_bad_session | 会话句柄无效。 |
| pthdb_bad_version | pthread 调试库或 pthread 库版本无效。 |
| PTHDB_BAD_MODE | 执行方式无效。 |
| pthdb_bad_flags | 会话标志无效。 |
| pthdb_bad_callback | 回调函数不足。 |
| PTHDB_BAD_CMD | 命令无效。 |
| pthdb_bad_pointer | 缓冲区指针无效。 |
| PTHDB_BAD_USER | 用户句柄无效。 |
| PTHDB_CALLBACK | 调试器回调错误。 |
| PTHDB_MEMORY | 无足够内存。 |
| PTHDB_NOSYS | 未实施函数。 |
| pthdb_not_pthreaded | pthread 库未初始化。 |
| PTHDB_SYMBOL | 找不到 pthread 库符号。 |
| PTHDB_INTERNAL | 库中出错。 |