| 更新日付: 2003 年 3 月 25 日 |
Sun[tm] ONE Studio 8:dbx Readme |
目次
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 リリースで修正された問題点について説明します。
- thread -blocks コマンドと thread -syncs コマンドが動作するようになった
- 表示オプションの -L が無視されることがなくなった
- Fortran で "volatile" を使用しても dbx のセグメント例外が起きなくなった
- このリリースの dbx では、起動時に C99 可変長配列のサイズを計算できるようになった
- rtc_auto_suppress 環境変数が機能するようになった
thread -blocks コマンドと thread -syncs コマンドが動作するようになった (4307236)
thread -blocks コマンドと thread -syncs コマンドは、32 ビットアプリケーションのデバッグ時に 64 ビットカーネルを使用した Solaris 7 オペレーティング環境で正常に動作するようになりました。
表示オプションの -L が無視されることがなくなった (4687714)
IDE で dbx Debugger 上で -L を指定して大きなオブジェクトを表示する場合、(step コマンド、next コマンド、ブレークポイントなどによって) 次にデバッガが 停止すると -L が無視されます。(修正済み)
Fortran で "volatile" を使用しても dbx のセグメント例外が起きなくなった (4756742)
Fortran プログラムで volatile 変数を出力しようとすると、dbx セグメント例外が発生します。(修正済み)
このリリースの dbx では、起動時に C99 可変長配列のサイズを計算できるようになった (4768919)
可変長配列のサイズは実行時に決定されます。 配列を宣言するスコープに対してプログラムを実行する前に可変長配列のサイズを計算するように指定すると (print sizeof vla など) 、dbx はセグメント例外を起こします。
rtc_auto_suppress 環境変数が機能するようになった (4666484)
実行時検査により重複したエラーを抑制し、1 つの場所でのエラー報告を 1 に限定できます。この動作は、rtc_auto_suppress 環境変数で制御します。しかし、この制御が機能しないというケースがすでに 1 つわかっています (RUI エラー)。
E. 問題点と回避策
ここでは、これまでにわかっているソフトウェアの問題点とその回避策について説明します。更新情報については、アップデート情報 http://sun.co.jp/software/sundev/suncc/hotnews.html を参照してください。
- 名前を持たない型のテンプレートパラメータを dbx で出力できない
- 局所変数の監視中に SIGKILL シグナルで終了することがある
- dbx がプロセスに接続されると、データ収集で問題が発生する
- -xcheck = stkovf を指定すると実行時検査が行われない
- Solaris 7 オペレーティング環境で 64 ビット dbx を使用すると、ランダムなセグメント例外が生じる
- RTC は、埋め込み構造体の複製をエラーと考える
- dbx は、内部クラスを指すポインタのコンテンツを表示できない
名前を持たない型のテンプレートパラメータを dbx で出力できない (4058205)
dbx は、名前を持たない型のテンプレートパラメータを出力できません。
局所変数の監視中に SIGKILL シグナルで終了することがある
Solaris 7 オペレーティング環境が動作する SPARC プラットフォームで、stop modify で変更時ブレークポイントを設定して局所変数を監視すると、dbx が SIGKILL シグナルで終了したりハングアップしたりすることがあります。この問題は、Solaris 8 オペレーティング環境 または Solaris 9 オペレーティング環境が動作する SPARC プラットフォーム、および Intel プラットフォームでは発生しません。
dbx がプロセスに接続されると、データ収集で問題が発生する
コレクタライブラリ libcollector.so を事前に読み込まずに実行プロセスに dbx を接続すると、多数のエラーが発生します。
- トレーシングデータを収集することはできません。トレーシングデータとは、同期待機トレーシング、ヒープトレーシング、MPI トレーシングなどです。トレーシングデータはさまざまなライブラリへの割り込み処理によって収集されます。libcollector.so が事前にロードされていない場合、割り込み処理ができなくなります。
- dbx がプロセスに接続されたあとにシグナルハンドラがインストールされ、そのシグナルハンドラが SIGPROF および SIGEMT 信号を通過しない場合、プロファイリングデータと標本データが失われます。
- プログラムが非同期入出力ライブラリ libaio.so を使用している場合、クロックベースのプロファイリングデータと標本データが失われます。libaio.so は、非同期の取り消し操作のために SIGPROF を使用するためです (4397578)。
- プログラムがハードウェアカウンタライブラリ libcpc.so を使用している場合、ハードウェアカウンタのオーバーフロープロファイリング実験は失敗します。コレクタとプログラムの両方がそのライブラリを使用しているためです。dbx がプロセスに接続された後にハードウェアカウンタライブラリが読み込まれた場合、libcpclibrary 関数への参照が libcpc.so の検索ではなく通常の検索によって解決されれば、ハードウェアカウンタの実験は成功します。
- プログラムが setitimer(2) を呼び出す場合、クロックベースのプロファイリング実験は失敗することがあります。コレクタとプログラムの両方がタイマーを使用しているためです。
-xcheck = stkovf を指定すると、実行時検査が行われない
-xcheck = stkovf を指定すると、実行時検査は行われません。 rua (Read From Unallocated Memory) エラーが返されます。
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
RTC は、埋め込み構造体の複製をエラーと考える (4460536)
実行時検査を有効にすると、データ領域間にギャップ (隙間またはパディング) のある構造体がコピーされる場合に RUI (初期化されていないメモリーからの読み取り) エラーが生成されます。
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.