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.  コマンドリファレンス

索引

エラーの抑止

RTC はエラーレポートの数や種類を限定するよう、エラーの抑制機能を備えています。エラーが発生してもそれが抑制されている場合は、エラーは無視され、報告されずにプログラムは継続します。

エラーは suppress コマンド (suppress コマンド」を参照) で抑止できます。

エラー抑止を取り消すには、unsuppress コマンド (unsuppress コマンド」を参照) を使用します。

抑止機能は同じデバッグ節内の run コマンドの実行期間中は有効ですが、debug コマンドを実行すると無効になります。

抑止のタイプ

次の抑制機能があります。

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

どのエラーを抑止するかを指定する必要があります。次のように、プログラムのどの部分に抑制を適用するかを指定できます。

オプション
説明
大域
スコープが指定されていないと全体のスコープが対象になり、すべてのプログラムに適用されます。
ロードオブジェクト
共有ライブラリなど、すべてのロードオブジェクトが対象になります。
ファイル
特定のファイルのすべての関数が対象になります。
関数
特定の関数が対象になります。
特定のソース行が対象になります。
アドレス
特定のアドレスが対象になります。

最新エラーの抑止

デフォルトで RTC を実行すると、最新のエラーで同じエラーが繰り返し報告されることがなくなります。この機能は、dbx 環境変数 rtc_auto_suppress で制御します。rtc_auto_suppresson のとき (デフォルト)、特定箇所の特定エラーは最初の発生時にだけ報告され、そのあと同じエラーが同じ場所で発生しても報告が繰り返されることはありません。最新エラーを抑止すると、繰り返し実行するループに 1 つのエラーがあっても、それが何度も報告されることがなく、便利です。

エラー報告回数の制限

dbx 環境変数 rtc_error_limit では、報告されるエラーの回数を制限します。エラー制限は、アクセスエラーとリークエラーに別々に設定します。たとえば、エラー制限を 5 に設定すると、プログラムの終了時のリークレポートと、showleaks コマンドの実行ごとに、アクセスエラーとリークエラーがそれぞれ最高で 5 回報告されます。デフォルトは 1000 です。

エラー抑止の例

次の例では、main.cc はファイル名、foobar は関数を示し、a.out は実行可能ファイルの名前を示します。

割り当てが関数 foo で起こったメモリーリークは報告しません。

suppress mel in foo

libc.so.1 から割り当てられた使用中のブロック報告を抑止します。

suppress biu in libc.so.1

a.out の非初期化機能からの読み取りを抑止します。

suppress rui in a.out

ファイル main.cc の非割り当てメモリーからの読み取りを報告しません。

suppress rua in main.cc

main.cc の行番号 10 での重複解放を抑止します。

suppress duf at main.cc:10

関数 bar のすべてのエラー報告を抑止します。

suppress all in bar

詳細については、suppress コマンド」を参照してください。

デフォルトの抑止

RTC では、-g オプション (記号) を指定してコンパイルを行わなくてもすべてのエラーを検出できます。しかし、非初期化メモリーからの読み取りなど、正確さを保証するのに 記号 (-g) 情報が必要な特定のエラーもあります。このため、a.outrui や共有ライブラリの ruiaibair など特定のエラーは、記号情報が取得できない場合は、デフォルトで抑制されます。この動作は、-d オプション (suppress コマンドおよび unsuppress コマンド) を使用することで変更できます。

たとえば、次を実行すると、RTC は記号情報が存在しない (-g オプションを指定しないでコンパイルした) コードについて「非初期化メモリーからの読み取り (rui)」を抑制しません。

unsuppress -d rui

詳細については、unsuppress コマンド」を参照してください。

抑止によるエラーの制御

プログラムが大きい場合、エラーの数もそれに従って多くなることが予想されます。このような場合は、このような場合は、suppress コマンドを使用することにより、エラーレポートの数を管理しやすい大きさまで抑制し、一度で修正するエラーを制限します。

たとえば、一度で検出するエラーをタイプによって制限できます。一般的によくあるエラーのタイプは ruiruawua に関連したもので、この順序で検出されます。rui エラーはそれほど致命的なエラーではなく、このエラーが検出されてもたいていの場合プログラムは問題なく実行終了します。それに比べて ruawua エラーは不正なメモリーアドレスにアクセスし、ある種のコーディングエラーを引き起こすため、問題は深刻です。

まず ruirua エラーを抑制し、wua エラーをすべて修正したあと、もう一度プログラムを実行します。次に rui エラーだけを抑制し、rua エラーをすべて修正したあと、もう一度プログラムを実行します。さらにエラーの抑制をせずに、すべての rui エラーを修正します。最後にプログラムを実行し、エラーがすべて修正されたことを確認してください。

最新のエラー報告を抑止するには、「suppress -last」を実行します。