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 の使用

実行時検査は、影響を受けるメモリーがすでに割り当てられている場合に RUI が検出できなかった例外を伴う接続済みプロセスで機能します。

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

Solaris オペレーティングシステムを実行しているシステムでは、プロセスは開始時に rtcaudit.so を事前に読み込んでおく必要があります。接続先のプロセスが 64 ビットプロセスである場合、次の場所にある 64 ビットの rtcaudit.so を使用します。

64 ビット SPARC プラットフォームの /installation_directory/lib/dbx/sparcv9/runtime/rtcaudit.so

AMD64 プラットフォームの /installation_directory/lib/dbx/amd64/runtime/rtcaudit.so

32 ビットプラットフォームの /installation_directory/lib/dbx/runtime/rtcaudit.so

rtcaudit.so を事前に読み込むには、次のように入力します。

% setenv LD_AUDIT path-to-rtcaudit/rtcaudit.so

rtcaudit.so を常時読み込んだ状態にせず、必要なときにだけ読み込まれるように環境変数 LD_AUDIT を設定してください。例:

% setenv LD_AUDIT...
% start-your-application
% unsetenv LD_AUDIT

プロセスに接続したら、RTC を有効にすることができます。

接続したいプログラムがフォークされるか、または別のプログラムによって実行された場合は、LD_AUDIT をフォークを行うメインプログラムに設定する必要があります。LD_AUDIT の設定値は、フォーク先および実行主体を問わず継承されます。32 ビットプログラムが 64 ビットプログラムをフォークまたは実行する場合、あるいは 64 ビットプログラムが 32 ビットプログラムをフォークまたは実行する場合には、この方法は機能しないことがあります。

環境変数 LD_AUDIT は 32 ビットプログラムと 64 ビットプログラムの両方に適用されるため、64 ビットプログラムを実行する 32 ビットプログラム用、または 32 ビットプログラムを実行する 64 ビットプログラム用に正しいライブラリを選択することが困難です。Solaris OS のバージョンによっては、環境変数 LD_AUDIT_32 をサポートしているものと環境変数 LD_AUDIT_64 をサポートしているものがあり、それぞれ 32 ビットプログラムと 64 ビットプログラムのみを対象としています。実行している Solaris のバージョンで、これらの変数がサポートされているかどうか確認するには、『リンカーとライブラリ』を参照してください。

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

Linux オペレーティングシステムを実行しているシステムでは、プロセスは開始時に librtc.so を事前に読み込んでおく必要があります。接続先のプロセスが AMD64 プロセッサで実行中の 64 ビットプロセスである場合、次の場所にある適切な 64 ビットの librtc.so を使用します。

64 ビット AMD64 プラットフォームの /installation_directory/lib/dbx/amd64/runtime/librtc.so

32 ビットプラットフォームの /installation_directory/lib/dbx/runtime/librtc.so

librtc.so を事前に読み込むには、次のようにします。

% setenv LD_PRELOAD path-to-rtcaudit/librtc.so

librtc.so を常時読み込んだ状態にせず、必要なときにだけ読み込まれるように環境変数 LD_PRELOAD を設定してください。例:

% setenv LD_PRELOAD...
% start-your-application
% unsetenv LD_PRELOAD

プロセスに接続したら、RTC を有効にすることができます。

接続したいプログラムがフォークされるか、または別のプログラムによって実行された場合は、LD_PRELOAD をフォークを行うメインプログラムに設定する必要があります。LD_PRELOAD の設定値は、フォーク先および実行主体を問わず継承されます。32 ビットプログラムが 64 ビットプログラムをフォークまたは実行する場合、あるいは 64 ビットプログラムが 32 ビットプログラムをフォークまたは実行する場合には、この方法は機能しないことがあります。

環境変数 LC_PRELOAD は 32 ビットプログラムと 64 ビットプログラムの両方に適用されるため、64 ビットプログラムを実行する 32 ビットプログラム用、または 32 ビットプログラムを実行する 64 ビットプログラム用に正しいライブラリを選択することが困難です。Linux のバージョンによっては、環境変数 LD_PRELOAD_32 をサポートしているものと環境変数 LD_PRELOAD_64 をサポートしているものがあり、それぞれ 32 ビットプログラムと 64 ビットプログラムのみを対象としています。実行している Linux のバージョンで、これらの変数がサポートされているかどうか確認するには、『リンカーとライブラリ』を参照してください。