                                                   更新日付： 2004 年 5 月 27 日
 Sun[tm] Studio 9: dbx Readme 

     目次

       A. はじめに 
       B. Sun Studio 9 dbx について 
       C. 新規および変更された機能 
       D. ソフトウェアの修正事項 
       E. 問題点と回避策 
       F. 制限事項と互換性の問題 
       G. 記述の誤りの訂正 



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

     A. はじめに

     この文書では、Sun[tm] Studio 9 dbx に関する情報を提供します。この
     リリースで導入された新機能、ソフトウェアの修正事項、既知の問題点、
     制限事項、互換性の問題について説明します。この文書の記載内容はこの
     リリースのマニュアルの記載内容に優先します。

     製品マニュアル 

        * リリースノート (Solaris プラットフォーム) : 
          http://docs.sun.com から入手可能です。リリースノートの情報は、
          すべての README ファイルの情報を更新および補足します。 
        * リリースノート (Linux プラットフォーム) : 
          http://docs.sun.com から入手可能です。リリースノートの情報は、
          すべての README ファイルの情報を更新および補足します。 
        * Sun Studio 9 のドキュメント :
          /installation_directory/docs/ja/index.html からは、製品のマ
          ニュアルページ、README の HTML バージョン、およびマニュアル~
          にアクセスできます。Solaris でのデフォルトの 
          installation_directory は /opt/SUNWspro です。Linux でのデ
          フォルトの installation_directory は /opt/sun/sunstudio9 です。 
        * IDE のドキュメント : IDE の「ヘルプ」メニューからは、Sun 
          Studio 9 IDE のすべてのコンポーネントに関するオンラインヘルプ
          にアクセスできます。 
        * 開発者向けリソースのポータル : 技術資料、サンプルコード、ド
          キュメント、ナレッジベースについては、開発者向けポータルの 
          http://developers.sun.com/prodtech/cc を参照してください。 
     


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

     B. Sun Studio 9 dbx について

     dbx は、ソースレベルの対話型コマンド行デバッグツールです。このツー
     ルを使い、制御された方法でプログラムを実行したり、停止したプログラ
     ムの状態を検査したりできます。dbx によって、パフォーマンスデータの
     収集も含めて、プログラムの動的な実行を完全に制御することができます。
     このリリースの dbx は、次のプラットフォームで利用できます。 
        * Solaris[tm] オペレーティングシステム: 
             o SPARCAE; プラットフォーム版のバージョン 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 x86 プラットフォーム版での Fortran のサポート 

     gcc や g++ コンパイラでコンパイルされたプログラム、あるいは Linux 
     プラットフォームで動作するプログラムの場合、dbx の一部機能は利用で
     きません。詳細は、制限事項と互換性の問題を参照してください。 

     Solaris プラットフォーム版のその他の Sun Studio 9 コンポーネントに
     ついては、http://docs.sun.com から入手可能な『Sun Studio 9 の新機
     能』をお読みください。 
     


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

     D. ソフトウェアの修正事項

     ここでは、Sun Studio 9 リリースの dbx で解決されたソフトウェアの問
     題点を説明します。

       1. dbx が、最適化された C++ コードのレジスタ内容およびクラスメン
          バーを出力できない 
       2. bcheck のエラーの報告に間違いがある 
       3. sparcv9 コードの実行時検査中に dbx からエラーメッセージ 
          (Error 0) が表示される 
       4. 自身が制御できないプロセスを dbx が強制終了させる 
       5. stop inclass/inobject に時間がかかる 
       6. 64 ビット: 大きな連続するヒープブロックのアクセス検査に失敗す
          る 
       7. dbx の修正継続で、Pro/E が SIGILL でクラッシュする 

       1. dbx が、最適化された C++ コードのレジスタ内容およびクラスメン
          バーを出力できない (4964695)

          Sun Studio 8 で修正済み。 現在の dbx は、-g -xO4 を付けてコン
          パイルされた C++ コードのレジスタ ($o7) やクラスメンバー 
          (foo.x) を出力できます。 

       2. bcheck のエラーの報告に間違いがある (4460648)

          実行時検査で捕捉されていなかった、ヒープ上のデータ構造体に対
          する範囲外の割り当てが捕捉されるようになっています。 

       3. sparcv9 コードの実行時検査中に dbx からエラーメッセージ 
          (Error 0) が表示される (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 が追加のメモリーを取得できない場合に不具合
          が起きる状況は他にも考えられます。デバッグ中にシステムの限界
          に達しないようにしてください。 

       5. stop inclass/inobject に時間がかかる (4952613)

          Sun Studio 8 で修正済み。 パフォーマンス上のこの問題は修正さ
          れています。

       6. 64 ビット: 大きな連続するヒープブロックのアクセス検査に失敗す
          る (4958325)

          dbx は 32 ビット値を使用して、ヒープブロックのサイズを格納し
          ています。これよりブロックサイズが大きいと、dbx に混乱が生じ
          ていました。この問題は修正されています。 

       7. dbx の修正継続で、Pro/E が SIGILL でクラッシュする (4974233)

          動作中の実行可能ファイルに置換関数のアドレスのパッチを行うと
          きに、dbx がアドレスを間違えることがありました。この問題は修
          正されています。 
     


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

     E. 問題点と回避策

     ここでは、これまでに判明しているソフトウェアの問題点とその回避策に
     ついて説明します。最新情報については、http://docs.sun.com から入手
     可能なリリースノートを参照してください。

       1. dbx がプロセスに接続されると、データ収集で問題が発生する 
       2. RTC は、埋め込み構造体の複製をエラーと考える 
       3. dbx がコピーコンストラクタからの RUI を検査しない 
       4. dbx で Java コードのデバッグ中に障害が発生する場合がある 
       5. dbx で Java コードの再デバッグ中に障害が発生する 

       1. dbx がプロセスに接続されると、データ収集で問題が発生する

          コレクタライブラリ libcollector.so を事前に読み込まずに実行プ
          ロセスに dbx を接続すると、多数のエラーが発生します。 

             o トレーシングデータを収集することはできません。トレーシン
               グデータとは、同期待ちトレース、ヒープトレース、MPI ト
               レースなどです。トレーシングデータはさまざまなライブラリ
               への割り込み処理によって収集されます。 libcollector.so 
               が事前に読み込まれていない場合、割り込み処理ができなくな
               ります。 
             o dbx がプロセスに接続されたあとにシグナルハンドラがインス
               トールされ、そのシグナルハンドラが SIGPROF および SIGEMT
               信号を通過しない場合、プロファイリングデータと標本データ
               が失われます。
             o プログラムが非同期入出力ライブラリ libaio.so を使用して
               いる場合、クロックベースのプロファイリングデータと標本
               データが失われます。 libaio.so は、非同期の取り消し操作
               のために SIGPROF を使用するためです。(4397578) 
             o プログラムがハードウェアカウンタライブラリ libcpc.so を
               使用している場合、ハードウェアカウンタのオーバーフロープ
               ロファイリング実験は失敗します。コレクタとプログラムの両
               方がそのライブラリを使用しているためです。dbx がプロセス
               に接続された後にハードウェアカウンタライブラリが読み込ま
               れた場合、libcpclibrary 関数への参照が libcpc.so の検索
               ではなく通常の検索によって解決されれば、ハードウェアカ
               ウンタの実験は成功します。 
             o プログラムが setitimer(2) を呼び出す場合、クロックベース
               のプロファイリング実験は失敗することがあります。コレクタ
               とプログラムの両方がタイマーを使用しているためです。 

       2. RTC は、埋め込み構造体の複製をエラーと考える (4460536)

          実行時検査を有効にすると、データ領域間にギャップ (隙間または
          パディング) のある構造体がコピーされる場合に RUI (初期化され
          ていないメモリーからの読み取り) エラーが生成されます。 

       3. dbx がコピーコンストラクタからの RUI を検査しない

          実行時検査が、インライン化された C++ のコピーコンストラクタに
          対して、RUI (初期化されていないメモリーからの読み取り) エラー
          を誤って報告することがあります。 

       4. dbx で Java コードのデバッグ中に障害が発生する場合がある
          (4893079)

          dbx シェルの中で、cd コマンドを実行した場合、もしくは 
          CLASSPATH 環境変数または CLASSPATHX 環境変数を設定した場合、
          dbx でセグメント例外が発生することがあります。 

          回避策: 
             o 上記の実行もしくは設定を行わない。 
             o 上記の実行もしくは設定を行う前に、すべてのウォッチポイン
               ト (表示) を削除する。 

       5. dbx で Java コードの再デバッグ中に障害が発生する (4801883)

          Java コードに対して 2 つの debug コマンドを実行することによっ
          て、dbx で障害が発生する場合があります。 
     


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

     F. 制限事項と互換性の問題

     Sun Studio 9 dbx には次の制限があります。

        * Linux プラットフォームでは、dbx の次の機能は利用できません。 
             o コアファイルのデバッグ 
             o 修正継続 
             o Java のデバッグ 
             o 実行時検査 
             o パフォーマンスデータの収集 
             o 次のイベントのブレークポイント 
                  + fault 
                  + lastrites 
                  + lwp_exit 
                  + sysin 
                  + sysout 
                  + sync 
                  + throw 
          
        * dbx は、Linux プラットフォームでフォークされたプロセスを追跡
          できません。また、exec() が呼び出されたときに新しいプログラム
          に切り替えられません。

        * Linux プラットフォームの場合、Korn シェルの pipe 演算子には制
          約があります。ターゲットプロセスにアクセスする必要がある dbx 
          コマンドはパイプラインの一部として機能しません。たとえば次の
          コマンドは、dbx をハングアップさせる可能性があります。 

          where | head -1

          回避策: 
             o Ctrl-C で新しい dbx プロンプトを表示します。 
             o dbx は大量の情報をキャッシュに書き込むため、上記の例の場
               合は、次のコマンドシーケンスで機能します。 

               where
               where | head -1

        * Linux プラットフォームでのプログラムのデバッグでは、次の問題
          が発生する可能性があります。 

             o プログラムが clone() を使用して独自のスタイルのスレッド
               を実装している場合、dbx のスレッドサポートによってスレッ
               ドが正しく識別されない。 

               回避策:
               clone() ではなく、libthread.so を使ってください。

             o Linux の threads ライブラリは、その内部機構の一部に 
               SIGSTOP シグナルを使っています。通常、dbx はそれらのシグ
               ナルをユーザーから隠し、他のソースからの純粋な SIGSTOP 
               シグナルを監視できるようにします。しかし、まれに Linux 
               が予期しない方法で SIGSTOP を使用することがあり、その場
               合、dbx はシステム生成の SIGSTOP をユーザー生成の 
               SIGSTOP と解釈します。 

               回避策:
               ignore コマンドを使用して、SIGSTOP シグナルをキャッチし
               ないよう dbx に指示してください。 

             o スレッドは終了するが、Linux から dbx にその終了が報告さ
               れないことがある。この問題は、新しいスレッドライブラリ 
               (NPTL) を利用すると発生することが少なくなります。 

               スレッドが終了し、その終了が報告されない場合、dbx は決し
               て起こることのないイベントを待ち、新しいプロンプトを表示
               しません。この状況は、dbx で cont コマンドを発行した後で
               最も発生しますが、step up コマンドや step コマンド、next
               コマンドの後でも発生することがあります。 

               回避策: 
                  + Ctrl-C を押すと、dbx が待ち状態を終了し、新しいプ
                    ロンプトを表示することがあります。 
                  + Ctrl-C が機能しない場合は、いったん dbx を終了して、
                    再起動します。 
          
        * g++ コンパイラでコンパイルされているプログラムの場合、C++ 式
          に関する実行時型情報は得られません。 

        * Solaris x86 プラットフォーム版では、実行時検査のメモリーアク
          セス検査機能は利用できません。 

        * 動作中のプロセスに .dbxrc から接続することはできません。この
          ため、.dbxrc ファイルに、コードを実行するコマンドを含めないで
          ください。ただし、別のファイル内にこのようなコマンドを入れて
          おき、dbx source コマンドを使用して、そのファイル内のコマンド
          を実行することはできます。 

        * compat=4 のとき、dbx がメンバー関数に対するポインタを不正に復
          号化します。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 に問題が発生します。不正なスタブや未処理の例外に関する
          警告メッセージが出力されることがあります。 

          回避策: 
          最新の libC.so.5 をすべてのシステムにインストールしてください。

          libC.so.5 は、Sun Studio 9 のダウンロードまたは 
          http://sunsolve.sun.com で、各システムアーキテクチャの 
          Solaris オペレーティングシステムのバージョンごとに SUNWlibC 
          のパッチとして提供されています。ご使用の Solaris オペレー
          ティングシステムおよびシステムアーキテクチャ用のパッチ番号に
          ついては、http://docs.sun.com から入手可能なリリースノートを
          参照してください。 

        * Fortran の場合、実行時検査機能を最大限に活用するには、
          -stackvar コンパイラオプションを使用してください。 

          プログラムによっては、-stackvar が正しく機能しないことがあり
          ます。そのような場合は、-C コンパイラオプションを試してくださ
          い。このオプションは、添字の検査を有効にします。

        * マルチスレッドアプリケーションで、fork の追跡が正しくないこと
          があります。 

        * call コマンドまたは print コマンドによる関数呼び出しを使用す
          ると、マルチスレッドアプリケーションがデッドロック状態になる
          ことがあります。 

        * ファイルがプリコンパイル済みヘッダー (PCH) によって収集された
          ものの一部であった場合は、ヘッダーファイルの変更に dbx の修正
          継続機能を使用しないでください。 

        * dbx コマンド行インタプリタは、CSI (Code Set Independence) を
          サポートしない旧バージョンの Korn シェル (ksh) です。マルチバ
          イト文字は、dbx コマンド行に入力すると誤って解釈される場合が
          あります。 
          


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

     G. 記述の誤りの訂正

     現時点では新しい情報はありません。



     ------------------------------------------------------------------
     
     Copyright (C) 2004 Sun Microsystems, Inc. All rights reserved. Use
     is subject to license terms.
