下列问题涉及内核调试程序。
在 x86 平台上的 Solaris 10 OS 中使用 dbx 调试器调试可通过信号处理程序发出或传送信号的程序时,dbx 可能会收到来自内核的意外的 SIGTRAP 信号,该信号会导致调试器挂起。在以下情形下可能会发生这种情况:当 dbx 单步执行时、遇到断点时、搜集运行时检查 (runtime checking, RTC) 数据时,或者执行任何其他依赖于信号捕获的活动时。
在某些情况下,当 dbx 挂起时会显示意外的 SIGTRAP 信号警告。例如:
dbx: internal warning: unexpected SIGTRAP! |
在其他情况下,dbx 指示收到 SEGV 信号。例如:
signal SEGV (no mapping at the fault address) in main at line 29 in file "test.c" |
在这种情况下,当用户键入 cont -sig SEGV 命令继续执行 SEGV 信号时,dbx 会显示意外的 SIGTRAP 警告。
安装内核修补程序 127112 后,此错误会引入到 x86 平台上的 Solaris 10 OS 中。
解决方法:请不要安装内核修补程序 127112。如已经安装该内核修补程序,请将其卸载。有关此错误的更多信息,请参见 http://developers.sun.com/sunstudio/support/news/index.jsp 上的 "Sun Studio Support News" 页。
在处理某些 64 位可执行文件和库时,dbx 调试程序因内存访问失败而终止。但是,该问题并不影响这些 64 位对象的正常使用。将显示一条类似以下示例的错误消息:
dbx: internal error: signal SIGBUS (invalid address alignment) |
解决方法:改为使用 mdb 调试程序或 Solaris 动态跟踪工具。这些替代工具可以诊断使用 64 位对象的进程。
运行 Solaris 内核调试程序以调试活动系统的系统可能循环,并显示不完整的错误消息。当 OpenBoot PROM 的主 CPU 更改时发生此循环。系统复位即可恢复系统操作。不过,对原始故障的跟踪将会丢失。因此,无法执行对致命复位的诊断。
解决方法:当系统处于 PROM 级别时,会显示 OpenBoot 的 ok 提示符。在具有多个 CPU 的系统中,ok 提示符前面是括在花括号中的数字。此数字表示系统中的活动 CPU。要在处于 PROM 级别时运行调试会话,请执行以下步骤:
通过键入以下命令,将 pil 提高到 f:
{0} ok h# 0f pil! |
使用 switch-cpu 命令,选择性地从当前活动的 CPU 切换到另外的 CPU。例如,要从 CPU #0 切换到 CPU #1,请键入以下命令:
(0) ok 1 switch-cpu |
现在,ok 提示符前面是要切换的 CPU 的编号。
{1} ok |
运行调试程序。
在调试程序会话结束时,发出 reset-all 命令以使系统恢复为正常使用。
确保将系统升级到 OpenBoot PROM 的最新版本。