Oracle Solaris Studio 12.2 dbx で追加または変更された機能は次のとおりです。
最適化済みコードのデバッグのサポートの向上
パラメータおよび局所変数を探すための情報を、x86 プラットフォームで使用できます。
インライン関数についての情報を、SPARC プラットフォームで使用できます。
OpenMP の領域、タスク、およびスレッドセットについての情報を表示するための新しいコマンド
omp_pr [parallel_region_id] [-ancestors|-tree] [-v]
現在の並列領域または parallel_region_id によって指定されている領域を出力します。並列領域 ID、タイプ (暗黙的または明示的)、状態 (アクティブまたは非アクティブ)、チームサイズ (スレッド数)、およびプログラムの位置 (プログラムカウンタアドレス) が含まれます。
omp_tr [task_region_id] [-ancestors|-tree]
現在のタスク領域または task_region_id で指定されている領域の説明を出力します。タスク領域 ID、タイプ (暗黙的または明示的、結合または結合解除)、状態 (生成済み、実行中、または待機中)、発生スレッド、実行スレッド、プログラムの位置、未終了の子、および親が含まれます。
omp_team [parallel_region_id]
現在のチームのすべてのスレッドを出力します。parallel_region_id を指定すると、その領域のチーム内のスレッドが出力されます。
omp_loop
現在のループの説明を出力します。スケジューリングのタイプ (静的または動的)、待機または非待機、順序付き、上下限、および反復の数が含まれます。このコマンドは、現在ループを実行中のスレッドからのみ発行できます。
omp_serialize
現在のスレッドで検出される次の並列領域を直列化します。
OpenMP プログラムの既存コマンドの拡張
print -s expression
thread -info
what is name
where
新しい OpenMP イベント
omp_barrier [type] [state]
バリアーに入っているスレッドのイベントを追跡します。
omp_taskwait [state]
taskwait に入っているスレッドのイベントを追跡します。
omp_ordered [state]
順序付き領域に入っているスレッドのイベントを追跡します。
omp_critical
クリティカル領域に入っているスレッドのイベントを追跡します。
omp_atomic [state]
不可分領域に入っているスレッドのイベントを追跡します。
omp_flush [type]
フラッシュを実行しているスレッドのイベントを追跡します。
omp_task [state]
タスクの作成と終了を追跡します。
omp_master
マスター領域に入っているマスタースレッドのイベントを追跡します。
omp_single
単一領域に入っているスレッドのイベントを追跡します。
ここでは、Oracle Solaris Studio 12.2 dbx のこのリリースで解決された問題について説明します。
tracei ステップを行っているときに dbx の実行を停止できない
Solaris プラットフォームで tracei ステップを実行しているときに、Ctrl-C (^C) キーを押して dbx を停止できませんでした。これは実際には Solaris OS のバグですが、問題を回避するように dbx が変更されました。
計装されている debuglog uttsc バイナリにステップインできない
dbx は、字句ブロック内の C++ 名前空間の別名を正しく処理していませんでした。これにより、明示的に計装されたバイナリに dbx がステップインできない問題が発生していました。
Purify を指定して計装されているマルチスレッドプログラムの dbx でスレッド関連のコマンドを使用できない
Purify を指定すると、計装されるすべての共有ライブラリの名前に接尾辞が追加されます。たとえば、libc.so.1 は libc.so.1_pure_p3_c0_1005282029_510_32 になります。dbx は libc.so.1 の存在を基にして決定を行っており、読み込まれていませんでした。dbx は _pure* 接尾辞を認識するようになりました。
特定の GCC 4.x. sybx を復号化できない dbx が SLES 10.2 のコアファイルからプログラム名を抽出できない
SuSE Linux Enterprise Server 10.2 システムでは、新しい Linux システムのコアファイルに 2 つの note セクションが含まれていて、2 番目のセクションは空であるため、dbx はコアファイルからプログラムを抽出できませんでした。dbx は 1 番目のセクションから名前を取得するようになります。
dbx が gcc コードでコンストラクタのコピーを検索する
gcc は 1 つのメンバーに対して複数のエントリを生成する場合があり、それが DWARF デバッグの pubnames セクション、プロトタイプ、および抽象インスタンスに含まれていました。dbx は、プロトタイプエントリのインスタンスを検出して処理すると、エントリを削除する必要がありました。
dbx が SLES 10.2 のコアファイルからプログラム名を抽出できない
SuSE Linux Enterprise Server 10.2 システムでは、新しい Linux システムのコアファイルに 2 つの note セクションが含まれていて、2 番目のセクションは空であるため、dbx はコアファイルからプログラムを抽出できませんでした。dbx は 1 番目のセクションから名前を取得するようになります。
dbx が変数の出力で SIGSEGV を取得する
実行可能ファイルが -g オプションを指定してコンパイルされていないオブジェクトファイル (.o) から構築されていて、dbx が変数を評価するためにそのようなオブジェクトファイルの 1 つをインポートする必要がある場合、dbx がこの条件を検査していないためにインポートが失敗する場合がありました。
dbx — core segv if が有効ではない
dbx は長さがゼロのコアファイルの可能性を検査していず、それを正しく処理していませんでした。
「メモリー」ウィンドウおよび「逆アセンブル」ウィンドウによって IDE で dbx がクラッシュする場合がある
「メモリー」ウィンドウまたは「逆アセンブル」ウィンドウの表示中に IDE のデバッグセッションを終了し、そのあとでセッションを再開した場合、どちらかのウィンドウを前面にすると基になっている dbx がクラッシュしていました。