Sun[tm] ONE Studio 8: dbx Readme
Description: Sun ONE Studio 8 dbx Readme
Keywords: readme, documentation, publication,

更新日付: 2003 年 3 月 25 日

### Sun[tm] ONE Studio 8:`dbx` Readme

> #### 目次

> 1. はじめに
> 2. Sun ONE Studio 8 `dbx` について
> 3. 新規および変更された機能
> 4. ソフトウェアの修正事項
> 5. 問題点と回避策
> 6. 制限事項と互換性の問題
> 7. 記述の誤りの訂正

> #### A. はじめに

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

> 製品マニュアル
> - リリースノート: `http://docs.sun.com/` で入手できます。リリースノートの情報は、各製品の「Readme」ファイルの情報に優先します。
> - Compiler Collection のマニュアル: 製品のマニュアルページ、HTML 版の Readme、およびマニュアルは、`/opt/SUNWspro/docs/ja/index.html` からアクセスできます。
> - Compiler Collection 開発者向けリソースポータル:Compiler Collection 関連のドキュメントについては、 Compiler Collection Developer Resources Portal (英語) を参照してください。 このポータルには、技術解説や知識ベースなども挙げられています。

> 注 - Compiler Collection ソフトウェアがデフォルトの `/opt` 以外のディレクトリにインストールされている場合は、システム上の対応するパスをシステム管理者に確認してください。

> #### B. Sun ONE Studio 8 `dbx` について

> `dbx` は、ソースレベルの対話型コマンド行デバッグツールです。このツールを使用して、プログラムを制御された方法で実行したり、停止したプログラムの状態を検査したりできます。`dbx` によって、パフォーマンスデータの収集も含めて、プログラムの動的な実行を完全に制御できます。このリリースの `dbx` は、Solaris[tm] オペレーティング環境 (SPARC[tm] プラットフォーム版) とSolaris オペレーティング環境 (x86 プラットフォーム版) のバージョン 7、8、および 9 で動作します。

> #### C. 新規および変更された機能

> ここでは、`dbx` で新たに追加された機能と変更された機能を説明しています。

> - このリリースの `dbx` では、C99 言語の次のデータ型をサポートするようになりました。

>   - _Complex
>   - _Imaginary
>   - double _Complex
>   - double _Imaginary
>   - long double _Complex
>   - long double _Imaginary

>   これらのデータ型を含む変数と式の値を出力できます。

> - このリリースの `dbx` は、Fortran 95 と C における OpenMP プログラムのデバッグをサポートします。`dbx` は、Fortran 95 コンパイラおよび C コンパイラで生成された OpenMP コードが存在する状態で、スレッド、スタック、関数、パラメータ、および変数を正しく表示できます。

> - `detach` コマンド用の新しい `-stop` オプション

>   `detach -stop` コマンドは、`dbx` を対象プログラムから切り離し、プロセスを停止状態にします。`-stop` オプションを使用することで、排他的なアクセスのためにブロックされる可能性のある、ほかの `/proc` ベースデバッグツールの一時的なアプリケーションを実行できます。

> - 新しい `-resumeone` イベント修飾子

>   イベントハンドラの新しい `-resumeone` 修飾子は、マルチスレッドプログラムで関数呼び出しを行う場合に便利です。

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

> ここでは、今回の `dbx` リリースで修正された問題点について説明します。

> 1. `thread -blocks` コマンドと `thread -syncs` コマンドが動作するようになった
> 2. 表示オプションの `-L` が無視されることがなくなった
> 3. Fortran で "volatile" を使用しても `dbx` のセグメント例外が起きなくなった
> 4. このリリースの `dbx` では、起動時に C99 可変長配列のサイズを計算できるようになった
> 5. `rtc_auto_suppress` 環境変数が機能するようになった

> 1. ##### `thread -blocks` コマンドと `thread -syncs` コマンドが動作するようになった (4307236)

>    `thread -blocks` コマンドと `thread -syncs` コマンドは、32 ビットアプリケーションのデバッグ時に 64 ビットカーネルを使用した Solaris 7 オペレーティング環境で正常に動作するようになりました。

> 2. ##### 表示オプションの `-L` が無視されることがなくなった (4687714)

>    IDE で dbx Debugger 上で `-L` を指定して大きなオブジェクトを表示する場合、(`step` コマンド、`next` コマンド、ブレークポイントなどによって) 次にデバッガが 停止すると `-L` が無視されます。(修正済み)

> 3. ##### Fortran で "volatile" を使用しても `dbx` のセグメント例外が起きなくなった (4756742)

>    Fortran プログラムで volatile 変数を出力しようとすると、`dbx` セグメント例外が発生します。(修正済み)

> 4. ##### このリリースの `dbx` では、起動時に C99 可変長配列のサイズを計算できるようになった (4768919)

>    可変長配列のサイズは実行時に決定されます。 配列を宣言するスコープに対してプログラムを実行する前に可変長配列のサイズを計算するように指定すると (`print sizeof vla` など) 、`dbx` はセグメント例外を起こします。

> 5. ##### `rtc_auto_suppress` 環境変数が機能するようになった (4666484)

>    実行時検査により重複したエラーを抑制し、1 つの場所でのエラー報告を 1 に限定できます。この動作は、`rtc_auto_suppress` 環境変数で制御します。しかし、この制御が機能しないというケースがすでに 1 つわかっています (RUI エラー)。

> #### E. 問題点と回避策

> ここでは、これまでにわかっているソフトウェアの問題点とその回避策について説明します。更新情報については、アップデート情報 `http://sun.co.jp/software/sundev/suncc/hotnews.html` を参照してください。

> 1. 名前を持たない型のテンプレートパラメータを `dbx` で出力できない
> 2. 局所変数の監視中に `SIGKILL` シグナルで終了することがある
> 3. `dbx` がプロセスに接続されると、データ収集で問題が発生する
> 4. `-xcheck = stkovf` を指定すると実行時検査が行われない
> 5. Solaris 7 オペレーティング環境で 64 ビット `dbx` を使用すると、ランダムなセグメント例外が生じる
> 6. RTC は、埋め込み構造体の複製をエラーと考える
> 7. `dbx` は、内部クラスを指すポインタのコンテンツを表示できない

> 1. ##### 名前を持たない型のテンプレートパラメータを `dbx` で出力できない (4058205)

>    `dbx` は、名前を持たない型のテンプレートパラメータを出力できません。

> 2. ##### 局所変数の監視中に `SIGKILL` シグナルで終了することがある

>    Solaris 7 オペレーティング環境が動作する SPARC プラットフォームで、stop modify で変更時ブレークポイントを設定して局所変数を監視すると、dbx が SIGKILL シグナルで終了したりハングアップしたりすることがあります。この問題は、Solaris 8 オペレーティング環境 または Solaris 9 オペレーティング環境が動作する SPARC プラットフォーム、および Intel プラットフォームでは発生しません。

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

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

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

> 4. ##### `-xcheck = stkovf` を指定すると、実行時検査が行われない

>    `-xcheck = stkovf` を指定すると、実行時検査は行われません。 `rua` (Read From Unallocated Memory) エラーが返されます。

> 5. ##### Solaris 7 オペレーティング環境で 64 ビット `dbx` を使用すると、ランダムなセグメント例外が生じる (4716507)

>    `dbx` の `vnsprintf()` には、Solaris 7 オペレーティング環境で使用するとセグメント例外を起こすというバグがあります。

>    回避策:

>    - バージョン 8 またはバージョン 9 の Solaris オペレーティング環境だけを使用する
>    - 32 ビットアプリケーションをデバッグする場合は、次に示すように `_DBX_EXEC_32` 環境変数を設定するか、

>          setenv _DBX_EXEC_32

>      あるいは、次に示すように `-x exec32` オプションを指定して `dbx` を起動する

>          dbx -x exec32

>    - 該当する Solaris 7 オペレーティング環境パッチを適用する
>      - SPARC[tm] プラットフォーム版の場合は 106541-23
>      - x86 プラットフォーム版の場合は 106542-23

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

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

> 7. ##### `dbx` は、内部クラスを指すポインタのコンテンツを表示できない (4827831)

>    `dbx` では、コマンド `print *p` (`p` は入れ子になったクラス (構造体) を指すポインタ) は内部エラーとなります。

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

> Sun ONE Studio 8 `dbx` には次の制限があります。

> - 動作中のプロセスに `.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 ONE Studio 8, Compiler Collection のダウンロードまたは `http://sunsolve.sun.com` で、各システムアーキテクチャの Solaris オペレーティング環境のバージョンごとに SUNWlibC のパッチとして提供されています。使用しているバージョンの Solaris オペレーティング環境およびシステムアーキテクチャのパッチ番号については、『Sun ONE Studio 8, Compiler Collection リリースノート』を参照してください。`docs.sun.com` Web サイト http://docs.sun.com/ で検索できます。

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

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

> - マルチスレッドアプリケーションで、fork の追跡が正しくないことがあります。
> - `call` コマンドまたは `print` コマンドによる関数呼び出しを使用すると、マルチスレッドアプリケーションがデッドロック状態になることがあります。
> - ファイルがプリコンパイル済みヘッダー (PCH) によって収集されたものの一部であった場合は、ヘッダーファイルの変更に `dbx` の修正継続機能を使用しないでください。
> - `dbx` コマンド行インタプリタは、CSI (Code Set Independence) をサポートしない旧バージョンの Korn シェル (ksh) です。マルチバイト文字は、`dbx` コマンド行に入力すると誤って解釈される場合があります。

> #### G. 記述の誤りの訂正

> `dbx` ヘルプファイル (`dbx` コマンド行で `help` と入力してアクセスできる) では、`mi_mode` 環境変数をこのリリースの新機能と説明していますが、この環境機能はまだ開発段階にあり、実用に対応していません。

> Copyright © 2003 Sun Microsystems, Inc., All rights reserved. Use is subject to license terms.Use is subject to license terms.