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_HOLDPTHDB_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_FLAG_HOLD标志被设置时,才支持该函数。

pthdb_session_stop_tid函数会通知 pthread 调试库,后者会通知 pthread 库停止调试器的线程的 tid。

注意:只有当PTHDB_FLAG_HOLD标志被设置时,才支持该函数。

pthdb_session_commit_tid 会报告后续的内核线程标识符,必须继续使用这些标识符才能提交保持和解除保持的更改。 此函数一次报告一个 tid。 如果列表为空或已到达列表末尾,则报告PTHDB_INVALID_TID。 cmd参数可以是 "pthdb_list_next或 "pthdb_list_first,如果输入 "pthdb_list_first,则内部计数器将被重置,并报告列表中的第一个 tid。

注意:只有当PTHDB_FLAG_HOLD标志被设置时,才支持该函数。

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 库中出错。