Solaris 模块调试器指南

exec 交互

如果受控的用户进程成功执行 exec(2),则可通过 ::set -o follow_exec_mode 选项控制调试器的行为,如命令行选项摘要中所述。如果调试器和被调试的进程 (victim process) 具有相同的数据模型,则“停止”和“跟随”模式可确定 MDB 是自动继续执行目标还是返回到 exec 后面的调试器提示符下。如果调试器和被调试的进程具有不同的数据模型,则“跟随”行为导致 MDB 使用相应的数据模型自动地重新执行 MDB 二进制代码并重新附加到该进程,从 exec 返回时仍然被停止。 并非所有在此重新执行中生成的调试器状态都会保留。

如果在 32 位数据模型中被调试的进程对 64 位程序执行 exec,则 MDB 在“停止”模式下将返回到命令提示符,但调试器将无法再检查进程,因为现在它使用的是 64 位数据模型。要恢复调试,请执行 ::release -a dcmd,退出 MDB,然后执行 mdb -p pid 将 64 位调试器重新附加到进程。

如果在 64 位数据模型中被调试的进程执行 32 位程序,则命令提示符中将返回“停止”,但调试器将仅提供有限的功能用于检查新进程。 所有内置 dcmd 都将按照说明的那样运行,但是可装入的 dcmd 则不会,因为它们不会执行结构的数据模型转换。 如前所述,为了恢复完整的调试功能,用户应该释放调试器再将其重新附加到进程。