Solaris 模块调试器指南

执行控制

MDB 提供了一种简单的执行控制模型:可以使用 ::run 从调试器内启动目标进程,或者MDB 可以使用 :A::attach-p 命令行选项(请参见第 5 章,内置命令)附加到现有进程。或者,可以使用 kmdb 引导内核,也可以在以后装入 kmdb。在任一情况下,用户都可以指定跟踪的软件事件的列表。每次跟踪的事件在目标程序中发生时,目标中的所有线程都会停止,触发该事件的线程会被选为代表线程,并且控制返回到调试器。将目标程序设置为运行后,即可通过键入用户定义的中断字符(通常为 Ctrl-C)将控制以异步方式返回到调试器。

软件事件是指调试器所观察到的目标程序中的状态转换。例如,调试器可能会观察到程序计数器寄存器到相关值(断点)的转换或特定信号的传送。

软件事件说明符是指调试器所使用的软件事件类的说明,用于检测目标程序以便观察这些事件。 ::events dcmd 用于列出软件事件说明符。 一组标准属性与每个事件说明符相关联,如内置 dcmd::events 之下所述。

调试器可以观察各种不同的软件事件,包括断点、监视点、信号、计算机故障和系统调用。 使用 ::bp::fltbp:: sigbp::sysbp::wp 可以创建新说明符。每个说明符都具有关联的回调(要执行的 MDB 命令字符串,就好像已在命令提示符下键入了它一样)和一组属性,如内置 dcmd::events 之下所述。可以为同一事件创建任意数量的说明符,每个说明符都具有不同的回调和属性。使用 ::events dcmd 可以显示跟踪的事件和对应事件说明符的属性的当前列表。 事件说明符属性是作为内置 dcmd::events::evset dcmd 说明的一部分定义的。

内置 dcmd中所述的执行控制的内置 dcmd 始终可用,但是如果将其应用于不支持执行控制的目标,则会发出一条错误消息,表明其不受支持。