2004 年 5 月 27 日更新


      Sun[tm] Studio 9：dbx 自述文件


            目录

       1. 简介
       2. 关于 Sun Studio 9 dbx
       3. 新特性和更改的特性
       4. 软件更正
       5. 问题和解决办法
       6. 限制和不兼容
       7. 文档错误

     

    ------------------------------------------------------------------------


            A. 简介

    本文档包含 Sun[tm] Studio 9 dbx 的相关信息。本文档描述了此发行版本中
    包含的新增功能以及所做的软件更正，并列出了已知问题、限制和不兼容性。
    本文档中的信息优先于此发行版本各手册中的信息。

    产品文档

        * Solaris 平台的发行说明：可以通过 Sun Studio 9 网站
          http://developers.sun.com/tools/cc/documentation/ss9_docs/release_notes.html
          获得此发行说明。发行说明中的信息会更新和扩展所有自述文件中的信
          息。
        * Linux 平台的发行说明：可以通过 Sun Studio 9 网站
          http://developers.sun.com/tools/cc/documentation/ss9_docs/release_notes.html
          获得此发行说明。发行说明中的信息会更新和扩展所有自述文件中的信
          息。
        * Sun Studio 9 文档：产品手册页、自述文件的 HTML 版本以及手册可
          以从 /installation_directory/docs/index.html 进行访问。Solaris
          平台上的缺省安装目录是 /opt/SUNWspro。Linux 平台上的缺省安装目
          录是 /opt/sun/sunstudio9。
        * IDE 文档：Sun Studio 9 IDE 所有组件的联机帮助可从 IDE 中的 [帮
          助] 菜单进行访问。
        * 开发人员资源门户：有关技术文章、代码样例、文档和知识库，请参见
          开发人员门户，网址：http://developers.sun.com/prodtech/cc。

     

    ------------------------------------------------------------------------


            B. 关于 Sun Studio 9 dbx

    dbx 是一种交互式源码级命令行调试工具。可用它以可控方式运行程序和检查
    停止运行的程序的状态。dbx 让您能够完全控制程序的动态执行，包括性能数
    据的收集。此发行版的 dbx 在下列平台上可用：

        * Solaris[tm] 操作系统：
              o SPARC&#174; Platform Edition，第 8、9 和 10 版
              o x86 平台版本，第 8、9 和 10 版
        * Linux 操作系统：
              o Sun[tm] Java Desktop System 2003
              o SuSE Linux Enterprise Server 8
              o RedHat Enterprise Linux 3

     

    ------------------------------------------------------------------------


            C. 新增功能和更改的功能

    本节描述了 dbx 的新增功能及更改功能。

    Sun Studio 9 dbx 中新增和更改了以下功能。

        * 在 Linux 平台上支持 gcc 和 g++ 编译器
        * 支持 Solaris OS、x86 Platform Edition 上的 Fortran

    dbx 的新功能不适用于使用 gcc 或 g++ 编译器编译的程序，或在 Linux 平
    台上运行的程序。有关详细信息，请参见限制和不兼容性。

    有关 Solaris 平台上其他 Sun Studio 9 组件的信息，参见《新增功能》手
    册，网址为 http://docs.sun.com。

     

    ------------------------------------------------------------------------


            D. 软件更正

    本节描述了在 Sun Studio 9 发行版本的 dbx 中修复的问题。

       1. dbx 无法打印优化 C++ 代码的注册内容或类成员
       2. bcheck 不能正确报告所有错误
       3. dbx 在对 sparcv9 代码进行运行时检查时发出错误消息 (Error 0)
       4. dbx 终止它无法控制的进程
       5. stop inclass/inobject 花费的时间比较长
       6. 64 位：大型连续堆块上的访问检查失败
       7. dbx 修复并继续导致 Pro/E 因为 SIGILL 而崩溃

       1. dbx 无法打印优化 C++ 代码的注册内容或类成员

          在 Sun Studio 8 中修复。dbx 现在可以打印用 -g -xO4 编译的 C++
          代码的注册表（例如，$o7）和类成员（例如，foo.x）。

       2. bcheck 不能正确报告所有错误 (4460648)

          对丢失的堆上的数据结构的出站指定现在被运行时检查所捕获。

       3. dbx 在对 sparcv9 代码进行运行时检查时发出错误消息 (4975411)

          在 Sun Studio 8 中修复。在启用访问检查的情况下在 dbx 下执行 64
          位 SPARC 程序有时会导致 dbx 发出错误消息，比如：

dbx:read of 4 bytes at address 0x8 failed --- Error 0
dbx warning:internal handler (-396) made defunct --- could not
enable event FRET"
	 

          它已被修复。

       4. dbx 终止它无法控制的进程 (5022145)

          当 dbx 需要更多的内存而无法分配它时（例如，系统交换空间不
          足），dbx 将终止正在调试的进程。这一特殊的问题已被修复。当 dbx
          无法获取附加内存时，可能会出现其他奇怪情况。在调试期间要尽量避
          免达到系统极限。

       5. stop inclass/inobject 花费的时间比较长 (4952613)

          在 Sun Studio 8 中修复。该性能问题已被修复。

       6. 64 位：大型连续堆块上的访问检查失败 (4958325)

          dbx 过去使用 32 位值来存储堆块的大小。堆块的尺寸要比这个混淆的
          dbx 大。它已被修复。

       7. dbx 修复并继续导致 Pro/E 因为 SIGILL 而崩溃 (4974233)

          当 dbx 将替换函数的地址添加到运行的可执行文件中时，有时会让地
          址出错。它已被修复。

     

    ------------------------------------------------------------------------


            E. 问题和解决办法

    本节讨论了已知的软件问题及其可能的解决方法。有关更新信息，请查看开发
    人员门户，网址：http:
    //developers.sun.com/prodtech/cc/support_index.html。

       1. 当 dbx 连接到进程时发生数据收集问
       2. RTC 将复制填充结构视为错误
       3. dbx 不检查来自拷贝构造函数的 RUI
       4. dbx 在调试 Java 代码时可能会崩溃
       5. dbx 在重新调试 Java 代码时崩溃

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

          如果将 dbx 连接到一个正在运行的进程而没有预装收集器库
          libcollector.so，可能会发生多种错误。

              * 无法收集任何跟踪数据：同步等待跟踪、堆跟踪或 MPI 跟踪。
                跟踪数据是通过对各个库进行插入操作而收集的。如果未预加载
                libcollector.so，则无法执行插入操作。
              * 如果程序在 dbx 连接到进程后安装信号处理程序，并且该信号
                处理程序不传递 SIGPROF 和 SIGEMT 信号，分析数据和抽样数
                据将丢失。
              * 如果程序使用异步 I/O 库 libaio.so，基于时钟的分析数据和
                抽样数据将丢失，因为 libaio.so 会使用 SIGPROF 执行异步取
                消操作。 (4397578)
              * 如果程序使用硬件计数器库 libcpc.so，则硬件计数器上溢分析
                实验将会被破坏，因为收集器和程序都在使用该库。如果硬件计
                数器库是在 dbx 连接到进程之后装入的，硬件计数器实验则可
                成功（只要对 libcpclibrary 函数的引用通过广义搜索而不是
                libcpc.so 中的搜索来解析）。
              * 如果程序调用 setitimer(2)，基于时钟的分析实验将会被破
                坏，因为收集器和程序都在使用该计时器。

       2. RTC 考虑复制填充的结构是一个问题 (4460536)

          在启用运行时检查的情况下，如果复制数据字段之间存在间隙（漏洞或
          填充）的结构，dbx 报告 RUI（从未初始化的内存中读）错误。

       3. dbx 不检查来自拷贝构造函数的 RUI

          运行检查可能会错误地报告内联 C++ 拷贝构造函数的 RUI（从未初始
          化内存读取）。

       4. dbx 在调试 Java 代码时可能崩溃 (4893079)

          如果从 dbx shell 内部发布一条 cd 命令，或者设置 CLASSPATH 环境
          变量或 CLASSPATHX 环境变量，则 dbx 可能因段故障而崩溃。

          解决办法：

              * 请勿执行上述任何操作。
              * 在执行上述任何操作前，删除所有监视（显示）。

       5. dbx 在重新调试 Java 代码时崩溃 (4801883)

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

     

    ------------------------------------------------------------------------


            F. 限制和不兼容

    Sun Studio 9 dbx 具有以下限制：

        * dbx 的以下功能不适用于 Linux 平台：
              o 主存文件调试
              o 修复并继续
              o Java 调试
              o 运行时检查
              o 性能数据收集
              o 下列事件上的断点：
                    + fault
                    + lastrites
                    + lwp_exit
                    + sysin
                    + sysout
                    + sync
                    + throw


        * dbx 无法 exec() 被调用时在 Linux 平台上执行叉形进程，或更改为
          新的程序。

        * Korn shell 中的 pipe 运算符仅限于 Linux 平台。任何需要访问目标
          进程的 dbx 命令都不作为管道的一部分运行。例如，下面的命令可能
          会导致 dbx 挂起：

where | head -1

          解决办法：

              o 键入 Ctrl-C 以显示新的 dbx 提示符。
              o dbx 会缓存大量信息，比如对于上例，下面的命令序列起作用：

where
where | head -1

        * 在 Linux 平台上调试程序时可能会发生下面的问题：

              o 如果程序使用 clone() 实现自身的线程样式，则 dbx 中的线程
                支持不能正确识别线程。

                解决办法：
                使用 libthread.so 代替 clone()。

              o Linux OS 中的线程库使用 SIGSTOP 信号作为其内部机制的一部
                分。通常，dbx 会对您隐藏这些信号，并允许您从其他源监视真
                正的 SIGSTOP 信号。偶尔，Linux OS 会以意想不到的方式使用
                SIGSTOP，dbx 将系统生成的 SIGSTOP 解释为用户生成的
                SIGSTOP。

                解决办法：
                使用 ignore 命令以告知 dbx 不要捕获 SIGSTOP 信号。

              o 有时线程退出，但 Linux OS 不将退出报告给 dbx。当使用新的
                线程库时，这种情况发生的次数会减少 (NPTL)。

                当线程退出并且退出未报告时，dbx 会等待永远也不发生的事件
                并且不显示新的提示符。这种情况最可能在您在 dbx 中指定完
                cont 命令后发生，但它也可能在 step up 命令、step 命令、
                next 命令和其他命令后发生。

                解决办法：

                    + 有时，键入 Ctrl-C 会导致 dbx 停止等待并显示新的提
                      示符。
                    + 如果 Ctrl-C 不起作用，就请退出 dbx 并重新启动它。



        * C++ 表达式的运行时类型信息不适用于使用 g++ 编译器编译的程序。


        * 运行时检查的内存访问检查功能不适用于 Solaris OS x86 Platform
          Edition。


        * 不能从 .dbxrc 文件连接到正在运行的进程。.dbxrc 文件不应含有执
          行代码的命令。但是，您可以将此类命令放在一个文件中，然后使用
          dbx source 命令来执行该文件中的命令。


        * dbx 无法正确地将损坏的指针指向 compat=4 的成员函数。对于
          compat=5 而言并不存在这一问题。

          解决办法：按如下方法重新编译程序：

CC -compat=4 -Qoption ccfe -abiopt=pmfun1

          该标记引入了 ABI 更改并且不应该在产品生成中使用。


        * 在 V9/V9 系统中，如果参数不是整型，则通过利用 -g 和 -O 选项编
          译的代码传递的栈跟踪所提供的结果不准确。打印此类函数中的浮点参
          数会显示以下错误消息：

RegSet::getd('o1'):cannot -- will return 0.0

          解决办法：仅使用 -g。

        * 在 V9/V9 系统中，使用 call 命令或打印函数调用对作为参数或返回
          值的嵌套小结构不起作用。


        * 使用 libC.so.5 或者 libC.so.4 的较早副本可能会引起在 C++ 异常
          区域中的 dbx 问题。可能导致关于错误的 stab 和未处理的异常的警
          告消息。

          解决办法：在所有的系统上安装最新的 libC.so.5。

          libC.so.5 作为 SUNWlibC 补丁程序（Solaris 操作环境的每个版本和
          每种体系结构都提供了一个此类程序），可以从 Sun Studio 9 下载或
          从 http://sunsolve.sun.com 上获取。 有关您的 Solaris 操作系统
          版本和系统体系结构对应的补丁程序编号的信息，请参见《Sun Studio
          9 for Solaris 平台发行说明》，该说明位于产品网站
          http://developers.sun.com/tools/cc/documentation/ss9_docs/release_notes.html。

        * Fortran 用户应该用 -stackvar 选项编译，以便充分利用运行时检查。

          某些程序可能无法正常使用 -stackvar。在这种情况下，尝试使用 -C
          编译器选项，它可以在不使用 RTC 的情况下打开数组下标检查。

        * 对于多线程的应用程序，跟踪派生可能不可信。


        * 使用 call 命令或打印函数调用可能会导致多线程应用程序发生死锁。


        * 如果文件是预编译头文件 (PCH) 集合的一部分，请不要使用 dbx 的修
          复并继续功能来更改头文件。


        * dbx 命令行解释器是较早版本的 Korn shell (ksh)，不支持代码集独
          立 (CSI)。当在 dbx 命令行上键入多字节字符时，会发生解释错误。

    ------------------------------------------------------------------------


            G. 文档错误

    目前没有新的信息。

     

    ------------------------------------------------------------------------

    版权所有 (c) 2004 Sun Microsystems, Inc. 保留所有权利。
	必须依据许可证条款使用。

