JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Oracle Solaris Studio 12.3: dbx コマンドによるデバッグ     Oracle Solaris Studio 12.3 Information Library (日本語)
search filter icon
search icon

ドキュメントの情報

はじめに

1.  dbx の概要

2.  dbx の起動

3.  dbx のカスタマイズ

4.  コードの表示とコードへの移動

5.  プログラムの実行制御

6.  ブレークポイントとトレースの設定

7.  呼び出しスタックの使用

8.  データの評価と表示

9.  実行時検査

概要

RTC を使用する場合

RTC の必要条件

実行時検査

メモリー使用状況とメモリーリーク検査を有効化

メモリーアクセス検査を有効化

すべての RTC を有効化

RTC を無効化

プログラムを実行

アクセス検査の使用

メモリーアクセスエラーの報告

メモリーアクセスエラー

メモリーリークの検査

メモリーリーク検査の使用

リークの可能性

リークの検査

メモリーリークの報告を理解する

リークレポートの生成

リークレポート

メモリーリークの修正

メモリー使用状況検査の使用

エラーの抑止

抑止のタイプ

スコープと種類による抑制

最新エラーの抑止

エラー報告回数の制限

エラー抑止の例

デフォルトの抑止

抑止によるエラーの制御

子プロセスにおける RTC の実行

接続されたプロセスへの RTC の使用

Solaris を実行しているシステムの場合

Linux を実行しているシステムの場合

RTC での修正継続機能の使用

実行時検査アプリケーションプログラミングインタフェース

バッチモードでの RTC の使用

bcheck 構文

bcheck の例

dbx からバッチモードを直接有効化

トラブルシューティングのヒント

実行時検査の制限

より高い効果を得るにはより多くのシンボルおよびデバッグ情報が必要になる

x86 プラットフォームでは SIGSEGV シグナルと SIGALTSTACK シグナルが制限される

より高い効果を得るには、十分なパッチ領域を設け、すべての既存コードを含めて 8M バイト以内にする (SPARC プラットフォームのみ)

RTC エラー

アクセスエラー

不正解放 (baf) エラー

重複解放 (duf) エラー

境界整列を誤った解放 (maf) エラー

境界整列を誤った読み取り (mar) エラー

境界整列を誤った書き込み (maw) エラー

メモリー不足 (oom) エラー

配列範囲外からの読み込み (rob) エラー

非割り当てメモリーからの読み取り (rua) エラー

非初期化メモリーからの読み取り (rui) エラー

配列範囲外メモリーへの書き込み (wob) エラー

読み取り専用メモリーへの書き込み (wro) エラー

非割り当てメモリーへの書き込み (wua) エラー

メモリーリークエラー

ブロック中のアドレス (aib)

レジスタ中のアドレス (air)

メモリーリーク (mel) エラー

10.  修正継続機能 (fix と cont)

11.  マルチスレッドアプリケーションのデバッグ

12.  子プロセスのデバッグ

13.  OpenMP プログラムのデバッグ

14.  シグナルの処理

15.  dbx を使用してプログラムをデバッグする

16.  dbx を使用した Fortran のデバッグ

17.  dbx による Java アプリケーションのデバッグ

18.  機械命令レベルでのデバッグ

19.  dbx の Korn シェル機能

20.  共有ライブラリのデバッグ

A.  プログラム状態の変更

B.  イベント管理

C.  マクロ

D.  コマンドリファレンス

索引

実行時検査の制限

実行時検査には次の制限があります。

より高い効果を得るにはより多くのシンボルおよびデバッグ情報が必要になる

アクセス検査では、ロードオブジェクトにいくつかのシンボル情報が必要です。ロードオブジェクトが完全に削除されている場合、実行時検査ですべてのエラーをキャッチできないことがあります。初期化されていないメモリーからの読み取りエラーは正しくない可能性があるため、抑止されます。この抑止は unsuppress rui コマンドを使用して上書きできます。シンボルオブジェクトのシンボルテーブルを取得するには、ロードオブジェクトを削除する際に -x オプションを使用します。

RTC は、すべての配列範囲外エラーを検出できるわけではありません。静的メモリーおよびスタックメモリーに対する範囲検査は、デバッグ情報なしでは使用できません。

x86 プラットフォームでは SIGSEGV シグナルと SIGALTSTACK シグナルが制限される

実行時検査では、メモリーアクセス命令を計測してアクセス検査をします。これらの命令は、実行時に SIGSEGV ハンドラによって処理されます。実行時検査には、独自の SIGSEGV ハンドラとシグナル代替スタックが必要なため、SIGSEGV ハンドラまたは SIGALTSTACK ハンドラをインストールしようとしても無視されるか、EINVAL エラーが生成されます。

SIGSEGV ハンドラの呼び出しは入れ子にできません。入れ子にすると、エラー terminating signal 11 SEGSEGV が生成されます。このエラーが表示された場合は、rtc skippatch コマンドを使用して、影響のある関数の計測機構を飛ばします。

より高い効果を得るには、十分なパッチ領域を設け、すべての既存コードを含めて 8M バイト以内にする (SPARC プラットフォームのみ)

既存のすべてのコードを含め、8M バイト以内に十分なパッチ領域がない場合、2 つの問題が発生する可能性があります。

使用しているプログラムに前述のどちらかの状況があてはまり、アクセス検査を有効にするとプログラムの動作が異なってくるようであれば、そのプログラムはトラップハンドラの制限の影響を受けている可能性があります。この制限を回避するには、次の操作を実行します。