Oracle Solaris Studio 12.2 发行版的新增功能

dbx

已知的 dbx 问题和解决方法

  1. 当 dbx 连接到进程时发生数据收集问题

    如果将 dbx 连接到一个正在运行的进程,但是没有预先装入收集器库 libcollector.so,将发生一系列错误。

    • 无法收集任何跟踪数据:同步等待跟踪、堆跟踪或 MPI 跟踪。跟踪数据是通过对各个库执行插入操作而收集的。如果没有预先装入 libcollector.so,将无法执行插入操作。

    • 如果在 dbx 连接到进程后程序安装了一个信号处理程序,并且该信号处理程序不传递 SIGPROF 和 SIGEMT 信号,则分析数据和抽样数据将会丢失。

    • 如果程序使用异步 I/O 库 libaio.so,则基于时钟的分析数据和抽样数据将会丢失,因为 libaio.so 需要使用 SIGPROF 来执行异步取消操作。

    • 如果程序使用硬件计数器库 libcpc.so,则硬件计数器溢出分析实验将会遭到破坏,因为收集器和程序都在使用该库。如果在将 dbx 连接到进程后装入了硬件计数器库,只要通过广义搜索而不是在 libcpc.so 中搜索来解析对 libcpc 库函数的引用,硬件计数器实验即可顺利进行。

    • 如果程序调用 setitimer(2),则由于收集器和程序同时使用定时器,可能会使基于时钟的分析实验中断。

  2. dbx 在调试 Java 代码时可能会崩溃

    如果从 dbx shell 内部发出一个 cd 命令,或者设置 CLASSPATH 环境变量或 CLASSPATHX 环境变量,dbx 可能会因分段错误而崩溃。

    解决方法:

    • 请勿执行上述任何操作。

    • 在执行上述任何操作前,请删除所有监视(显示)。

  3. dbx 在重新调试 Java 代码时可能会崩溃

    在 Java 代码的一行内发出两条 debug 命令可能会导致 dbx 崩溃。

  4. 如果调试应用程序与生成应用程序时所用的 J2SE 不同,dbx 会抛出异常。

    如果调试应用程序与生成应用程序所用的 J2SE 技术版本不同,dbx 会抛出异常。

  5. 由于 RTC 预监视分配而报告伪 RUA 错误

    在具有多线程程序的不寻常情况下,当运行时检查 (runtime checking, RTC) 检测到对 RTC 开始监视内存分配之前分配的与线程有关的内部数据的访问时,会报告伪 RUA 错误。由于这些情况是正常线程切换行为的一部分,因此可以使用 dbx suppress 命令放心地忽略这些伪 RUA 报告。

dbx 限制和不兼容情况

Oracle Solaris Studio 12.2 dbx 有以下限制: