 警告: 利用可能なファイル記述子の小さい数は (256) です。  
 もしプログラムのスレッドがあまりに多いようであれば、mt_scalableIf 
 オプションを設定するかもしくはファイル記述子の数の制限値を増やさなくては
 なりません。「help dbxenv」の mt_scalable の項を参照してください。
# Copyright 06/23/98 Sun Microsystems, Inc. All Rights Reserved
#
# helpfile.dbx 1.326 98/06/23
# This is the dbx help file
# Written by Neil Smithline on Sun Sep 20 07:52:08 1992 by copying
# from dbx online help (the old printf mechanism).
#
# The file format is that:
#       comments begin with a `#' and are ignored.
#       #ifdef FOO, #endif works
#       topics begin with a `:topicname' on a line by itself
#       topics with subtopics are `:topicname$$subtopicname' on a line
#               by itself
#       one-line help (for the "commands" command) is `%cmd - helpstring'
#       CDE help-tag markup may be placed on a line that begins with `$'
# A `\' can be put at the beginning of a line and will escape the next
# character.
#
# CDE help-tag markup: use $<ex> ... $<\ex> for examples
#   use $<image> ... $<\image> for fixed format, but not typewriter font
#   use $<p indent> for an indented paragraph
#   use $<otherhead> or $<procedure> for headings
#   use $<newline> to force a newline
#   use $# to prefix text lines that should NOT appear in the CDE helpfile
#
# "See also" should start a separate line.
#
# The script is smart enough to recognize most lists.  For nested lists,
# the second level should use " o " for the bullet, not " * ".
#
# I18N - topicnames should not be translated unless immediately preceded by
# a comment line containing "I18N"
#
# I18N - do not translate any of the command names in this file. To generate
# a list of all dbx command names, run dbx and type
#
#        commands -all
#
# Try not to leave unintentional blank lines as they might end up
# in the output.  If you want to skip a line for clarity, make it
# a null comment.
#
# Tabs are expanded by the preprocessing step to avoid dependencies on
# the user's tab settings.  The filter assumes tabs are set every 8 columns.
#
# Top-level help, result of `help' with no arguments
:command$$summary

コマンドの概要
「commands」を使用して、各 dbx コマンドを簡単に説明したコマンドの
概要を表示することができます。

実行とトレース
  cancel       catch        clear        cont         delete       
  fix          fixed        handler      ignore       intercept    
  next         pop          replay       rerun        restore      
  run          runargs      save         status       step         
  stop         trace        unintercept  when         whocatches   

データの表示と命名
  assign       call         dis          display      down       
  dump         examine      exists       frame        hide       
  print        undisplay    unhide       up           whatis
  where        whereami     whereis      which      

ソースファイルへのアクセス
  bsearch      cd           edit         file         files        
  func         funcs        line         list         loadobject   
  loadobjects  module       modules      pathmap      pwd          
  search

マルチスレッドのデバッグ
  lwp          lwps         sync         syncs        thread       threads 

実行時検査(RTC)
  check        showblock    showleaks    showmemuse   suppress    
  uncheck      unsuppress  

その他
  attach       collector    commands     dalias        dbxenv
  debug        detach       document     help          history
  import       kalias       kill         language      mmapfile
  quit         setenv       sh           source        !
  !!

dbx との GUI インタフェース
  button       unbutton

機械語レベル
  adb          examine      listi        nexti        registers    
  regs         stepi        stopi        tracei       wheni    

言語固有情報のヘルプトピック
  c++          fortran      fortran90    fortran77

# I18N (do not translate "alias", ".dbxrc", "-E", "FAQ", "forwardref",
# "ksh", "lwpid", "MT", or "tid" from the message below)

その他のヘルプトピック
  alias           anachronisms  array-slicing  callbacks     changes
  .dbxrc          dbx           editing        environment   events         
  FAQ             fix-pitfalls  follow-fork    format        forwardref     
  invocation      ksh           lwpid          MT            OpenMP 
  optimized-code  options       path           prettyprint   redirection   
  registers       rtc           scope          signals       startup       
  tid
  
  changes301      changes31     changes32      changes40     changes50
  changes60       changes61     changes62      changes70

個々のコマンドやトピックの詳細を知りたいときは、
コマンド「help <コマンド名>」を使います。
新規の機能や変更に関する情報は「help changes」で入手できます。
「help FAQ」は、dbx に関してよく質問される疑問点と答えをまとめたものです。

########################################################################
################################# Other Topics #########################
########################################################################
# I18N - translate this topicname to match same word in `Other Topics' message
:array-slicing (トピック)
dbx は、配列の断面化を C、 C++、Fortran において print および display コマンド
によってサポートしています。

配列断面化の構文 (C、C++の場合):

    print <配列式>[<最初の式>..<最後の式>:<刻み幅>]

解説:
     <配列式> は配列型もしくはポインタ型の式、<最初の式> と <最後の式> は出力
     対象の最初と最後の要素、<刻み幅> は刻み幅です。 

<最初の式>、<最後の式>、<刻み幅> は評価結果が整数となる (省略可能な) 式です。
<最初の式> と <刻み幅> のデフォルト値はそれぞれ 0 と 1 です。<最後の式> は配列
型の場合のオプションで、デフォルト値は配列の上限です。

例:

(dbx) print arr[2..4]
arr[2..4] =
[2] = 2
[3] = 3
[4] = 4

(dbx) print arr[..2]
arr[0..2] =
[0] = 0
[1] = 1
[2] = 2

(dbx) print arr[2..6:2]
arr[2..8:2] =
[2] = 2
[4] = 4
[6] = 6


配列断面化の構文 (Fortran の場合) :

   print <配列式>(<最初の式>:<最後の式>:<刻み幅>)

解説:
     <配列式> は配列型の式、<最初の式> と <最後の式> は出力対象の最初と最後の
     要素、<刻み幅> は刻み幅です。

<最初の式>、<最後の式>、<刻み幅> は評価結果が整数となる (オプションの) 式です。
<最初の式> と <最後の式> のデフォルト値はそれぞれ配列の下限と上限です。
<刻み幅> のデフォルト値は 1 です。

例:

(dbx) print arr(2:6)
arr(2:6) =
    (2) 2
    (3) 3
    (4) 4
    (5) 5
    (6) 6

(dbx) print arr(2:6:2)
arr(2:6:2) =
    (2) 2
    (4) 4
    (6) 6

#
# I18N - translate this topicname to match same word in `Other Topics' message
:changes (トピック)

dbx 7.0 から 7.1 への主な変更点は次のとおりです。

o dbx を制御し、stop、run、cont およびその他のコマンドで GDB/MI フォーマットを
  出力する、新規 dbxenv 変数 mi_mode。「help dbxenv」の mi_mode を参照。

o プロセスを停止状態のままにする detach の 新規 -stop オプション。
 「help detach」を参照。

o マルチスレッドプログラムの関数呼び出しの条件に役立つイベントハンドラのための
  新規修飾子 -resumeone。「help resumeone」を参照。
  
o OpenMP は Fortran と C をサポートします。

「help changes70」も参照してください。

:changes70 (トピック)
6.2 から 7.0 (Forte Developer 7) への主な変更点は次のとおりです。

o 次の dbxenv 変数が削除されました。
     aout_cache_size
     locache_enable
     delay_xs

  aout_cache_size 変数と locache_enable 変数は、dbx がプログラムや共有ライブラ
  リのシンボル情報をいつ破棄するかを制御するために使用されていましたが、今回の
  リリースではデフォルトの動作を変更できません。dbx は、新しい実行可能ファイル
  をデバッグするときに、それまでの実行可能ファイルのシンボル情報を破棄します。
  また、ライブラリは、ディスク上で更新されるか、dbx セッションが終了するまで再
  利用されます。

  delay_xs 変数は、-xs フラグを付けてコンパイルされたプログラムや共有ライブラリ
  のシンボル情報を、必要になったときに読み込ませる代わりに、すべての情報を一度
  に読み込ませるために使用されていました。今回のリリースでは、シンボル情報は常
  に必要になったときに読み込まれます。

  dbxenv 変数の使用方法や、dbx のバージョンによる違いについては、「help dbxenv」
  を参照してください。

o dbx によって読み込まれたシンボルを制御、表示する「loadobject」コマンドが新し
  く追加されました。「help loadobject」を参照してください。たとえば、ロードオ
  ブジェクトの除外は、今までとは異なる方法で実装されます。

o デフォルトプロンプトは、argv[0] のすべての文字列の代わりに、argv[0] のパスの
  最後の部分を使用します。これにより、PS1 を設定していない V9 dbx のユーザーが、
  (dbx) の代わりに、プロンプトを (.../mumble/foo/bar/dbx) のように認識してしま
  うバグが修正されます。

o SPARC V9 バイナリをサポートするシステムの 64 ビット dbx バイナリの使用を抑止
  するコマンド行オプション「-x exec32」が新しく追加されました。 
  
「help changes62」も参照してください。

:changes62 (トピック)
6.1 から 6.2 (Forte Developer 6 update 2) への主な変更点は次のとおりです。

o dbx 環境変数 rtc_use_traps が削除されました。
  ハードウェアが UltarSPARC であれば、自動的にトラップが使用されます。
o 異なるバージョンの Solaris においてコアファイルを見つけるいくつかの基本サ
  ポートがあります。詳細は「help core mismatch」を参照してください。
o 特定の関数への step をサポートしています。詳細は「help step to」を参照してく
  ださい。
o Intel 上での Fortran 組み込みサポートは削除されました。
o dbx は、いくつかの古い dbxenv 変数を自動的に新しい名前に変更します。
  詳細は「help dbxenv」を参照してください。
o デフォルトのコマンド行編集モードは emacs になっています。詳細は、FAQ の
  「コマンド行編集を使用可能にする方法は ?」を参照してください (「help FAQ」)。
o コレクタの新しい 2 つのコマンド、「pause」と「resume」が実装されました。
  詳細は「help collector」を参照してください。
o コレクタの enable_once コマンドは削除されました。
o コレクタの store コマンドは、実験グループを含むように拡張されました。

「help changes61」も参照してください。 

:changes61 (トピック)
6.0 から 6.1 (Forte Developer 6 update 1) への主な変更点は次のとおりです。

o dbx 環境変数 cfront_demangling が削除されました。
  dbx コマンドに対する -F オプション (cfront_demangling を許可) も削除されまし
  た。cfront をサポートするには、以前のバージョンの dbx を使用してください。
o WorkShop 6 では、Intel Fortran コンパイラは提供されませんでしたが、Intel
  Fortran の組み込み機能は今回のリリースでも有効です。次期リリースの dbx では 
  Intel Fortran の組み込み機能はサポートされなくなる予定です。

「help changes60」も参照してください。 

:changes60 (トピック)
5.0 から 6.0 (WorkShop 6) への主な変更点は次のとおりです。

o clear の代用として、delete および handler と連携させた読み取り専用 ksh 変数 
  firedhandlers の使用 (「help handler」および「help delete」を参照)。
o clear コマンドに対する、クラス内、方式内、関数内で使用される個々のブレークポ
  イントの部分クリア機能の追加 (「help clear」を参照)。
o トレース出力先のファイルへの変更 (「help trace」を参照)。
o プログラム停止時に dbx がソースとともにスタックフレームを自動的に引き上げる
  かどうかを制御する、新規 dbxenv 変数 stack_find_source
  ( 「help dbxenv」の "stack_find_source" を参照)。
o dbx が、別のデバッガまたはデバッグツールの管理下にあるプロセスに接続できるか
  どうかを制御する、新規 dbxenv 変数 proc_exclusive_attach 
  (「help dbxenv」の "proc_exclusive_attach" を参照)。
o step および next がステートメントあるいは全行に対して働くかどうかを制御する、
  新規 dbxenv 変数 step_granularity (「help dbxenv」の "step_granularity" を
  参照)。
o 多数の LWP を持つマルチスレッドアプリケーションのデバッグを支援する、新規 
  dbxenv 変数 mt_scalable (「help dbxenv」の "mt_scalable" を参照)。
o C++ のインラインメンバー関数のブレークポイントの機能の正常化。
  これにはハンドラ条件 (-if) の適切な評価機能が含まれます。
o マルチスレッドアプリケーションのデバッグ時以外でも常時、LWP 関連コマンド 
  (「help lwp」および「help lwps」を参照) が利用可能。
o ハングしているプロセスが Control-C で停止しない場合に、Control-C を 3 回連続
  して強制的にプロセスを停止 (「help interrupt」参照)。
o -g -O でコンパイル時に、完全な行番号を記録。コードスケジューリングのために現
  在行は前後にジャンプしますが、最適化されたコードで「step」および「next」が実
  行可能です。最適化されたコード内では、dbx から表示される変数の値は不確実なま
  まです。

本バージョンとリリース 5.0 は、以下の点で互換性がありません。

o trace コマンドの古い構文は使用できなくなりました (詳細は「help trace」を参照)
o dbxenv の mt_watchpoints は削除されました。ウォッチポイントは常時使用できます
o Objective C はサポートされなくなりました。Objective C のデバッグには、リリース
  5.0 を使用してください。

「help changes50」も参照してください。

:changes50 (トピック)
4.0 から 5.0 (WorkShop 5) への主な変更点は次のとおりです。

o より高速で機能豊富なデータウォッチポイント (「help event watchpoint」を参照) 
  (Solaris 2.6、2.7)。
o 新しいシェル変数 $machtype および $datamodel (「help event variables」を参照)
o「call」の異常終了後、クリーンアップに「pop -c」を使用できる 
  (「help pop」と「help call」を参照)。
o より機能豊富な「拡張」ボタンコマンド (「help buttonx」を参照)。
o 起動時にロードオブジェクトのシンボリック情報を読み飛ばせる。
  (「help loadobjects」と「help loadobject management」を参照)。
  ロードオブジェクトのシンボル情報を事前にロードできる。このため、これから 
  dlopen() される共有オブジェクト中にもブレークポイントを挿入できます
  (詳細は「help loadobjects」と「help loadobject management」を参照)。
o スレッドレベルの同期 (ロック) を処理する新しいコマンド 
  (「help sync」および「help thread」を参照)。
o -xs オプション付きでコンパイルされたモジュールのデバッグ情報は、dbx の起動時
  にはロードしない。情報は、必要にに応じてロードされます。これにより、dbx 起動
  時の速度が大幅に上がるので -xs オプションを使用しやすくなります
  (「help dbxenv」の「delay_xs」を参照)。
o ハンドラを持たない C++ 例外と、予想外の C++ 例外を阻止 (捕獲) するかどうかを
  dbx で明示的に制御可能。これまでは、これらの例外は必ず阻止されていました 
  (「help intercept」を参照)。
o リモートホストからのコアファイルのデバッグが可能
  (「help loadobject exclusion」を参照)。

本バージョンとリリース 4.0 は、以下の点で互換性がありません。

o 「-」のないイベント指定修飾子は、現在では使用できません。
   (「help anachronisms」を参照。）

:changes40 (トピック)
3.2 から 4.0 (WorkShop 4.0) への主な変更点は次のとおりです。

o コレクタが MT アプリケーションをサポート (「help collector mt」を参照)。
o fork/exec/attach で実行時検査 (RTC) をサポート (詳細については
  「help rtc attach」を参照)。
o RTC に アプリケーション固有のアロケータをトレースするための API が追加
  (「help rtc api」を参照)。
o レジスタの現在の値を表示する新しいコマンド regs (「help regs」を参照)。
o ヒープブロックに関する詳細を表示する新しいコマンド showblock 
  (「help showblock」を参照)。
o 拡張された pathmap コマンド(「help pathmap」を参照)。
o 新しい dbxenv 変数、language_mode (「help dbxenv」の「language_mode」を
  参照)。
o 新しい dbxenv 変数、output_inherited_members
  (「help dbxenv」の「output_inherited_members」を参照)。
o 2 つの新しい dbx 読み出し専用変数、$helpfile および $helpfile_html 
  (「help help」を参照)。
o module および modules コマンドへの新しい -v (冗長) フラグ 
  (「help module」と「help modules」を参照)。
o print および display コマンドへの新しい +r フラグ (「help print」を参照)。
o dbxenv 変数のデフォルト値「scope_look_aside」がオンに変更されている 
  (「help dbxenv」の「scope_look_aside」と「help scope」を参照)。
o 「stop inobject <c++ のオブジェクト式>」をサポートするための新しい inobject 
  イベント (「help c++ inobject」と「help event specification」を参照)。
o inclass イベントがテンプレートクラスをサポート (「help c++ inclass」と
  「help event specification」を参照)。
o 「stop at <行番号>」が、C++ テンプレート定義およびヘッダーファイルに定
  義された C++ インライン関数をサポート (「at」イベントの
  「help event specification」を参照)。
o 新しい C++ 演算子、const_cast、dynamic_cast、reinterpret_cast、および
  static_cast をサポート。
o 新しい C++ 演算子 typeid をサポート。
o ヘルプファイルの HTML バージョンが利用可能 (「help help」を参照)。

「help changes32」も参照してください。
# I18N - translate this topicname to match same word in `Other Topics' message
:changes32 (トピック)
3.1 から 3.2 (SPARCWorks 3.1) への主な変更点は次のとおりです。

o Objective C のサポート。
o Fortran 90 のサポート (「help fortran」を参照)。
o 実行時検査 (RTC) でメモリーの使用状況に関する情報を提供 (「help check」と
  「help showmemuse」を参照)。
o whereis -a でアドレスのシンボル名を表示 (「help whereis」を参照)。
o Pascal の with 文のサポート。
o SPARC V8+ のサポート (「help dbxenv」と「help registers」を参照)。
o ストリップされたバイナリのサポートの強化。
o すべてのコマンドについて 1 行ずつの説明を表示 (「help commands」を参照)。
o dbx による、符号なし、long、long long を表す接尾辞 U、L、および LL の
  出力と受容。

「help changes31」も参照してください。
# I18N - translate this topicname to match same word in `Other Topics' message
:changes31 (トピック)
3.0.1 から 3.1 (SparcWorks 3.0.2) への主な変更点は次のとおりです。

o Run Time Checking (RTC) でのマルチスレッドアプリケーションのサポート。
  「help rtc mt」を参照。
o adb モード (詳細は、「help adb」を参照)。
o 出力書式制御 (「output_base」の「help dbxenv」を参照)。
o C、C++ の配列断面化 (「help array-slicing」を参照)。
o Fortran の組み込み関数のサポート。
o $[] の print フラグ (「help ksh の式」を参照)。
o printf スタイルの出力書式制御 (「help format」を参照)。
o ユーザー指定プリティプリント関数のサポート （「help prettyprint」を参照)。
o runargs コマンド (「help runargs」を参照)。

「help changes301」も参照してください。
#
# I18N - translate this topicname to match same word in `Other Topics' message
:changes301 (トピック)
2.0.1 から 3.0.1 への主な変更点は次のとおりです。

(1) 新しい korn シェル型コマンドインタプリタ (詳細は「help ksh」を参照)。
(2) マルチスレッドプログラムに対応 (「help MT」を参照)。
(3) C++ への対応の改善 (「help c++」を参照)。
(4) $[] を使用した 「言語式」(「help ksh expressions」を参照)。
(5) より強力なイベント機構 (「help event」を参照)。
(6) 高速のデータ領域監視「ウォッチポイント」(「help event watchpoint」での
    解説を参照)。
(7) exec() と fork() の自動追尾 (「help follow_fork」と「help debug clone」
    を参照)。
(8) 修正継続。(「help fix」を参照)。
(9) 実行時検査 (「help check」と「help showleaks」を参照)。

本バージョンとリリース 2.0.1 には、以下の点で互換性がありません。

(1) address/format コマンドは  x address/format になりました。
(2) address = format コマンドは x address = format になりました。
(3) /pattern コマンドは search pattern になりました。
(4) ?pattern コマンドは bsearch pattern になりました。
(5) set コマンドは Korn シェルの set コマンドになりました。assign を
    使用してください。
(6) modules コマンドの構文が変わりました (「help module」および
   「help modules」を参照）。
(7) コアファイルは、明示的に要求されている場合にのみ使用されます。
(8) status からリダイレクトされた出力を入力として使用することはできません
    (「help status」を参照)。

#
#
:anachronisms (トピック)
dbx がバージョンを重ねるのに伴って、コマンドと構文も新しい形式へと変化します。
下位互換性を維持するための試みは行われていますが、互換性の維持が常に可能である
とは限りません。そのような場合、dbx は古い構文を検出してもその構文を受け付けま
すが、「廃止された機能」("anachronism") であることを示す警告メッセージを出力し
ます。このメッセージは、将来のリリースの dbx ではそのコマンドまたは構文が使用
できなくなることを意味します。

現在維持されている下位互換性は次のとおりです。

o dbx リリース 4.0 では、「trace」コマンドが「stop」および「when」で使用される
  構文と一致する形に変更されました。BSD dbx 形式のコマンド構文による「trace」
  も、まだ可能な限り受け付けられます。「help trace」と「help tracei」を参照。

o dbx リリース 4.0 では、「use」コマンドが適切な「pathmap」コマンドにマップさ
  れました。「help use」を参照してください。

o dbx リリース 4.0 では、getopt() 互換のコマンド行オプションに切り換わっていま
  すが、古い形式のコマンド行オプションも受け付けられます。

o dbx リリース 3.2 で、fix コマンドの -d オプションは -f で置き換えられました。

o リリース 3.0 以降、「stop」および「when」コマンドは、「in」や「at」のような
  キーワードを使用してイベントを識別するようになっています。キーワードが認識さ
  れない場合は、<変数> または <式> が指定されたものと見なされました。リリース 
  4.0 では、<変数>, <条件式> という形式でイベントを指定するキーワードなしの構
  文を段階的に廃止する目的で、キーワード「cond」および「change」が導入されまし
  たが、前者の形式もまだ有効です。「help event specification」を参照してくださ
  い。

次に、現在ではサポートされていない下位互換性を示します。

o dbx リリース 3.0 では、「stop」と「when」で使用できた自由書式の英語に似た構
  文によるイベント指定が正式に認められていました。
  「help event specification」を参照してください。現在では、すべてのイベント指
  定修飾子の前に「-」を付ける必要があります。したがって、「-」を付けない次のよ
  うな修飾子は受け付けられません。

        if <cond>
        in <func>
        <lwpid>
        <tid>
#


:.dbxinit (dbx トピック)
非常に古いバージョンの dbx では、「.dbxinit」という起動ファイルを読み込んでい
ました。このファイルは、「.dbxrc」ファイルとは構文が多少異なります。最近までは、
「.dbxrc」ファイルが見つからず、「.dbxinit」ファイルが見つかった場合に、dbx は
これらの旧形式の起動ファイルを読み込んでいましたが、この機能は廃止されました。
今まで使用していた「.dbxinit」ファイルを引き続き使用したい場合は、構文を若干修
正し、ファイル名を「.dbxrc」に変更する必要があります。

そのためには、「alias」コマンドを「dalias」に変更するか、新しい ksh 形式の
「alias」コマンドに合わせて構文を変更します。

すなわち、「alias foo bar baz」を「dalias foo bar baz」に、または
          「alias foo bar baz」を「alias foo="bar baz"」に変更します。

有用な別名とカスタマイズについては、「help .dbxrc」を参照してください。



:.dbxrc (dbx トピック)
\# .dbxrc ファイルにこのヘルプトピックの内容を入れるには、次のコマンドを
\#  使用します。
\#      help .dbxrc >$HOME/.dbxrc
\# オプションを使用可能にするには、次のコマンドを使用します。
\#      help .dbxrc | sed 's/^##/  /' >$HOME/.dbxrc
\# 続けて次のコマンドを実行します。
\#      source $HOME/.dbxrc
\
\
\# 次の項では、.dbxrc ファイルの典型的な項目を示します。
\
\#  set +o path              # この行のコメントを解除すると、$PATH 検索が無効に
\#                           # なります。
\## set -o ignoresuspend     # コメントを解除すると、dbx が ^Z を無視します。
\## set -o emacs             # コメントを解除すると、emacs 形式の行編集機能が
\#                           # 有効になります。
\#  set -o vi                # この行のコメントを解除すると、vi 形式の行編集
\#                           # 機能が有効になります。
\## dbxenv output_short_file_name on
\ #                          # ファイルの短形式パス名を印刷します。
\## dbxenv scope_look_aside on # ファイルの静的シンボルがスコープ内になくても
\#                           # 検索します。
\## dbxenv output_dynamic_type on  # -d が、print と display コマンドのデフォ
\#                           # ルトになります (C++)。
\#  dbxenv stack_verbose off # 引数および行番号の印刷を、where で抑制します 
\#                           # (パフォーマンスが向上)。
\## button ignore step up    # 「step up」 ボタンを GUI に追加します。
\
\#dbx のジャーナル収集が稼働状態になります。これは、サポート担当者が
\# dbx の障害を診断する助けになります。64 ビットカーネルを持つ SPARC V9
\# マシンでデバッグを行う場合は、次の 2 行のコメントを解除してください。
\#
\#  import /opt/SUNWspro/lib/v9/debugging.so >/dev/null
\#  log -default -start
\#
\#それ以外の場合は、次の 2 行のコメントを解除してください。
\#
\#  import /opt/SUNWspro/lib/debugging.so >/dev/null
\#  log -default -start

\
\#有用な別名
\#
\## kalias alias=kalias         # ksh 別名構文の使用を保証。
\## alias n=next
\## alias N=nexti
\## alias s=step
\## alias S=stepi
\## alias su="step up"
\## alias c=cont
\## alias p=print
\## alias q=quit
\## alias w=where
\## alias si="stop in"
\## alias sa="stop at"
\## alias sm="stop modify"
\## alias sr="stop returns"
\## alias sif="stop infunction"
\## alias sim="stop inmember"
\## alias sic="stop inclass"
\## alias en="handler -enable"
\## alias di="handler -disable"
\## alias wi=whatis
\## alias l=list
\## alias u=up
\## alias d=down
\## alias h=history
\## alias f=frame
\## alias goto="stop at !:1 -temp; cont"
\## button lineno goto
\
\# 有用な関数
\
\## function hex     # 引数を 16 進で出力
\## {
\##     : ${1?"usage: $0 <expr>  # print <expr> in hex"}
\##     typeset -i16 x
\##     ((x = $[(int)$*]))
\##     echo - $* = $x
\## }
\## typeset -q hex
\
\## function pp # ポインタを出力。式をシンボリックアドレス
\## {           # および 16 進値で出力。
\##     : ${1?"使用法: $0 <式> # 式をシンボリックアドレスおよび 16 進値で出力。"}
\##     builtin examine $[(int)$*]/X
\## }
\## typeset -q pp
\
\## function offsetof  # 型 $1 内における $2 のオフセットを出力。
\## {
\##     : ${2?"使用法: $0 <構造体名> <フィールド名>  # 構造体の中のフィールド
\##                                                    のオフセット。"}
\##     [ -z "$3" ] || { echo "$0: 予期せぬ引数" >&2 && return; }
\##     echo - $[(int)(&((($1*)0)->$2))]
\## }
\## alias off=offsetof
\
\## function environment  # ターゲットプロセスの環境変数のダンプ
\## {
\##     [ -z "$1" ] || { echo "$0: 予期せぬ引数" >&2 && return; }
\##     typeset -i i=0
\##     typeset env="((char **)$[(char**)environ])"
\##     while :
\##     do
\##         x=$[($env)[$i]]
\##         echo "$i: " "${x#0x*\ }"
\##         case "$x" in
\##         *\(nil\)*)    break;;
\##         esac
\##         ((i += 1))
\##     done
\## }
\
\## function hexdump      # 16 進で $2 バイト分 (デフォルト: $1 のサイズ) ダンプ
\## {
\##     : ${1?"使用法: $0 <式> [<サイズ>]  # 16 進で <サイズ> バイトをダンプ。"}
\##     typeset -i16 p="$[(void *)&$1]"                     # $1 のアドレス。
\##     typeset -i s="${2:-$[sizeof ($1)]}" >/dev/null 2>&1 # バイト数。
\## 
\##     builtin examine $p/$[(${s:-4}+3)/4]X
\## }
\## typeset -q hexdump
\
\## alias hd=hexdump
\
\## button literal hexdump       # コメントを解除すると、GUI ボタンが
\                                # インストールされます。
\
\## if $havegui
\## then
\##     SMSO=                    # GUI での反転表示を使用不可能にする。
\##     RMSO=
\## else
\##     SMSO=$(tput smso)        # standout モード (反転表示) 開始。
\##     RMSO=$(tput rmso)        # standout モード終了。
\## fi
\
\## PS1="$SMSO(dbx !)$RMSO " # プロンプトを反転表示させ、履歴番号も表示。
\
\# 次に _cb_prompt コールバックルーチンの例を示します。「help callbacks」を
\# 参照してください。
\
\# function _cb_prompt
\# {
\#     if $mtfeatures
\#     then    # プロンプトを MT デバッグ用に設定します。
\#             PS1='${SMSO}${thread} ${lwp} <!>${RMSO} '
\#     else    # プロンプトをマルチスレッド対応でないデバッグ用に設定します。
\#             PS1='${SMSO}dbx<!>${RMSO} '
\#     fi
\# }
\
#
# I18N - translate this topicname to match same word in `Other Topics' message
:events (トピック)
dbx では、イベント発生時にプロセスの停止、任意のコマンドの実行、または情報の表
示を行うことができます。最も簡単なイベント例はブレークポイントです。その他のイ
ベント例には、フォルト、シグナル、システムコール、dlopen、ウォッチポイントなど
があります。

次のコマンドは、イベントに対するハンドラを作成し、それぞれ固有の副作用を持ちま
す。

        stop <イベント指定>   # 指定されたイベントが発生した場合、停止して、
                              # ユーザーにプロンプトを出します。  
        when <イベント指定> { <コマンド> ; [ ... ] }
                              # 指定されたイベントが発生した場合、コマンド
                              # を実行します。
        trace <イベント指定>  # 指定イベントの「トレース」を表示します。

イベントの完全なリスト、イベントの定義、stop、when、および trace コマンドに指
定できる <イベント指定> 構文については「help event specification」を参照してく
ださい。

これらのコマンドはすべてハンドラの ID <hid> を返します。この ID は以下のコマン
ドで使用できます。また、<hid> の代わりに all を指定することも可能です。

status [ <hid> ]        # 指定されたハンドラをリストします。何も指定されて
                        # いなければ、すべてリストします。
handler -disable <hid>  # 指定されたハンドラを無効にします。
handler -enable <hid>   # 指定されたハンドラを有効にします。
handler -reset <hid>    # <hid> のカウンタをリセットします 
                        # (「help event specification」 を参照してください) 。
delete <hid>            # 指定されたハンドラを削除します。
clear <行番号>          # 指定された行にあるハンドラを削除します。
clear                   # clear $lineno の短縮形。

「help event」も参照してください。

# I18N - translate this topicname to match same word in `Other Topics' message
:finding-files (トピック)
dbx では、プログラムに関連付けられたソースおよびオブジェクトファイルを検索する
ときに問題が生じることがあります。

仕組み

デフォルトでは、シンボル情報は .o ファイルに格納されます。dbx はソース行情
報にアクセスするために .o ファイルを探してロードする必要があります。.o ファ
イルの場所は実行可能ファイルのインデックスに記録されています。このフルパス
名は、コンパイラによって記録されるので、コンパイラから見た作業ディレクトリ
とフルパス名を反映しています。 

実行可能ファイルのサイズを小さく維持するために、必ずしもすべてのシンボル情
報がそのファイルに格納されるわけではありません。コンパイラの -xs フラグを指
定してソースをコンパイルすると、すべてのシンボル情報が実行可能ファイルにコ
ピーされます。 

以前のリリースでは、すべてのシンボル情報を dbx にロードするために必要な時間
が問題でした。しかし、dbx 5.0 以降は、情報は必要に応じて抽出されるので、初
期ロード時間は -xs オプションを使用しない場合と同じくらい速くなりました。 

シンボル情報がロードされると、dbx はソース行を表示し、.o ファイルに対応す
るソースファイルを開こうとします。ソースファイルと .o ファイルとの間の通信
は、実行可能ファイルのインデックスに記録されます。 

dbx は、記録されているフルパス名をもとにオブジェクトファイルにアクセスしま
すが、ソースファイルには通常、ファイルのベース名だけを指定します。以下に例
を示します。 

stop at test.cc:34

dbx は、内部データベースでこのファイルを検索します。 

失敗のシナリオおよび回避策

o ソースファイルが削除されています。 
  この場合、対策はほとんどありません。dbx はソースを表示できませんが、オ
  ブジェクトファイルにアクセスする場合 (または -xs が使用されていた場合)
  は、スタックをトレースし、変数の値を表示し、現在行も知ることができま
  す。 

o オブジェクトファイルが削除されています。 
  この場合、シンボル情報全体にアクセスできません。回避するには、-xs フラ
  グを使用してコードをコンパイルしてください。 

o ソースファイルまたはオブジェクトファイルが削除されています (ただし名前
  は変更されていません)。 

  pathmap コマンドを使用します。たとえば、ファイルが
        /home/jack/project/main.c
  から
        /home/jill/project/main.c
  に移動されている場合は、次のように入力します。 
        pathmap /home/jack /home/jill 
  pathmap コマンドはディレクトリパスに対してのみ有効なので、Jill が
  main.c を Main.c と名前を変更した場合は、pathmap コマンドでは処理でき
  ません。 

o ディレクトリ名のシンボリックリンク 
  コードを /home/jack/project でコンパイルしましたが、ソフトリンク
  /company/projects/project-j -> /home/jack/project 
  によって (または別の方法で) ディレクトリを変更した後でデバッグしてい
  ます。いずれの場合も問題はありません。 

o ファイル名のシンボリックリンク 
  自分のプロジェクトが以下のようにレイアウトされているとします。 
        .../proj/src/t.c
        .../proc/sparc/t.c -> ../src/t.c
        .../proc/intel/t.c -> ../src/t.c 
  このような場合は問題はありません。しかし、ソフトリンクの名前が実際のフ
  ァイルの名前と異なるときは、dbx はどのような場合でもソースファイルを見
  つけることができません。以下に例を示します。 
        .../proj/win/Toot.cpp
        .../proj/unix/toot.cc -> ../win/Toot.cpp 
  このような場合のルールは、「ソフトリンク名を使用してコンパイルしたとき
  は、dbx はファイルをそのソフトリンク名で探す。逆の場合も同じ」です。ソ
  ースファイルまたはオブジェクトファイルは異なるマシンからアクセスされま
  す。 

  ファイルはマシン bean 上でコンパイルされますが、Jack は Jill のマシン上で
  それらのファイルをデバッグしています。デバッガは /home/jack/project
  でファイルを検索しますが、Jill のマシンからはアクセスできません。この場
  合の解決策も上記と同じで、pathmap コマンド を次のように使用することで
  す。 
        pathmap /home/jack /net/bean/home/jack 

o あいまいなソースファイル名 
  自分のプロジェクトが以下のように構成されているとします。 
        /home/professor/project/main/file.c
        /home/professor/project/module1/file.c
        /home/professor/project/module2/file.c
  またはより一般的に、アプリケーションを構成するコンポーネントがさまざま
  な人によって保持されているとします。 
        /home/jack/project/...
        /home/jack/project/test.c
        /home/jill/project/...
        /home/jill/project/test.c 
  次のように入力した場合、 
        stop at test.c:35 
  dbx はファイルを無作為に選択します。この問題を解決するため、dbx は右端
  固定型一致アルゴリズムを使用してファイル名を検索します。そのため、以下
  のいずれかを入力してください。 
        stop at main/file.c:50 
        stop at jill/project/test.c 
#
# I18N - translate this topicname to match same word in `Other Topics' message
:fix-pitfalls (トピック)
        修正継続機能の制約と注意
        ------------------------

修正継続機能 (Fix and Contiue) の使用時は次の方法でソースを修正できます。

 * 関数中の行を追加、削除、変更する。
 * 関数を追加、削除する。
 *  大域および静的変数を追加、削除する。


         制約
         ----

関数を旧ファイルから新ファイルへマップすると dbx で問題が生じる可能
性があります。ソースファイルの編集中にこの種の問題が生じないようにす
るためには、以下の操作を行わないようにすることが大切です。

 * 関数の名前を変更する。
 * 関数の引数の型を追加、削除、変更する。
 * スタックで活動状態になっている関数の局所変数の型を追加、削除、変更する。
   (詳細は、「pop」を参照)
 * C++ テンプレート関数定義の本体だけを変更できます。テンプレートの宣言
   またはテンプレートのインスタンスを変更する場合はプログラム全体を作り直
   す必要があります。
 * 共有オブジェクトファイル (.so) を修復する場合は a.out のソースを変
   更する必要があります。Fix and Continue を正常に機能させるためには共有
   オブジェクトを特別なモード (RTLD_NOW|RTLD_GLOBAL または
   RTLD_LAZY|RTLD_GLOBAL) で dlopen しなければなりません。

        注意
        ----

Fix and Continue 後にプログラムを再開した場合に、ソースに加えた実際の
変更と直接的には関係しないエラーが発生することがあります。ソースを変更
した後にプログラムを再開する場合は、その前に次の条件に注意することが大
切です。

 * 変更対象の関数が (トップフレームではなく) スタック上ですでにインスタ
   ンス化されている場合は、そのフレームに復帰したとき以前のコード 
   (変更前のコード) が実行されます。

 * 以前のコードのスタック上ですでにインスタンス化されていた関数の
   ブレークポイントは失われます。

 * 大域変数に対する変更は pop もしくは fix コマンドで取り消されません。
   大域変数に対しては、assign を使って手動で適切な値を代入し直さ
   なければなりません。

 * 静的変数の値は通常は修復後も維持されます。ただし、ファイルが元々デバ
   ッグ情報付きでコンパイルされたものでない場合は、ファイル内の静的変数は
   修復のたびに初期化されます。その場合は、 assign を使って静的変
   数に適切な値を代入し直す必要があります。

 * 編集の結果、ソースコードの行数が変化した場合は、ブレークポイントの
   位置が正しくなくなります。dbx は、ブレークポイントの位置が変化した
   ことを警告します。プログラムを実行する前に status コマ
   ンドで新しいコードのブレークポイントの位置を調べてください。

 * プログラムカウンタは、新しい (修復後の) 関数の同じ行の先頭に移動し
   ます。関数を変更した場合は、プログラムカウンタの位置がずれることがあ
   ります。その場合は、次のいずれかを行なってください。

        o pop コマンドを使用する。スタックからフレームがポップされ、
          cont で関数に再び入ります。

        o cont at <行番号> で別の行から再開する (実質的に pc
          を移動してから実行するのと同じ)。

        o 手動でデータ構造を修復 (assign を使用) してから実行
          を再開する。

        o プログラムを実行し直す。

 * C++ テンプレート定義を変更する場合は、そのテンプレートのインスタンス
  を定義しているファイルに対して fix コマンドを実行しなければなりません。

# I18N - translate this topicname to match same word in `Other Topics' message
:forwardref (トピック)
dbx は、現在の有効範囲 (スコープ) 内で後から定義される前方参照をすべて正しく
処理します。たとえば、

        struct foo;
        struct foo *fp;
        struct foo { /* stuff */ };

のようなコードでは、dbx によって fp の間接指定 (例: print *fp) を行うことが
できます。現在の適用範囲において前方参照が定義されていないと、間接
指定の処理に問題が発生する場合があります。たとえば、

        struct bar;
        struct bar *bp;
        /* struct bar の定義はこれ以上ない */

では、dbx はコマンド print *bp を評価できないことがあります。このような場合に
は、次のようにポインタを定義済みの型に明示的にキャストすることができます。

        print *(`bar.cc`struct bar *)bp

ここでは、bar.cc は struct bar を定義するファイルです。C++ では、このコマンド
を次のように短縮することができます。

        print *(`bar.cc`bar *)bp

また、別の方法として、コマンド module bar.cc を発行することもできます。これに
よって、それ以降の型 bar の出力が正常に行われるようになります。
:follow-fork (コマンド)

dbxenv follow_fork_mode ...     # プロセスが fork/vfork/fork1 を実行する場合、
dbxenv follow_fork_mode parent  # ... 親を追尾します (デフォルト)。
dbxenv follow_fork_mode child   # ... 子を追尾します。
dbxenv follow_fork_mode both    # ... 親と子の両方を追尾します。(GUI のみ)
dbxenv follow_fork_mode ask     # ... 上記のどちらをユーザーが要求しているかを
                                #      問い合わせます。
dbxenv follow_fork_inherit ...  # 子を追尾する場合、
dbxenv follow_fork_inherit on   # ... イベントを継承します。
dbxenv follow_fork_inherit off  # ... イベントを継承しません (デフォルト)。
「help dbxenv」の follow_fork_mode_inner という名前の変数も参照してください。


プロセスがいくつかの fork をおこない、いずれの fork を追跡すればよいかわかりに
くいときがあります。現スタックトレースにより正確な選択が行えるように GUI を使
用することをお勧めします。
GUI を使用しないのであれば、メニューから抜けることが可能な ask モードを使用す
ることをお勧めします。それにより where を実行できます。その後 cont は再度問い
合わせを行います。
:OpenMP (トピック)

dbx の OpenMP デバッグサポートは dbx の一般的なマルチスレッドデバッグ機能に基
づいています。
全てのデバッグ情報を得るためには、-xopenmp=noopt -g フラグを付けてプログラムを
コンパイルする必要があります。

dbx によって OpenMP 並列領域へのシングルステップが可能です。
しかし平列領域へ入ったスレッドはステップを開始したスレッドと同じではないかもし
れません。平列領域はアウトライン化され、実行時ライブラリから呼び出されるからで
す。平列領域へのシングルステップは実際に、いくつかのライブラリ呼び出しとスレッ
ド作成を伴います。

dbx によって、共有、非公開またはスレッド非公開変数を出力することができます。
もし threadprivate 変数を平列領域以外から出力するならば、threadprivate 変数の
マスタースレッドのコピーが出力されます。
:optimized-code (トピック)

最適化とデバッグを同時に有効にしてプログラムを (-O -g オプションを使用して)
コンパイルすると、dbx は制限されたモードで動作します。 

コンパイラがどのような環境下でシンボリック情報を生成するかは、
不安定なインターフェースやリリース間の違いを考慮しなくてはなりません。

ソース行情報は使用できますが、最適化プログラムでは 1 つのソース行に対するコ
ードが複数の異なる場所に表示される場合があるので、プログラムをソース行ごとに
ステップ実行すると、オプティマイザがコードをスケジュールした方法に応じて「現
在の行」がソースファイル内のさまざまな場所にジャンプする結果となります。 

末尾呼び出しの最適化は、関数内の最後の有効な動作が別の関数呼び出しであるよう
な場合、スタックフレームが失われる結果となる場合があります。 

通常は、最適化プログラムでは引数、局所変数、大域変数のシンボル情報を使用でき
ます。構造体、共用体、C++ クラスに関する型情報、および局所変数、大域変数、
引数の型と名前も使用できる必要があります。C++ コンパイラは局所変数についての
シンボルの型情報を提供しませんが、C コンパイラでは提供されます。

最適化プログラムでは、プログラム内でのこれらの項目の場所に関する完全な情報は
使用できません。

大域変数は通常の場合と同じように表示したり、代入したりできますが、最終的なレ
ジスタからメモリーへの格納が行われていない場合はその値は不正確である可能性が
あります。 

引数のレジスタはコンパイラが再利用できるので、関数の先頭で停止している場合に
限り、引数を表示することができます。最適化プログラムでは、スタック変数のスタ
ックおよびレジスタの場所が記録されないので、スタック変数の値は表示したり、変
更したりできません。 

マニュアルの『プログラムのパフォーマンス解析』には、最適化プログラムを
デバッグするときに参考となるようなコンパイラの最適化に関する詳細な情報が
記載されています。


:optimization
                        # 「help optimized-code」を参照してください。
#
# I18N - translate this topicname to match same word in `Other Topics' message 
:dbx
                        # 「help invocation」を参照してください。
:options
                        # 「help invocation」を参照してください。
:^C (トピック)
「help interrupt」参照
:interrupt (トピック)
実行中のプロセスは ^C で割り込みを行うことが可能です。プロセスは SIGINT で
停止し、dbx はプロンプトを表示します。「cont」や「step」などは、実行を継続し
て SIGINT を無視します。SIGINT の転送には、"cont -sig int" のようなコマンド
を使用してください。

ある条件下では、次の警告が表示されることがあります。
        警告: 割り込みは無視されましたが、子に転送されました。
dbx とデバッグ中のプロセスが同一端末で制御されている場合 (GUI 以外をデバッ
グ中で「run」を使用しているような場合)、^C は dbx とプロセスの両方に渡され
る SIGINT に変換されます。dbx は送られてきた SIGINT を無視します。最終的に
デバッグ中のプロセスが SIGINT を受け取ったときにプロンプトが表示される
ことになります。

^C が無効になる場合があります。マルチスレッドアプリケーションをデバッグ中の
場合や、アプリケーションが SIGINT をブロックしているような場合です。このよ
うな状況下では、^C を 3 回くり返すと別の割り込み手段として dbx にプロセス
を停止させることができます。

:invocation (トピック)
dbx は次のようなコマンド行引数を認識します。

        -c <コマンド>   # 入力プロンプトを出す前に <コマンド> を実行。
        -C              # 実行時検査 (RTC) を稼働。「help check」による解説を
                        # 参照。
        -d              # -s とともに使用し、読み取り後に <ファイル> を削除。
        -f              # コアファイルが一致しない場合でも強制的にロード。
        -h              # dbx に関する使用ヘルプを表示。
        -I <ディレクトリ>     
                        # <ディレクトリ> に指定されるディレクトリを pathmap 
                        # 設定に追加(「help pathmap」を参照)。
        -k              # キーボード変換状態の保存と復元。
        -q              # スタブの読み取りに関するメッセージを抑制。
        -r              # プログラムを実行。正常終了時には、dbx も終了。
        -R              # dbx に関する readme ファイルを表示。
        -s <ファイル>   # .dbxrc や .dbxinit の代わりに <ファイル> を使用。
        -S              # サイト固有の init ファイルの読み取りを抑制。
        -V              # dbx のバージョンを表示。
        -w <数>         # where コマンドの <数> 個のフレームをとばす。
        -x exec32       # 32 ビットモード。
                        # SPARC V9 バイナリをサポートするシステムで 64 ビット
                        # の dbx バイナリの使用を抑止。代りに SPARC V8 の
                        # dbx を使用。
        --              # オプションリストの終端をマーク。プログラム名が
                        # ダッシュで始まる場合に使用。

次のオプションは dbx 自身のデバッグを行うためのものです。
        -e              #実行前にコマンドをエコー。

-r を使用した場合は、プログラム名の後にプログラムの引数が続きます。その他の
場合は、プログラム名で終わるか、プログラム名の後にコアファイル名またはプロセス 
ID が指定されていなければなりません。

        dbx [オプション] <プログラム>     # <プログラム> をデバッグ。
        dbx [オプション] <プログラム> <コアファイル>
                                          # <プログラム> を <コアファイル> 
                                          # 付きでデバッグ。
        dbx [オプション] <プログラム> <pid> 
                                          # プロセス ID <pid> の  <プログラム>
                                          # をデバッグ。
        dbx [オプション] - <pid>          # プロセス ID <pid> をデバッグ。
                                          # dbx はプログラムを /proc から
                                          # 自動的に発見。
        dbx [オプション] - <コアファイル> # <コアファイル> というコアファイルを
                                          #  使ってデバッグ。
                                          # 「help debug」も参照。
        dbx [オプション] -r <プログラム> <引数> 
                                          # <プログラム> を <引数> 付きで実行。
                                          # 異常終了時のみ <プログラム> の
                                          # デバッグを開始。

#
:core (トピック)

コアファイルは、dbx の起動時にコマンド行で指定するか、dbx の起動中に「debug」
コマンドのオプションとして指定することができます。この場合、クラッシュしたプロ
セスのイメージを調査し、クラッシュの原因を特定できるようになります。
コアファイルを指定する場合に、実行可能ファイル名として「-」を指定すると、実行
可能ファイルの指定を省略することができます。

バイナリの検出
--------------

コアファイルだけが指定され、バイナリ名が指定されなかった場合、dbx はコアファイ
ルからプログラム名を抽出しようとします。コアファイルに完全なパス名がなければ、
dbx は実行可能ファイルを見つけられないことがあります。プログラムを実行するため
に長いパス名が使用された場合は、コアファイルの中でパス名が切り詰められる場合が
あります。その場合は、dbx にコアファイルを読み込ませるときに、バイナリの完全な
パス名を指定してください。

コアファイルの切り捨て
----------------------

コアファイルの読み込みで問題が発生した場合は、まずコアファイルが切り捨てられて
いないかどうかを確認してください。コアファイルの最大サイズを指定するシェルコマ
ンドがあります。コアファイルが作成されたときに、この設定値が小さすぎると、コア
ファイルが切り捨てられ、dbx がコアファイルを読み込むときに問題が発生します。
csh シェルを使用している場合は limit コマンドを、sh シェルや ksh シェルを使用
している場合は ulimit コマンドを参照してください。

dbx からコアファイルが切り捨てられていることが報告された場合は、シェルの起動
ファイルに含まれている limit 設定を変更し、変更後の起動ファイルを読み込み直し
てから、新しいコアファイルを作成してください。

コアファイルが切り捨てられ、スタックセグメントが失われた場合は、スタックの再ト
レース情報は使用できません。また、実行時リンカー情報が失われた場合は、ロードオ
ブジェクトのリストが使用できなくなります。この場合は、librtld_db.so が初期化
されていないことを通知するエラーメッセージも出力されます。さらに、LWP のリスト
が失われた場合は、スレッド情報、LWP 情報、スタックの再トレース情報がすべて使用
できなくなり、where コマンドを使用した場合に、プログラムが "利用可能" ではない
と通知するエラーが出力されます。

可能であれば、dbx はコアファイルがいつ切り捨てられ、本来のサイズがどの程度かを
報告します。

Solaris の互換性
----------------

別のバージョンの Solaris でコアファイルが作成されている場合も、コアファイルの
読み込み時に問題が発生します。この場合の最も良い解決策は、コアファイル作成時と
同じ OS およびパッチレベルで dbx を実行することです。

現在の Solaris バージョンと異なるバージョンでダンプしたコアファイルの
サポート情報については、「help core mismatch」を参照してください。

(「help debug」、「help invocation」、および「help core mismatch」も参照して
ください。)
#

:core$$mismatch (サブトピック)
この機能のサポートは、将来の dbx リリースでは変更される可能性があります。現在
の実装は完全なものではありません。

== 以下に問題点を解説します。

あるシステム上にコアファイルが作成され (以下「コアホスト」)、別のシステム
(以下「dbx ホスト」) からそのコアファイルを読み込む場合があります。
問題の 1 つは、コアホスト上のプログラムで使用されている共有ライブラリが、dbx 
ホスト上のライブラリと異なる場合です。そのライブラリを含む正しいスタックトレー
スを得るには、元のライブラリを dbx ホスト上で使用可能にして、dbx にそれらのラ
イブラリの場所を知らせるようなオプション (以下に解説) を使用するとよいでしょう。
もう 1 つの問題点は、dbx がシステム上の実行時リンカーとスレッドライブラリの実
装内容を認識しようとして、/usr/lib にあるシステムライブラリを使用することです。
dbx が実行時リンカーのデータ構造とスレッドのデータ構造を認識できるように、コア
ホストからこれらのシステムライブラリを提供しなければならない場合もあります。

ユーザーライブラリおよびシステムライブラリは、Solaris のメジャーアップグレード
と同様にパッチで変更を加えることができます。そのためこの問題は、パッチが、コア
ファイルが収集された後、ただしコアファイルで dbx を実行する前にインストールさ
れた場合には、(たとえば) 同じホスト上で現れることもあります。

一致しないコアファイル中に発見されるエラーがいくつかあります。 
通常、1 つのファイルに 1 つか 2 つだけです。

dbx: コアファイルの読み取りエラー: アドレス 0xff3dd1bc を使用できません
dbx: 警告: librtld_db.so.1 を初期化できません -- libDP_rtld_db.so で試します
dbx: 1 のスレッド情報を取得できません -- 汎用 libthread_db.so エラー
dbx: レジスタの取り込みに失敗しました -- スタックが破壊されました
dbx: (0xff363430) からレジスタの読み取りに失敗しました -- デバッガサービスが失敗しました

== 以下に、一致しなかったコアファイルで dbx を使用する方法を示します。

1. dbx 環境変数 "core_lo_pathmap" を有効にします。
2. pathmap コマンドを使用して、ライブラリの場所を dbx に知らせます
3. debug コマンドを使用して、プログラムおよびコアファイルを読み込みます

次の例は、コアホストの root 部分が、NFS を介してエクスポートされているため、
dbx ホストマシンで /net/core-host/ からアクセスできると仮定しています。

(dbx) dbxenv core_lo_pathmap on
(dbx) pathmap /usr      /net/core-host/usr
(dbx) pathmap /appstuff /net/core-host/appstuff
(dbx) debug prog prog.core

コアホストの root 部分をエクスポートしていない場合、手作業でライブラリをコピー
する必要があります。シンボリックリンクを作成し直す必要はありません (たとえば、
libc.so -> libc.so.1 のリンクを作成する必要はありません。libc.so.1 が使用可能
であることを確認するだけです)。

以下のことを覚えておいてください。

 - pathmap コマンドは、"/" のパスマップを認識しないので、
   "pathmap / /net/core-host" と指定することはできません。

 - pathmap の単一属性モードは、ロードオブジェクトのパス名といっしょに
   使用できないため、2 つの属性 <from-path to-path> を使用してください。

 - dbx ホストがコアホストと同じ、またはより新しいバージョンの Solaris を
   使用している場合に、最適な状態でデバッグが行われるでしょう。
   これは、必須条件ではありません。

 - 必要と思われるシステムライブラリは、以下のとおりです。
   実行時リンカー用:
       /usr/lib/ld.so.1
       /usr/lib/librtld_db.so.1
       /usr/lib/sparcv9/ld.so.1
       /usr/lib/sparcv9/librtld_db.so.1
   スレッドライブラリ用:
       /usr/lib/libthread_db.so.1
       /usr/lib/sparcv9/libthread_db.so.1
       /usr/lib/lwp/libthread_db.so.1
       /usr/lib/lwp/sparcv9/libthread_db.so.1
   使用している libthread の実装バージョンに依存します。
   /usr/lib/lwp ファイルは、Solaris 8 にのみ適用される必要があります。
   また、"alternate libthread" ライブラリを使用している場合のみ
   適用される必要があります。
   
   dbx を 64 ビット可能 Solaris 上で実行している場合 ("isalist" コマンド
   を実行すると、"sparcv9" と表示される場合) は、xxx_db.so ライブラリに
   sparcv9 バージョンのライブラリが必要です。
   これは、このシステムライブラリがターゲットプログラムの一部
   としては使用されていないが、dbx の一部として使用されているからです。

   ld.so.1 ライブラリは、libc.so またはその他のライブラリと同様に
   コアファイルイメージの一部です。そのため、コアファイルを作成した
   プログラムに一致する sparc/sparcv9 様式が必要になります。

 - スレッド処理されたプログラムで生成されたコアファイルを見て、
   "where" に対してスタックが表示されない場合は、
    以下の例のように、lwp コマンドを使用してみてください。

   (dbx) where
   現 スレッド: t@0
     [1] 0x0(), at 0xffffffff
   (dbx) lwps
   o>l@1 シグナル SIGSEGV _sigfillset() で
   (dbx) lwp l@1
   (dbx) where
   =>[1] _sigfillset(), line 2 in "lo.c"
     [2] _liblwp_init(0xff36291c, 0xff2f9740, ...
     [3] _init(0x0, 0xff3e2658, 0x1, ...
     ...
   
   スレッドスタックが存在しないということは、thread_db.so.1 に問題が
   ある可能性があります。そのため、コアホストから適切な libthread_db.so.1
   ライブラリをコピーしてみる方法も考えられます (上の例を参照)。
   
   「help rtld」も参照してください。

#
:env
                        # 「help environment」を参照してください。
:environment (トピック)
特定の環境変数は、dbx 起動時に定義されている場合 dbx に影響を与えます。

        TMPDIR          すべての dbx 一時ファイル用のディレクトリして /tmp の
                        かわりに使用します。

dbx 固有の環境変数には _DBX_ という接頭辞が付きます。この接頭辞 _DBX_
は、内部環境変数名として予約されています。
「help ksh environment」と「help dbxenv」を参照してください。
#
# I18N - translate this topicname to match same word in `Other Topics' message
:format (トピック)
print、rprint、および display コマンドと $[] 構造は、整数、文字列、浮動小数点
型の出力書式を設定するフラグ (-f または -F、「help print」も参照) を取ります。
この書式は、dbx が整数 (long または short)、文字列 (char * または wchar_t *)、
浮動小数点 (float、double、long double) の式を表示するときに使われます。
つまり、式自体は構造体か配列で、各整数、文字列、浮動小数点数が所定の書式で表示
されます。書式が指定の型に適用されない場合、その書式文字列は無視され、dbx は内
蔵の表示機構を使用します。
使用可能な書式は printf(3S) で使われるもののサブセットです。
次の制約があります。

      *  n 変換を使用できない。
      *  フィールド幅または精度に関する * を使用できない。
      *  %<digits>$  引数選択を使用できない。
      *  書式文字列中の変換仕様は 1 つに限る。

使用可能な書式を定義する構文は次のとおりです。

        FORMAT  ::=  CHARS % FLAGS WIDTH PREC MOD SPEC CHARS
        CHARS   ::=  <% を含まない任意の文字列>
                |    %%
                |    <空>
                |    CHARS CHARS
        FLAGS   ::=  + | - | <スペース> | # | 0 | <空>
        WIDTH   ::=  <10進数> | <空>
        PREC    ::=  . | . <10進数> | <空>
        MOD     ::=  h | l | L | ll | <空>
        SPEC    ::=  d | i | o | u | x | X | f | e | E | g | G | 
                         c | wc | s | ws | p

書式文字列が % を含まない場合は、それが先頭に自動的に付加されます。スペース、
セミコロン、タブを含む場合は、書式文字列全体を二重引用符で囲まなければなりませ
ん。

例:

(dbx) print i
i = 31
(dbx) print -fx i       ;# 書式文字列を -f で連結
i = 1f
(dbx) print -f 0x%12.12X 1234
0x0000000004D2
(dbx) print -f "The value of 0x1000 is %o in octal" 0x1000
The value of 0x1000 is 10000 in octal
(dbx) print x/10.0       ;# 次を比較
x/10 = 12.3
(dbx) print -F"10%% of x is %.2e" x/10.0  ;# 左辺の表示を抑止
10% of x is 1.23e+01
(dbx) print -fx struct1  ;# 数字にも適用される...
struct1 = {
    x = 7b
}

#
# I18N - translate this topicname to match same word in `Other Topics' message
:prettyprint (トピック)
print、rprint、display で -p フラグを指定すると dbx から ksh 関数 prettyprint 
が起動され、この関数がターゲットプロセス内で db_pretty_print という名前の関
数を探します。これは 3 つの引数 (式の型へのポインタ、整数、char *) を取ります。

        char *db_pretty_print(const Foo *, int flags, char *formatstring);

関数が見つかった場合、dbx は関数を呼び出し、その戻り値を印刷 (または表示) しま
す。また、関数が見つからなかった場合、dbx は式そのものを印刷 (または表示) しま
す。dbxenv 変数 output_pretty_print が on であればデフォルトで -p が渡されます。
コマンドのこの動作を無効にしたいときは +p を使用します。

prettyprint はシステムワイドの dbx 起動ファイルの中で定義されます
(「help startup」を参照)。flags 引数で渡される値は次のビット単位の論理和の
1 つとなります。

   FVERBOSE        0x1       未実装 (常にオン)
   FDYNAMIC        0x2       -d
   FRECURSE        0x4       -r
   FFORMAT         0x8       -f (オンの場合、"formatstring" が <fmt> になる)
   FLITERAL        0x10      -l

これらのフラグの意味については、「help print」を参照。

:linker
   「help rtld」を参照。
:dynamic$$linker
   「help rtld」を参照。
:ld.so
   「help rtld」を参照。
:ld.so.1
   「help rtld」を参照。
:rtld
実行時リンカーとの対話

実行時リンカー (rtld または ld.so としても知られている）は、共有ライブラリのサ
ポートを提供するために動的にリンクされたすべてのプロセスに読み込まれます。プロ
グラムが dlopen() または同様の関数を呼び出した場合、dbx はプロセスでのライブラ
リの読み込みまたは読み込み解除を追跡し、必要な場合は新規のシンボルを読み込みま
す。

動的リンカーは、ライブラリの各セットが独立した名前空間として扱われている、共有
ライブラリの複数のセット (リンクマップ) をサポートしています。ほとんどのプログ
ラムは dlopen 関数によりアクセスされるデフォルトのリンクマップのみを使用します。

プログラムが dlmopen を呼び出すとき、どの名前空間が新規ライブラリを含むのかを
指定できます。ライブラリが dlopen() で読み込まれた場合には、デフォルトのリンク
マップに含まれます。
 
注: デフォルトのリンクマップのライブラリだけが dbx により自動的に読み込まれ、
表示可能となります。

動的リンカー自身とそのジョブを行うのに必要なライブラリを入れるために使用される
他のリンクマップがあります。
ld.so のシンボルを dbx に読み込ませるには loadobject コマンドを使用する必要が
あります。これは以下のように行います。
    (dbx) loadobject -use ld.so.1

「man ld.so.1」、「man dlmopen」も参照してください。
「help loadobject」も参照してください。

#
# I18N - translate this topicname to match same word in `Other Topics' message
:redirection (トピック)
dbx のコマンドは、リダイレクト可能なものと不可能なものに大別できます。
リダイレクト不可コマンドは、引数として言語式かパターンを取ります。
入出力リダイレクション演算子も、dbx がサポートする言語の式演算子なので、式を取
るコマンドはどれも入出力演算子を式演算子として扱います。

以下はリダイレクト不可コマンドの例です。
        assign、bsearch、call、display、dump、examine、files、funcs、hide
        print、run、rerun、search、stop、stopi、trace、tracei、undisplay
        whatis、where、whereis、which 
これらのコマンドをリダイレクトするには、コマンドのキーワードの前に入出力 
リダイレクションを入れます。

        (dbx) >foo print a > b

リダイレクト不可コマンドの出力をパイプしたい場合、コマンドを中括弧で囲みます。

        (dbx) { print *p; } | awk '/member[0-3]/ { print }'

この方法では、dbx の出力だけがリダイレクトされます。
ターゲットプロセスによって (たとえば、printf() 経由) 作成された出力は、
ターゲットプロセスの標準出力に渡されます。

        (dbx) >foo print printf("hello")

このコマンドは、"hello" を端末上に表示します。ファイル foo には次の値が含まれ
ます。

        printf("hello") = 5

これは、printf() 呼び出しとその戻り値です。

ksh 関数をリダイレクト不可 (したがって、言語式を引数として受け付ける
ことができます) にする方法については、typeset コマンドを参照してください。

注: リダイレクト不可コマンドは、# をコメントの開始と見なしません。
    リダイレクト不可コマンドにコメントを追加するには、;# を使用します。

ある種の dbx コマンドをパイプで使用すると、予期しない結果が生じることがありま
す。ターゲットプロセスの状態を変更するコマンド (あるいは、ターゲットプロセスの
状態に関係する dbx の情報を変更するコマンド) はパイプでは期待通り動作しません。
パイプで使用すべきでないコマンドは次のとおりです。
    alias、attach、bsearch、call、catch、check、clear、collector、cont
    dbxenv、debug、delete、detach、display、down、fix、frame、func、handler
    hide、ignore、import、intercept、kill、language、next、nexti、pathmap
    pop、quit、replay、rerun、restore、run、save、search、set、setenv、step
    stepi、stop、stopi、suppress、trace、tracei、unalias、uncheck、undisplay
    unhide、unintercept、unsuppress、up、use、when、wheni

これらのコマンドをリダイレクトするには、次のように一時ファイルを使用してくださ
い。

        (dbx) >/tmp/xxx call foo(); cat /tmp/xxx | sed 's/foo/FOO/'
#
# I18N - translate this topicname to match same word in `Other Topics' message
:registers (トピック)

レジスタ名はマシンによって異なります。これらの名前は予約されていて、ksh の環境
変数名として使用することができません。次のレジスタ名を式の中で使用してください。
SPARC の場合 :

  $g0 $g1 ... $g7
  $o0 $o1 ... $o7
  $l0 $l1 ... $l7
  $i0 $i1 ... $i7
  $f0 $f1 ... $f31
  $pc $npc $y $psr $wim $tbr $fsr $fq $fp $sp

次に示す浮動小数点レジスタのペアは、C の double 型として扱われます (通常、
$fN レジスタは C の float 型として扱われます)。

  $f0f1  $f2f3  ...  $f30f31
または
  $d0 $d2 ... d30

  次の 4 倍精度浮動小数点レジスタは、C の long double 型として扱われます。
  これらは SPARC V9 ハードウェアで使用できます。

  $q0 $q4 ... $q60


  次に示す、2 つのレジスタの最下位 32 ビットを組み合わせたレジスタのペアが、
  V8+ ハードウェアで使用できます。

  $g0g1 $g2g3 $g4g5 $g6g7
  $o0o1 $o2o3 $o4o5 $o6o7


SPARC V9 および V8+ ハードウェアでは次のレジスタも使用できます。

  $xg0 $xg1 ... $xg7
  $xo0 $xo1 ... $xo7
  $xfsr $tstate $gsr
  $f32f33 $f34f35 ... $f62f63

Intel の場合 :
  $pc $ps $fp $sp
  $gs $fs $es $ds
  $edi $esi $ebp $esp $ebx $edx $ecx $eax
  $trapno $err $eip $cs $eflags $uesp $ss
  $di $si $bp $SP
  $bx $dx $cx $ax
  $bl $bh $dl $dh $cl $ch $al $ah
  $ip $flags
  $st0 $st1 ... $st7
  $fctrl $fstat $ftag $fip $fcs $fopoff $fopsel

レジスタを 16 進数で出力するには次の内の 1 つを使用します。

        print -fx $pc

        print (void *)$pc

「help regs」も参照してください。
#
:regs (コマンド)
%regs - レジスタの現在値を印刷する
regs [-f] [-F]          # レジスタの値を印刷します。
                        # -f: 浮動小数点レジスタを含めます (単精度)。
                        # -F: 浮動小数点レジスタを含めます (倍精度)。
                        #     SPARC のみ。

例 (SPARC):
dbx[13] regs -F
現 スレッド: t@1
現 フレーム:  [1]
g0-g3    0x00000000 0x0011d000 0x00000000 0x00000000
g4-g7    0x00000000 0x00000000 0x00000000 0x00020c38
o0-o3    0x00000003 0x00000014 0xef7562b4 0xeffff420
o4-o7    0xef752f80 0x00000003 0xeffff3d8 0x000109b8
l0-l3    0x00000014 0x0000000a 0x0000000a 0x00010a88
l4-l7    0xeffff438 0x00000001 0x00000007 0xef74df54
i0-i3    0x00000001 0xeffff4a4 0xeffff4ac 0x00020c00
i4-i7    0x00000001 0x00000000 0xeffff440 0x000108c4
y        0x00000000
psr      0x40400086
pc       0x000109c0:main+0x4    mov     0x5, %l0
npc      0x000109c4:main+0x8    st      %l0, [%fp - 0x8]
f0f1     +0.00000000000000e+00
f2f3     +0.00000000000000e+00
f4f5     +0.00000000000000e+00
f6f7     +0.00000000000000e+00
...

「help registers」も参照してください。
# I18N - translate this topicname to match same word in `Other Topics' message
:scope (トピック)
スコープとはプログラムの一部分であり、変数や関数の可視性について定義されまます。
あるシンボルの名前が指定の実行ポイントで目にみえる場合、このシンボルは「スコー
プ内にある」といいます。C では、関数は、大域的、ファイルスタティックな、
(file static) スコープを持つことができ、変数は大域的、ファイルスタティック、
またはブロックのスコープを持つことができます。
dbx では、スコープは指定シンボルの検索が開始されるプログラム内のポイントも意味
します。通常は現在行と同じですが、コマンドの中には移動する実行ポイントに影響を
与えることなく、現スコープを変更できるものもいくつか存在します。

        func
        file
        up, down, frame
        list <手順>

シンボルの完全修飾名を得るには、次のコマンドを使用します。

        which <名前>

名前の宣言をすべて検索するには、次のコマンドを使用します。

        whereis <名前>

逆引用符を使用してスコープ名を明示的に示すことができます。

        print `file.c`func1`x
        print `file.c`func2:212`y        # ブロック内の行 212 で宣言されている
                                         # "y" 。
        stop in `libxx.so.1`func3        # 動的ライブラリ xx 内で宣言されている
                                         # func3。
        stop in `file.c`func1
        stop in `file.c`classname::func2
        stop in ``func3                  # 外部 またはファイルスタティックの
                                         # "func3"。
        stop in `func4                   # 外部の "func4"。
        stop in #fun                     # "fun" はリンカー記号。dbx はそれを
                                         # 大域スコープ内でそのままの形で探す。
        stop in `file.c`#fun             # file.c ファイルスタティック有効
                                         # 範囲内でリンカー名 "fun" を探す。

静的シンボルおよび C++ メンバー関数のスコープ照合ルールを緩和するには、
以下を使用するか、

        dbxenv scope_look_aside on

または二重の逆引用符を接頭語として使用します。

        stop in ``func4                 # "func4" は静的であり、スコープ内
                                        # にない可能性があります。


scope_look_aside がオンの場合、dbx は次のものを検索します。

- 現在のスコープに見つからない場合は、他のファイルに定義された静的変数。
  /usr/lib にあるライブラリのファイルは検索されません。
- クラス修飾なしの C++ メンバー関数。
- メンバー関数が現在のファイルでインスタンス化されていない場合は、
  他のファイルでの C++ インラインメンバー関数のインスタンス化。

#
# I18N - translate this topicname to match same word in `Other Topics' message
:signals (トピック)

dbx が受け付けるシグナル名及び数のリストは、現在リリースされている Solaris の
全てのバージョンによってサポートされているシグナルのリストをマージしたものです。
これは Solaris の旧バージョンでの実行時に新規のシグナル名が受け付けられる場合
があることを意味します。
詳細は Solaris の signal の man page (セクション 3head) でご確認ください。

SIGHUP          1            # hangup
SIGINT          2            # 割り込み (リブート)
SIGQUIT         3            # 終了 (ASCII FS)
SIGILL          4            # 無効命令 (捕えたときにはリセットされません)
        ILL_ILLOPC      1    # 無効 OP コード
        ILL_ILLOPN      2    # 無効オペランド
        ILL_ILLADR      3    # 無効アドレッシングモード
        ILL_ILLTRP      4    # 無効トラップ
        ILL_PRVOPC      5    # 特権 OP コード
        ILL_PRVREG      6    # 特権レジスタ
        ILL_COPROC      7    # コプロセッサ
        ILL_BADSTK      8    # 不良スタック
SIGTRAP         5            # トレーストラップ 
                               (捕えたときにはリセットされません)
        TRAP_BRKPT      1    # ブレークポイントトラップ
        TRAP_TRACE      2    # トレーストラップ
        TRAP_RWATCH     3    # 読み取りアクセスのウォッチポイントトラップ
        TRAP_WWATCH     4    # 書き込みアクセスのウォッチポイントトラップ
        TRAP_XWATCH     5    # 実行アクセスのウォッチポイントトラップ
SIGIOT          6            # IOT 命令
SIGABRT         6            # 異常終了で使用。将来、SIGIOT と置換
SIGEMT          7            # EMT 命令
        EMT_TAGOVF      1    # タグオーバーフロー
SIGFPE          8            # 浮動小数点例外
        FPE_INTDIV      1    # 整数ゼロ除算
        FPE_INTOVF      2    # 整数オーバーフロー
        FPE_FLTDIV      3    # 浮動少数点ゼロ除算
        FPE_FLTOVF      4    # 浮動小数点オーバーフロー
        FPE_FLTUND      5    # 浮動小数点アンダーフロー
        FPE_FLTRES      6    # 浮動小数点不正確結果
        FPE_FLTINV      7    # 無効浮動小数点操作
        FPE_FLTSUB      8    # 添え字範囲外
SIGKILL         9            # 停止 (捕えられないか、無視できない)
SIGBUS          10           # バスエラー
        BUS_ADRALN      1    # 無効アドレス配置
        BUS_ADRERR      2    # 存在しない物理アドレス
        BUS_OBJERR      3    # オブジェクト特有のハードウェアエラー
SIGSEGV         11           # セグメンテーション破壊
        SEGV_MAPERR     1    # アドレスがオブジェクトにマップ
                               されていない
        SEGV_ACCERR     2    # 無効な許可
SIGSYS          12           # システムコールへの引数が正しくない
SIGPIPE         13           # まったく読み取りが行われないパイプへの書き込み
SIGALRM         14           # 警報クロック
SIGTERM         15           # 停止からのソフトウェア終了シグナル
SIGUSR1         16           # ユーザー定義シグナル 1
SIGUSR2         17           # ユーザー定義シグナル 2
SIGCLD          18           # 子ステータス変更
SIGCHLD         18           # 子ステータス変更別名 (POSIX)
        CLD_EXITED      1    # 子が終了した
        CLD_KILLED      2    # 子が強制終了した
        CLD_DUMPED      3    # 子のコアダンプが行われた
        CLD_TRAPPED     4    # トレース対象の子が停止した
        CLD_STOPPED     5    # シグナルにより子が停止した
        CLD_CONTINUED   6    # 停止した子の継続
SIGPWR          19           # 電源切断による再スタート
SIGWINCH        20           # ウィンドウサイズ変更
SIGURG          21           # 緊急ソケット条件
SIGPOLL         22           # ポール可能イベント発生
        POLL_IN         1    # 入力可
        POLL_OUT        2    # 出力可
        POLL_MSG        3    # メッセージ可
        POLL_ERR        4    # 入出力エラー
        POLL_PRI        5    # 高優先度入力可
        POLL_HUP        6    # デバイス切り離し
SIGIO           22           # ソケット入出力可 (SIGPOLL 別名)
SIGSTOP         23           # 停止 (捕えられないか、無視できない)
SIGTSTP         24           # tty から要求されたユーザー停止
SIGCONT         25           # 停止したプロセスが継続した
SIGTTIN         26           # バックグラウンド tty 読み取りが試みられた
SIGTTOU         27           # バックグラウンド tty 書き込みが試みられた
SIGVTALRM       28           # 仮想タイマーが満了した
SIGPROF         29           # プロファイリングタイマーが満了した
SIGXCPU         30           # 過度の CPU 制限
SIGXFSZ         31           # 過度のファイルサイズ制限
SIGWAITING      32           # プロセスの lwps がブロックされた
SIGLWP          33           # スレッドライブラリが使用した特殊シグナル 
SIGFREEZE       34           # 特殊 CPR シグナル 
SIGTHAW         35           # 特殊 CPR シグナル
SIGCANCEL       36           # スレッドライブラリが使用した特殊シグナル
SIGLOST         37           # リソースの損失
# 将来の Solaris リリースでは、ここに新しいシグナル番号が
# 追加される可能性があります。
SIGRTMIN        *            # 最初のリアルタイムシグナル
SIGRTMIN+1      *            # 2 番目のリアルタイムシグナル
...             *            # その他のリアルタイムシグナル
SIGRTMAX-1      *            # 最終の 1 つ前のリアルタイムシグナル
SIGRTMAX        *            # 最終リアルタイムシグナル

SIGRTMIN から SIGRTMAX の範囲に使用されている「*」は 、実際のシグナル番号は動
的で、Solaris のリリースによって変わる可能性があることを示しています。
#
# I18N - translate this topicname to match same word in `Other Topics' message
:startup (トピック)
'-S' フラグを指定しておらず、標準の初期化ファイル
<インストールディレクトリ>/lib/dbxrc が存在して、読み取り可能である場合、
dbx は、このファイルを読み取ります (標準の初期化ファイルへのパスは、dbx 実行可
能ファイルのパスから派生します)。

dbx は、.dbxrc ファイルを現在のディレクトリから検索し、次に $HOME を検索します。
-s コマンド行オプションを使用して、別の場所にある初期化ファイルを指定すること
もできます。.dbxrc ファイルの例については「help .dbxrc」を参照してください。

初期化ファイルはどの dbx ファイルも含むことができます。別名定義と関数定義を含
むのが最も一般的です。また、source または '.' コマンドを使用して、他のファイル
を「ソース」することもできます 
(「help source」と「help .」を参照してください)。 
初期化ファイルにも、set -o や dbxenv (前述) を介して種々のオプションを設定する
ことができます。

#
:tid (トピック)

スレッド ID。構文 t@<数値> は、各種コマンドでスレッドを指定するのに使用します。
<数値> は、thr_create() が返すスレッド ID です。場合によっては、t@<数値> の代
わりに、「all」 または 「t@all」 を使用して、全スレッドを指定することができま
す。
#
# I18N - translate this topicname to match same word in `Other Topics' message
:callbacks (トピック)

コールバックとは、対象プログラムの実行時に一定の位置で dbx が自動的に呼び出す
ksh 関数です。必要に応じてこれらの関数を独自に定義すれば、目的に合った呼び出し
を行うことができます。

デフォルトではこれらの関数は何も行いません。現在、以下のコールバックがサポート
されています。
        _cb_aoutchange          _cb_prompt
        _cb_fix_comp            _cb_fix_link
詳細については、個々の関数名のヘルプを参照してください。
#
:_cb_aoutchange (コールバック)
_cb_aoutchange <旧 a.out 名> <新 a.out 名>

この ksh 関数は、デバッグ対象のプログラムが変更されるときに、dbx が呼び出しま
す。変更とは、フルパス名が変化するということです。ここは、それぞれの a.out に
特有なブレークポイントを設定するのに良い場所です。

例:

        _cb_aoutchange() {
                case "$2" in
                *producer)      stop in make_some_more ;;
                *consumer)      stop in get_another_one ;;
                esac
        }
#
:_cb_prompt (コールバック)
_cb_prompt

この ksh 関数は、トップレベルのプロンプト (PS1) を表示する直前に dbx が呼び出
します。ここは、プロセスの現在の状態を反映するように PS1 を設定するのによい場
所です。_cb_prompt は引数を取りません。
#
:_cb_fix_comp (コールバック)
_cb_fix_comp <コンパイル引数>

この ksh 関数が定義されていると、fix が実行されたとき、dbx は直接コンパイラを
呼び出す代わりにこの関数を実行します。この関数は、オプションを追加または変更し
たり、パスを変更するなどして、コンパイル行をカスタマイズするのによい箇所です。
使用するときは注意してください。

例:

        _cb_fix_comp() {
            echo $*
            eval $*
        }

上記の例は、引数の変更することなく、コンパイル行をエコーし、実行します。

        _cb_fix_comp() {
            eval "$(echo $* | sed -e 's! -g0 ! -g !')"
        }

前の例に対してこの例は、-g0 を -g で置き換え、コンパイラの実行中に 
C++ フロントエンドのインライン機能をオフにします。

この関数の引数は元の無修正のコンパイラ行から受け継がれ、dbx が使用する
オプションがいくつか内部的に追加されます。

「help _cb_fix_link」も参照してください。
#
:_cb_fix_link (コールバック)
_cb_fix_link <リンカー引数>

この ksh 関数が定義されていると、fix が実行されたとき、dbx は直接リンカーを
呼び出す代わりにこの関数を実行します。
この関数は、オプションを追加または変更したり、パスを変更するなどして、
リンク行をカスタマイズするのによい箇所です。
使用するときは注意してください。

このリンクは、ターゲットプロセス内で dlopen される共有オブジェクトを
作成します。このリンクは、a.out を修正しません。

例:

        _cb_fix_link() {
            echo $*
            eval $*
        }

上記の例はリンク行をエコーおよび実行します。

「help _cb_fix_comp」も参照してください。
#
:event
「help event <副題>」: 以下の <副題> を指定することができます。

specification           すべての認識可能なイベント指定の解説
fault                   フォルト指定
sig                     シグナル指定
variables               イベントに関連する組み込み変数
watchpoint              ウォッチポイント
resumeone               マルチスレッドアプリケーションの条件付きブレークポイント

「help events」も参照してください。
#
:resumeone (トピック)
以下の条件付きブレークポイントを考えてみましょう。

        stop in lookup -if strcmp(name, "troublesome") == 0

いくつかのスレッドが lookup() を呼び出しているマルチスレッドアプリケーション
中にこのブレークポイントを設定したと仮定します。t@1 が lookup() を呼び出す
場合、dbx は条件を評価し、strcmp() を呼び出します。dbx が strcmp() を
呼び出す方法は 2 つあります。

1) t@1 のみを再開します。この場合、strcmp() が他のスレッド
によって所有されているロックを取得しようとした際にデッドロック
を引き起こしやすくなります。strcmp() がそうする可能性は低いですが、
dbx では認識できないため、ユーザーは strcmp() 以外の関数を使用する
ことも可能です。そこで dbx はデッドロックを回避するために 2) の
動作をします。

2) 呼び出し中に全てのスレッドを再開します。これは next を入力
したときに dbx が行う動作と同様です。

もし条件式が、他のスレッドで変更されている大域データにアクセスして
いる場合、全てを再開する方法にはいくつかのまれな副作用がおこること
があります。呼び出される関数は、かなり局所的で、不可分、かつ副作用
が無いこと、さらに、ユーザーがこのことを確認できることが前提になって
います。

関数がデッドロックリスクになることに対して同様のことがいえるという
わけではありません。デッドロックは予期できる以上により頻繁におこります。
以下はその例です。

- 条件が、隠された関数呼び出しを含んでいる多重定義演算子を持つ
  C++ 式であるかもしれません。害のない -if bag[i] は、MT に対して
  安全、かつ相互排他ロックを含んだ STL のマップ収集を参照している
  かもしれません。

- 関数呼び出しは動的リンカーの共有ロックを強くもとめるかもしれません。
  たとえば もし memcmp() が使用される場合、動的リンカーを経由して、
  そのプラットフォームの最適化された (libc_psr.so 中の) memcmp() を
  呼び出します。

- シグナルが発生し、ロックを要求する可能性のあるシグナルハンドラを
  呼び起こします。

このようなわけで dbx は (2) の方法をとります。

全てを再開する方法には、現時点の dbx では strcmp() が呼び出されている間に
lookup() のブレークポイントに達してしまった別のスレッド (t@2) を処理できない
という欠点があります。次のような警告が表示されます。

        イベント無限ループにより次のハンドラ中でイベントの取りこぼしが起きます:
または
        イベントの再入可能      最初のイベント BPT(VID 6, TID 6, PC echo+0x8)
        2 番目のイベント BPT(VID 10, TID 10, PC echo+0x8)
        以下のハンドラはイベントを処理しません:

この場合、もし条件式で呼び出された関数が相互排他ロックを獲得しない
ことを確認できるなら、-resumeone イベント修飾子を使用して dbx に
強制的に (1) の方法をとらせることができます。

        stop in lookup -resumeone -if strcmp(name, "troublesome") == 0

'lookup()' のブレークポイントに達したスレッドのみが strcmp() を
評価するために再開されます。

これはすべての場合に有効というわけではありません。例を以下に記述します。
- 条件が lookup() を再帰的に呼び出すため、同じスレッド中で 
  lookup() の 2 度目のブレークポイントがおこる場合。
- 条件が実行されるスレッドが、yield、sleep、または他のスレッドに
  対する制御の解除を行う場合。

:eventspec
「help event specification」を参照してください。

:event$$spec
「help event specification」を参照してください。

:event$$specification (トピック)
イベント指定はイベント管理コマンドの stop、when、および trace によって使用され、
対象のイベントを指定します。一般的な構文は以下のとおりです。

        <キーワード> [ <引数> ] [ <修飾子> ... ]   

<キーワード> はイベントの種類を指定します。以下に示すように、通常は
at か in です。引数を取るイベントもあります。修飾子は - で始まり、
すべてのイベントタイプとコマンドに適用されます。
ただし、コマンドやイベントの中には非汎用修飾子も受け付けるものも
あります。

イベント指定の意味は、一般的に stop、when、trace での使用を通じて
同じですが、各個別コマンドのためのいくつかの例外もあります。

以下は、SPARCworks 3.1 以前に導入された定義済みイベントと、そのイベントが発生
する条件のリストです。

    in <関数>           # <関数> の実行開始時点。プロローグ後の最初の実行可能
                        # コードが実際のブレークポイント位置として使用されます。
                        # これは <関数> とともに動作する他のイベントに適用します
    at <行>                 
    at <ファイル名>:<行>
                        # <行> の実行時点。
    at <アドレス式>     # 指定されたアドレスの命令の実行開始時点。
                        # -instr、stopi などを指定した場合に利用可能です。
    inmethod <関数>     # <関数> という名のすべてのメソッドの実行開始時点
    inmember <関数>     # inmethod の別名 
    infunction <関数>   # 多重定義されたすべての <関数> の実行開始時点
    inclass <クラス名> [ -recurse | -norecurse ]
                        # <クラス名> のすべてのメソッドの実行開始時点。ここで、
                        # <クラス名> は、C++ の構造体、共用体、クラス、または
                        # テンプレートクラスを示します。
                        # -norecurse はデフォルトの設定です。
                        # -recurse を指定した場合は、基底クラスも対象になります
    inobject <オブジェクトアドレス>  [ -recurse | -norecurse ] 
                        # オブジェクトから呼び出された際の、クラスとすべての
                        # 基底クラスの非静的メソッドの実行開始時点。
                        # <オブジェクトアドレス> は、C++ オブジェクトの
                        # アドレスに対応させて評価します。
                        # -recurse はデフォルトの設定です。
                        # -norecurse を指定した場合は、基底クラスは対象になり
                        # ません。

以下は、 SPARCworks 3.0 で導入された定義済みイベントと、そのイベントが発生する
条件のリストです。

    modify <> [ , <バイト数式> ]
                        # 指定のアドレスの範囲に書き込みが行われた時点
                        # (「help event watchpoint」を参照）。
                        #  <アドレス式> には任意の式を使用可能。ただし、
                        # 評価結果がアドレスとなること。
                        # 詳細は「help event watchpoint」を参照。
    step                # ステップ実行が行われた時点
                        # このイベントを指定すると自動的にステップ実行が始まり
                        # ます。
    next                # 次の行に進んだ時点。next コマンドと同様に、これは
                        # 現関数及び呼び出しなどの各ソース行でトリガします。
                        # スタックのソース情報のある関数がないときに
                        # このイベントを使用した場合には、動作する行が
                        # ないため、何も起こりません。
    sig <シグナル>      # 指定されたシグナルを傍受した時点
                        # (「help event sig」を参照)。
    sig <シグナル> <コード>  
                        # 指定されたシグナルサブコードを持つ
                        # シグナルを傍受した時点 ( 詳細は「help event sig」を
                        # 参照)。
    fault <フォルト>    # 指定されたフォルトを傍受した時点 (「help event fault」
                        # を参照)。
    throw               # C++ 例外が送出された時点。
    throw <型>          # <型> の C++ 例外が送出された時点。
                        # <型> には、 -unhandled、-unexpected の
                        # どちらかを指定できます。
                        # (詳細については「help intercept」を参照してください)
    stop                # プロセスが停止した (ユーザーの入力待ち状態になる) 時点
    attach              # プロセス接続操作が完了した時点。
    sync                # ターゲットプロセスが実行 (exec) され
                        # dbx と同期がとれた時点。
                        # stop sync は効力を持ちませんが、
                        # when sync は使用できます。
    syncrtld            # rtld が動作し、すべてのロードオブジェクトのシンボルが 
                        # dbx によりロードされた時点。
                        # stop に関するものと同じ制約が sync イベントに
                        # も適用されます。
    lastrites           # プロセスが無効になる時点。
                        # これは _exit の呼び出し、シグナルの終了、または 
                        # kill コマンドの結果のためにおこります。
                        # 最終的なプロセスの状態は (いつもではないが) 通常この
                        # イベントがトリガした場合に有効です。
    dlopen              # 一連のロードオブジェクトがロードされた時点。
    dlopen [ <ライブラリのパス> ]   
                        # 指定されたロードオブジェクトがロードされた時点。
                        # <ライブラリのパス> にはライブラリの完全パス名を
                        # 引用符で囲んで指定する必要があります。
    dlclose ...         # dlopen と同様。
    exit [ <終了コード> ]     
                        # プロセスが、指定された終了コードで終了した時点
                        # <終了コード> は 10 進数で指定。
    sysin               # プロセスがシステムコールに入った時点。
    sysout              # システムコールから復帰した時点。
    
    sysin <番号>|<名前>
    sysout <番号>|<名前>
                        # 指定の番号または名前のシステムコールに入ったか、
                        # そこから復帰した時点。
                        # 「sys/syscall.h」中のカーネルトラップのリスト
                        # は、安定していない状態の非公開の Solaris の
                        # インターフェースです。
                        # dbx で利用可能なトラップ名のリストは、サポート
                        # されているすべての Solaris での名前のセットを
                        # マージしたものになります。dbx がサポートしている
                        # 名前が特定の Solaris と正確に一致するわけでは
                        # ありません。
                        # 「sys/syscall.h」中の名前には、利用できない可能性
                        # があるのものもあります。
                        #
                        # トラップ番号が既知のシステムトラップに対応していない
                        # 場合に警告が出ることはあっても、いかなるトラップ番号
                        # も使用でき、期待通りに動作するはずです。
                        #
                        # システムコール 0 (通常は syscall トラップ番号) は
                        # 明示的にはトレースできませんが、引数に基づいて
                        # 他のイベントをトリガーします。
                        # つまり syscall(4, ....) はシステムコール 4 の
                        # イベントをトリガーします。
                        #
                        # 注: より安定したカーネルインターフェースのリストに
                        # ついては、man -s 2 intro の出力で、システムコール
                        # ライブラリ関数のリストを参照することができます。
                        #
    returns <関数>      # 指定された関数から復帰した時点。
    returns             # 現在訪問中の関数から復帰した時点。

以下は dbx 4.0 で導入された定義済みイベントと、そのイベントが発生する条件の
リストです。

    detach              # attach の逆。
    lwp_exit            # lwp が終了した時点。イベント処理中は、このイベントに
                        # 関係している lwp は $lwp で与えられます。
                        # イベントの処理後、この lwp は無効になります。
                        # よって $lwp は異なる値を持ちます。
    proc_gone           # デバッグ中のプロセスが、デバッグ対象でなくなった時点。
                        # イベント変数 $reason には signal、exit、kill、または 
                        # detach が設定されます。
    prog_new            # 新しいプログラムが dbx にロードされた時点。これは、
                        # debug コマンドの実行中、または exec の追尾の発生時に
                        # 起こります。debug コマンドを実行すると、すべてのハン
                        # ドラが削除される ため、このハンドラ -perm modifier 
                        # と併用した場合にのみ意味があります。
    timer<秒>           # デバッグ対象、実実行時間が <秒> 秒に達した時点。
                        # <秒> は、浮動小数点数です。dbx の単一のインターバル
                        # タイマーは、データ可視化機能とコレクタコマンドによっ
                        # ても共有されます。
                        # これらの機能の 1 つでインターバルタイマーを使用する
                        # と、他の機能では使用できません。
    change <変数>       # <変数> の値が変更された時点。
                        # これはシングルステップを使用して実装されます。
                        # パフォーマンスの速度を増すため、以下に記述した
                        # access イベントを使用してください。変更が検出
                        # されなくとも、変数が初めてチェックされるとイベントが
                        # 1 つ起こされます。これにより初期値にアクセスすること
                        # ができます。その後は、変更が検出されると、追加イベン
                        # トを起こします。
    cond<条件式>        # 条件値が変更された時点。任意の式を
                        # 使用することができますが、
                        # 整数型として評価できる必要があります。


以下は dbx 5.0 で導入された定義済みイベントと、そのイベントが発生する条件の
リストです。

    access <モード> <アドレス式> [ , <バイトサイズ式> ]
                        # 指定されたアドレス範囲にアクセスした時点。 
                        # <アドレス式> には任意の式を使用できますが、評価結果
                        # がアドレスにならなければなりません。
                        # <モード> には、次のうちの任意の数の文字を指定できます
                        # 'r' (読み取りアクセス)
                        # 'w' (書き込みアクセス)
                        # 'x' (実行アクセス)
                        # また、<モード> には次のどちらかの文字を含めることも
                        # できます。                        
                        # 'a' アクセスの後に停止 (デフォルト)
                        # 'b' アクセスの前に停止
                        # 詳細については、データウォッチポイント 
                        # (「help event watchpoint」) を参照してください。

下位互換性を保持するために、イベント指定の構文には次の ('keyword' がない)
形式が許可されています。ただし、この形式は今後のリリースでは廃止される予定です。

        <変数>          # 値が変更された場合。今後は 'change <変数>' を使用する
                        # ようにしてください。
        <条件式>        # 条件が変更された場合。任意の式を使用できますが、評価
                        # 結果は整数型にならなければなりません。今後は
                        # 'cond <条件式>' を使用するようにしてください。

以下は汎用イベント指定修飾子のリストです。

          -if <条件>    # <条件> 'filter' が真の場合にのみイベントを検出します。
                        # <条件> には任意の式を指定できますが、評価結果は整数
                        # 型でなければなりません。
          -resumeone    # -if の修飾子。<条件> が関数呼び出しを含む場合に
                        # スレッドを 1 つだけ再開します。詳細は
                        # 「help resumeone」を参照してください。 
          -in <関数>    # <関数> の最初の命令に達したときと <関数> が戻るときの
                        # 間にだけイベントは発生します。
                        # <関数> の再帰呼び出しは無視されます。
          -disable      # 無効な状態でイベントを生成します。
          -count <数>   # 0 からカウントして、<数> に達するとイベントが発生し、
                        # その時点でカウントは 0 にリセットされます。debug -r
                        # または attach -r で新規プログラムがデバッグされた
                        # 場合、このカウントはリセットされます。プログラムが
                        # 実行または再実行されたときには、すべてのカウントが
                        # リセットされます。
          -count infinity
                        # カウントしますが、イベントは検出しません。
          -temp         # 一時イベント。検出された時点で削除されます。
          -instr        # 命令レベルでの動作。たとえば、'step' は命令レベルの
                        # 停止を行い、'at' は、行番号の代わりに引数のテキスト
                        # アドレスを取ります。
          -perm         # このイベントを、'debug' コマンドが実行されてもリセッ
                        # トされない「永続」にします。ただし、イベントによって
                        # は永続にするべきでないものがあります (ブレークポイン
                        # トなど)。
                        # 'delete all' では永続ハンドラは削除されません。削除
                        # するには 'delete <hid>' を使用してください。
           -hidden      # 'status' コマンドでイベントが表示されないようにします
                        # ロードしたモジュールの中には、これを使用するものがあ
                        # ります。これらのモジュールを表示するには、
                        # 'status -h' を使用してください。
          -lwp <lwpid>  # 指定の LWP で発生した場合のみイベントを検出します。
          -thread <tid> # 指定のスレッドで発生した場合のみイベントを検出します。

以下はコマンドおよびイベントに特有なイベント指定修飾子のリストです。

        -nosrc          # "trace step" のみに適用されます。
                        # 詳細は「help trace」を参照してください。
        -nocalls        # "trace step" のみに適用されます。
                        # 詳細は「help trace」を参照してください。

下位互換性のため、以下のイベント指定修飾子構文も利用可能です。
ただし、これらは古い形式であるため、将来のリリースではなくなる予定です。

        if <条件>       
        in <関数>       
        <lwpid>
        <tid>
#
#
#
:event$$sig (トピック)
シグナル指定。10 進数、およびオプションで sig の接頭辞が付いた、大文字または小
文字のシグナル名を使用できます。次に例を示します。

        11 segv SEGV sigsegv SIGSEGV    

シグナルサブコードを追加できます。10 進数、大文字または小文字のサブコード名を
使用できます。シグナル名と '_' からなる接頭辞は省略できます。

        3 fltdiv FLTDIV fpe_fltdiv FPE_FLTDIV

すべてのシグナルとそのサブコードのリストについては、「help signals」 を参照し
てください。
:event$$fault (トピック)
ハードウェアフォルト指定。10 進数、オプションで flt の接頭辞が付いた、大文字ま
たは小文字のフォルト名を使用できます。次の例のいずれかを使用してください。

        8 izdiv IZDIV fltizdiv FLTIZDIV 
        
これらはすべて同じフォルトを参照します。
Solaris のフォルトのリストは以下を参照してください。
/usr/include/sys/fault.h
   
#
:watch
「help event watchpoint」を参照してください。
:modify
「help event watchpoint」を参照してください。
:access
「help event watchpoint」を参照。
:event$$watchpoint (トピック)

dbx では 2 種類のウォッチポイントを生成する仕組みを利用できます。

1) 使用法:

        stop|when|trace access <モード> <アドレス式> [ , <バイトサイズ式> ]

<モード> はアクセスする対象を指定します:
        r       読み取り, メモリーのロード
        w       書き込み, メモリーへの格納
        x       実行, コードの実行
<モード> は複数指定することができます。

以下を組み合わせて使用することもできます:
        b       before アクセスの前に停止
        a       after アクセスの後に停止(デフォルト)
どちらの場合もプログラムカウンタは適切な命令を差します。

<アドレス式> は評価してアドレスを生成できる式です。
シンボル式を使用すると、監視する領域のサイズは自動的に補われます。
これは、',' 構文を使用して無効にできます。また、シンボルではなく、型の
ないアドレス式を使用した場合、サイズは必須です。次に例を示します。

        stop access w 0x5678, sizeof(Complex)

この機構は、通常カーネルの内部で実装 (詳細は、PCWATCH の proc(4) を参照)
されているため、従来の機構に比べて次の利点があります。
        * 大幅に高速化されている。
        * ウォッチポイントの数に制限がない。
        * マルチスレッドアプリケーションでも正しく動作する。
        * スタックアドレスにも使用できる。
        * まだマップされていないアドレスにウォッチポイントを設定できる。
        * システムコールからのアクセスを検出できる。
        * 共有メモリーをウォッチできる。

この機構には次の制限があります。
        * ウォッチ対象の領域は、互いに重複しないように設定しなければなりません。

以前の古い構文である
        stop|when|trace modify <アドレス式> [ , <バイトサイズ式> ]
は、下位互換性保持のため現在でも受け付けられ、適切に
'stop access' コマンドにマップされます。

2) 使用法:

        stop|when|trace cond <条件式>
        stop|when|trace change <変数>

これらの機構により、プログラムを自動的にシングルステップで実行し、
特定の条件や変更がないかを検査します。シングルステップで実行されるため、
実行速度が非常に低下します。マルチスレッドアプリケーションには使用しな
いでください。

:event$$variables (トピック)
以下の読み出し専用の事前定義変数は、dbx の現在の状態を表します。
これらは常に利用可能です。これらは、現 LWP またはスレッドを反映します
        $ins            # 現命令の逆アセンブリ       

        $lineno         # 現在の行番号の 10 進数表記
        $vlineno        # 現在の「ビジティング」行番号の10進数表記
        $line           # 現在の行の内容

        $func           # 現関数名
        $vfunc          # 現在「訪問中」の関数名
        $class          # $func が属するクラス名.
        $vclass         # $vfunc が属するクラス名
        $file           # 現ファイル名
        $vfile          # 現在「訪問中」のファイル名
        $loadobj        # ロード可能オブジェクトと同様
        $vloadobj       # ...
        $scope          #  現在の PC でのスコープ(逆引用符付き)
        $vscope         # ...

        $funcaddr       # $func のアドレスの 16 進数表記
        $caller         # $func を呼び出している関数の名前

        $newhandlerid   # 最も新しく作成されたハンドラのイベント ID。
                        # ハンドラを削除するコマンドのあとでこの変数は未定義の
                        # 値を持ちます。ハンドラ作成のあとただちに使用してくだ
                        # さい。現時点で、2 つ以上のハンドラを作成するコマンド
                        # のすべてのハンドラ ID を取得する方法はありません。
        $firedhandlers  # 最も新しいストップページを引き起こしたハンドラ ID の
                        # リスト。このリスト中のハンドラは status コマンドで
                        # '*' が付けられます。

        $proc           # デバッグされている現在のプロセスのプロセス ID
        $lwp            # 現在の LWP の LWP ID (MT のみ)
        $thread         # 現在のスレッドのスレッド ID (MT のみ)

        $prog           # ロードされたプログラムのフルパス名
        $oprog          # $prog の前の値。follow-exec の後で、$prog が "_" に
                        # 戻る場合に非常に便利です。
                        # 注: $prog はフルパスに展開しますが、$oprog はコマン
                        # ド行または debug コマンドで指定されたままのプログラ
                        # ムを含みます。もしプログラムを 2 度以上実行するなら
                        # ば元のプログラムに戻る方法はありません。
        $dllist         # 最後に dlopen または dlclose されたすべてのロードオ
                        # ブジェクトのリスト
        $exception      # 現在の C++ 例外のポインタ。何もなければ 0。
        $exitcode       # プログラムの最後の実行後の終了コード。
                        # この値は、プロセスが実際に終了していない場合、
                        # 空の文字列になります。
        $machtype       # プログラムがロードされていれば、sparcv8、sparcv8+、
                        # sparcv9、intel のいずれかのマシンタイプが返されます。
                        # そうでない場合は、'unknown' が返されます。
        $datamodel      # プログラムがロードされていれば、ilp32 か lp64 の
                        # どちらかのデータモデルが返されます。
                        # そうでない場合は、'unknown' が返されます。
                        # ロード後にプログラムのモデルを確認するには、.dbxrc
                        # の中で次のように指定します。
                                when prog_new -perm {
                                      echo machine: $machtype $datamodel;
                                }

以下は、when の本体内でのみ有効です。

 $handlerid      # 本体の実行中、$handlerid は、その本体が属する when コマンド
                 # の ID です。

 $booting        # イベントが「ブート」処理中に発生すると true に設定されます。
                 # 新しいプログラムがデバッグされるたびに、プログラムは最初に
                 # ブートされ、共有ライブラリのリストと位置が確認されます。
                 # プロセスはそこで抹消されます。
                 # ブートが「ユーザーの知らないところ」で起こって、その結果、
                 # メッセージ「libc.so.1 のシンボル情報を読んでいます」が出さ
                 # れる場合でも、イベントはすべて使用可能です。この変数は、た
                 # とえば、デバッグ中に起こる sync と syncrtld イベントと、通
                 # 常の実行中に起こるイベントを区別するために使用してください。

以下は、 WHEN の本体内でのみ有効で、また、イベントに特有のものです。

イベント sig の場合

        $sig            # イベントを起こしたシグナルの番号
        $sigstr         # $sig の名前 
        $sigcode        # $sig のサブコード (有効な場合) 
        $sigcodestr     # $sigcode の名前 
        $sigsender      # シグナルの送信元がある場合は送信元の pid、ない場合は 0

イベント exit の場合

        $exitcode       # exit() に渡した引数。この値は WHEN 本体の外部でも
                        # 有効です。上記を参照。

イベントアクセス の場合

        $watchaddr      # 書き込み、読み取り、または実行の対象となるアドレス。
        $watchmode      # 書き込み、読み取り、または実行の各アクセスを表す
                        # "rwx" のいずれかの文字の後に、"ab" 
                        # (アクセスの後、または前に停止) の 1 文字を続けたもの。

イベント sysin と sysout の場合

        $syscode        # システムコールコード
        $sysname        # <sys/syscall.h> に定義されたシステムコール名

イベント dlopen と dlclose の場合 (引数付きの場合のみ)

        $dlobj          # イベントを起こすロードオブジェクト

イベント proc_gone の場合

        $reason         # プロセスがデバック対象でなくなった理由。signal、exit、
                        # kill、または detach のいずれかになります。

#
:MT (トピック)
dbx にはマルチスレッド対応のプログラムを扱う新しいコマンドがあります。
詳細については以下の標題のヘルプを参照してください。

        threads thread lwps lwp

また、多くのコマンドがスレッド修飾子や LWP 修飾子を取ることができます。

詳細については、以下の標題のヘルプを参照してください。

        cont step events 'event specification' mtfeatures where

または 'help -k <キーワード>' を使用して、<キーワード>の言葉を扱っている
ヘルプの表題を捜してください。
#
########################################################################
########################### Dbx Commands ###############################
########################################################################
:! (ksh コマンド)
!!                     # 前のコマンドを実行します。
!番号>                 # 指定の <番号> のコマンドを実行します。
!-<数>                 # 現在のコマンド番号から <数> を引いた番号のコマンドを
                         実行します。
!<文字列>              # <文字列> で始まる最新のコマンドを実行します。

修飾子:                # これらのトークンを付加して上記のコマンドを変更します。
\:s/<l>/<r>/           # 置換修飾子: 文字列  <l> を <r> に置換します。
\:p                    # 表示修飾子: コマンドを実行せず、表示だけします。

省略形:
^<l>^<r>^              # 高速置換: <l> を <r> に置換した後、
                       # 最後の入力コマンドを再実行します。
#
:!!
「help !」を参照してください。
#
:adb (コマンド)
%adb - adb 形式のコマンドを実行、または adb モードに入る
adb <adb のコマンド>    # adb 形式のコマンドを実行する。
adb                     # adb モードに入る。
                        # adb モードから出るには $q を使用。

                        # adb コマンドを最初に与えると、そのコマンドを
                        # 実装する共有オブジェクトが動的にロードされます。
                        # adb モード に関する詳細なヘルプを得るには、
                        # 一回 adb コマンドを実行してから、
                        # 再度「help adb」を試してください。

                            (dbx) adb $q
                            Searching for libdbxadb.so...
                            adb を定義しています
                            (dbx) help adb
                            ...
#
:alias (トピック)
alias は、dalias または kalias の別名です。
「alias alias」 と入力してどちらかを調べた後、「help kalias」または
「help dalias」を参照してください。

デフォルトは kalias です。dalias は、旧形式の .dbxinit 起動ファイルとの
互換性を保つために使用されます。「help .dbxinit」を参照してください。

#
:assign (コマンド)
%assign - プログラムの変数に新しい値を代入する
assign <変数> = <式>   # <式> の値を <変数> に代入します。
#
:attach (コマンド)
%attach - デバッグ中のプログラムを変更する
attach <プロセス ID>          # プロセス ID が <プロセス ID> の 
                              # <プログラム> の デバッグを開始します。
                              # dbx は /proc を使用して <プログラム> を捜します
attach -p <プロセス ID> <プログラム>
                              # プロセス ID が <プロセス ID> の
                              # <プログラム> のデバッグを開始します。
attach <プログラム> <プロセス ID>
                              # プロセス ID が <プロセス ID> の <プログラム> の
                              # デバッグを開始します。
                              # <プログラム> に - を指定すると、dbx は 
                              # /proc を使用して <プログラム> を捜します。
attach -r ...                 # この -r オプションにより、dbxはすべての
                              # display、trace、when、stopを保持します。
                              # -r オプションを指定しない場合、暗黙的な 
                              # 'delete all' や 'undisplay 0' が実行されます。
                           
もし新規のプロセスに接続し、既存のプロセスはすでにデバッグしているのであれば
動作は次のようになります。現在のプロセスが run コマンドの結果である場合は、
プロセスは新規のプロセスに接続する前に終了します。現在のプロセスが以前に
attach コマンドで (またはコマンド行でプロセス ID を指定することによって)
生成された場合は、dbx は新規のプロセスに接続する前に現在のプロセスを切り離し
ます。
 
#
:bsearch (コマンド)
%bsearch - 現在のソースファイルを後方に検索する
bsearch <文字列>       # 現在のファイルから <文字列> を後方検索します。
bsearch                # 最後の検索文字列を使用して、検索を繰り返します。
#
:button (コマンド)
%button - GUI の「デバッグ用カスタムボタン」ウィンドウのための新しいボタンを定義する

button <セレクション種別> <コマンド>
                             # ソフトウェアボタンを定義します。

<セレクション種別> は次のいずれかです。
                   ignore    # セレクションを無視します。
                   literal   # セレクションを文字どおりに取り出します。
                   lineno    # ソースサブウィンドウからの行番号。

このコマンドは、dbx が GUI の制御下で動作していない場合は無視されます。

「help unbutton」も参照してください。

#
:buttonx (コマンド)
%buttonx - GUI のカスタムボタンウィンドウのための新しいボタンを定義する

buttonx <セレクション種別> <名前> <コマンド>
                             # 拡張ソフトウェアボタンを定義します。

<セレクション種別> は次のいずれかです。
                   ignore    # セレクションを無視します。
                   literal   # セレクションを文字どおりに取り出します。
                   lineno    # ソースウィンドウからの行番号。

<名前> はボタンの名前です。名前の中に空白を入れる場合は、名前を引用符で囲む
必要があります。この名前は、「unbutton」が検索するキーとして使用されます。

<コマンド> には、任意の dbx コマンド、ksh 関数、またはミニスクリプトを指定
できます。複数の語が含まれる場合は、引用符で囲む必要があります。

このコマンドは、dbx が GUI の制御下で動作していない場合は、通知なしで
無視されます。

dbx 起動スクリプトをすべてのバージョンで正しく動作させるためには、次のような
条件式を使用してください。
        dalias goto "stop at !:1 -temp; cont"
        if [ ${versionno:-3} = "5.0" ]
        then
                buttonx lineno  "GoTo" goto
        else
                button lineno  "goto"
        fi

「help unbutton」も参照してください。

#
:call (コマンド)
%call - 手続きを呼び出す
call  <手続き>([引数群])  # 手続きを呼び出します。

関数を呼び出すことができます。呼び出した関数の戻り値は確認できないため、
確認の必要がある場合には print コマンドを使用してください。
場合によっては、呼び出された関数がブレークポイントで止まってしまうことが
あります。その場合に処理を続行するには 'cont' を、呼び出しを中止する場合
は 'pop -c' を使用してください。呼び出された関数が原因で SEGV が生成される
場合は、後者の方法を使用すると便利です。
#
:cancel (コマンド)
%cancel -  現在のシグナルを取り消す
cancel                  # 現在のシグナルを取り消します。主に when の本体内で
                        # 使用されます。
シグナルは通常、シグナルによって dbx が停止する時点で取り消されます。
when コマンドがシグナルイベントに付加された場合には、そのシグナルは
自動的には「取り消されません」。cancel コマンドを使用すれば、このシグナルを
明示的に取り消すことができます。
#
:catch (コマンド)
%catch - 指定のシグナルを捕獲する
catch                  # 捕獲するシグナルのリストを表示します。
catch <数> <数>...     # 番号が <数> のシグナルを捕獲します。
catch <名> <名>...     # 名前が <名> のシグナルを捕獲します。
                       # SIGKILL は捕獲することも無視することもできません。
catch $(ignore)        # すべてのシグナルを捕獲します。
指定のシグナルを捕獲すると、プロセスがそのシグナルを受け取る際に dbx が
プログラムを停止させます。その時点からプログラムを継続する場合、このシグ
ナルはプログラムでは「処理されません」。

「help catch」「help cancel」および「help cont」の -sig オプションも
参照してください。
#
:clear (コマンド)
%clear - ブレークポイントをクリアする
clear                  # 現在の停止位置に設定されたすべてのブレークポイント
                       # をクリアします。
clear <行番号>         # <行番号> に設定されたすべてのブレークポイントを
                       # クリアします。
clear <ファイル名>:<行番号> 
                       #  <ファイル名> の <行番号> に設定されたすべての
                       #  ブレークポイントをクリアします。

「stop|trace|when inclass|inmethod|infunction ...」 を使用して作成された
イベントハンドラは、複数のブレークポイントセットを作成します。
clear に指定された行がこのブレークポイントのどれかと合致すると、
そのブレークポイントだけがクリアされます。このようにして一度クリアされて
しまうと、同一セットに属す個々のブレークポイントは再度有効にすることは
できません。しかし、対応するイベントハンドラを無効にし、その後有効にする
ことにより、全ブレークポイントは再回復することができます。
#
:commands (コマンド)
%commands - すべての組み込みコマンドの概要を表示する
commands                #  すべての組み込みコマンドの概要を表示します。
#
:cont (コマンド)
%cont - プロセスの実行を継続する
cont                            # 実行を継続します。MT プロセスでは、すべての
                                # スレッドが再開されます。プログラムの実行を
                                # 停止するには、^C を使用します。
cont ... -sig <番号>            # <番号> のシグナルを与えて実行を継続します。
cont ... <ID>                   # <ID> はどのスレッドまたは LWP を
                                # 継続するかを指定します。
cont at <行> [ <ID> ]           # <行> で実行を継続します。
                                # プログラムがマルチスレッドの場合には 
                                # <ID> が必要です。
cont ... -follow parent|child|both   
                                # $DBX_follow_fork_mode が ask に
                                # 設定されていて、stop を選択した場合は、
                                # このオプションを使用して続けるプロセスを
                                # 選択してください。both は GUI のもとで
                                # のみ使用可能です。


「help dbxenv」も参照してください。

dbx コマンド言語ループ制御については、「help continue」を参照してください。
#
:dbxdebug (コマンド)
%dbxdebug - dbx の内部情報を表示する (dbx 開発者用)
dbxdebug                        # 種々の内部データ構造体を表示します。
                                # debugging.so が取り込まれていない限り
                                # 使用できません。
#
:dbxenv (コマンド)
%dbxenv - dbx のカスタマイズ変数を表示または設定する
dbxenv                          # dbx のカスタマイズ変数を表示します。

dbx のバージョンに応じて、別々の dbxenv 変数を設定したい場合 (または、その他の
設定をバージョンに応じて切り替えたい場合) は、.dbxrc ファイルに次のようなコード
を記述し、バージョンごとに別々のオプションを指定します。

        if [ $versionno = "6.1" ]
        then
                dbxenv rtc_use_traps on
        else
                # 6.2 および 7.0 ではデフォルトで on なので何もしない。
        fi


        dbxenv 変数とその意味のリスト
        -----------------------------

dbxenv allow_critical_exclusion <on | off>
                                # 通常「loadobjects -x」では、dbx の機能に支障
                                # をきたす重要な共有ライブラリがロード対象から
                                # 除外されないように設定されています。しかし、
                                # この変数を「on」にすると、その設定が解除
                                # されます。この変数が「on」の場合のデバッグ
                                # 対象はコアファイルに限られます。
                                # デフォルトは off。
dbxenv aout_cache_size <数>    
                                # a.out ロードオブジェクトのキャッシュのサイズ。
                                # 単一の dbx から <数> 個のプログラムを順番に
                                # デバッグするときは <数> に設定します。
                                # ゼロに設定しても共有オブジェクト
                                # のキャッシュは有効です。「locache_enable」の
                                # 説明も参照してください。デフォルトは 1。
dbxenv array_bounds_check <on | off> 
                                # (f77 と f90) on の場合、dbx は配列の境界を
                                # 検査します。
                                # デフォルトは on。
dbxenv core_lo_pathmap <on | off>
                                # pathmap 設定は、コアファイル用の共有
                                # ライブラリの場所を制御します。
                                # 詳細は、「help core mismatch」の説明を
                                # 参照してください。デフォルトは、off。 
dbxenv delay_xs <on | off>
                                # delay_xs が on の場合は、-xs オプションを
                                # 使用してコンパイルしたモジュールのデバッグ
                                # 情報は、dbx の起動時にはロードされません。
                                # デバッグ情報は、後で必要になった時点でロード
                                # されます。-xs を指定してコンパイルした
                                # モジュールがある場合は、dbx の起動時間が
                                # 短縮されることがあります。
                                # デフォルトは on です。
dbxenv disassembler_version <autodetect | v8 | v9 | v9vis>
                                # SPARC の場合 :
                                # 
                                # SPARC V8、V9、および VIS (Visual Instruction
                                # Set) 付きの V9 用の dbx 内蔵逆アセンブラの
                                # バージョンを設定します。デフォルト値は 
                                # autodetect で、# a.out が実行されているマシ
                                # ンのタイプに基づいてモードが動的に設定され
                                # ます。
                                #
                                # SPARC 以外の場合 :
                                #
                                # autodetect しか選択できません。
                                # 
dbxenv fix_verbose <on | off>   # fix の最中にコンパイル行の表示を
                                # 制御します。デフォルトは off。
dbxenv follow_fork_inherit <on | off>
                                # 子を追跡するとき、
       follow_fork_inherit on   # ... イベントを継承します。
       follow_fork_inherit off  # ... イベントを継承しません。デフォルトは off
dbxenv follow_fork_mode <parent | child | both | ask>
                                # ... プロセスが fork/vfork/fork1 を実行する
       follow_fork_mode parent  # ... とき、親にとどまります。
       follow_fork_mode child   # ... 子を追跡します。
       follow_fork_mode both    # ... 親と子の両方を追跡します (GUI のみ)
       follow_fork_mode ask     # ... 上記のどちらを望むかユーザーに問い
                                #     合わせます。デフォルトは parent。
dbxenv follow_fork_mode_inner <unset | parent | child | both>
                                # フォークが検出された後、follow_fork_mode が
                                # ask に設定されていて、stop を選択した
                                # 場合にのみ関連します。この変数を設定すると、
                                # cont -follow ... を使用する必要がありません。
dbxenv input_case_sensitive <autodetect | true | false>
                                # autodetect に設定すると、dbx はファイルの
                                # 言語にもとづいて、自動的に大文字小文字を区別
                                # します。fortran ファイルの場合は false、
                                # それ以外の場合は true です。true の場合、変数
                                # および関数名で大文字小文字を区別します。それ
                                # 以外の場合、大文字小文字は区別されません。
                                # デフォルトは autodetect。
dbxenv language_mode <autodetect | main | c | c++ | fortran | fortran90>                                  
                                # 式の解析と評価に使用する言語を指定します。
                                #
                                # モード autodetect は、式評価の言語を現在の
                                # ファイルの言語に設定します。言語の混ざった
                                # プログラムをデバッグするときに便利です 
                                # (デフォルトモード)。
                                #
                                # モード main は、式評価の言語をプログラムの
                                # メインルーチンの言語に設定します。同種の
                                # プログラムをデバッグするときに便利です。
                                #
                                # モード c、c++、fortran、fortran90 は、
                                # 式言語を指定の言語に設定します。
                                # 「help language」も参照してください。
dbxenv mi_mode <on | off>       # 有効な場合、dbx は stop、status、run、cont、
                                # next、step、print、where コマンドで MI 
                                # フォーマットを出力します。
dbxenv mt_scalable <on | off>   # 有効にした場合は、dbx はリソース使用に関して
                                # より慎重となり、300 個以上の LWP を持つプロセス
                                # のデバッグが可能になります。一方で、処理速度が
                                # 明らかに遅くなるという弊害が出てきます。
                                # デフォルトは off。
dbxenv output_auto_flush <on | off>
                                # 各 call の後で fflush() を自動的に呼び
                                # 出します。デフォルトは on。
dbxenv output_base <auto[matic] | 8 | 10 | 16>
                                # 整定数を表示するときのデフォルトの基数。
                                # デフォルトは 10。
dbxenv output_class_prefix <on | off>
                                # 値の出力 (print -r) や宣言の出力 (whatis -r)
                                # 時に、クラスメンバーを接頭辞としてクラス名
                                # に付加します。
                                # デフォルトは on。
dbxenv output_dynamic_type <on | off>
                                # on の場合は、print と display で -d をデフォ
                                # ルトにします。デフォルトは off。
dbxenv output_inherited_members <on | off>
                                # on の場合、print と display で -r を
                                # デフォルトにします。デフォルトは off。
dbxenv output_list_size <行数>  # list コマンドのデフォルトの表示行数を設定。
                                # デフォルトは 10。
dbxenv output_log_file_name <ファイル名>
                                # コマンドログファイルの名前。
                                # コマンドのみを記録し、コマンド出力は記録しま
                                # せん。デフォルトは /tmp/dbx.log.<一意の ID>。
dbxenv output_max_string_length <数>
                                # char * の表示文字数を設定します。
                                # デフォルトは 512。
dbxenv output_pretty_print <on | off>
                                # on の場合は、print と display で -p を
                                # デフォルトとします。デフォルトは off。
                                # 「help prettyprint」を参照してください。
dbxenv output_short_file_name <on | off>
                                # ファイルのショートパス名を表示します。
                                # デフォルトは on。
dbxenv overload_function <on | off>
                                # on の場合は、自動関数多重定義解決
                                # を行います (C++ のみ)。デフォルトは on。
dbxenv overload_operator <on | off>
                                # on の場合は、自動演算子多重定義解
                                # 決を行います (C++ のみ)。デフォルトは on。
dbxenv pop_auto_destruct <on | off>
                                # on の場合は、フレームの pop 時にローカ
                                # ルの適当なデストラクタを自動的に呼び出します。
                                # デフォルトは on。
dbxenv proc_exclusive_attach <on | off>
                                # on の場合は、別のツールが既に接続されている場合
                                # dbx が接続しないようにします。警告: 1 つの
                                # プロセスに複数のツールを接続し、そのプロセスを
                                # 管理しようとすると、大混乱が生じることがあり
                                # ますので注意してください。
                                # デフォルトは on。
dbxenv rtc_auto_continue <on | off>
                                # RTC エラーを
                                # rtc_error_log_file_name に記録して継続
                                # します。デフォルトは off。
dbxenv rtc_auto_suppress <on | off>
                                # on の場合は、同一の位置の RTC エラーは 1
                                # 回だけ報告されます。デフォルトは on。
dbxenv rtc_biu_at_exit <on | off | verbose>
                                # check -memuse が明示的に、
                                # または check -all で on に設定される時に
                                # 使われます。
                                # 値が on の場合は、簡単なメモリー
                                # 使用 (使用ブロック数) 報告がプログラム
                                # 終了時に作成されます。
                                # 値が verbose の場合は、詳細なメモリー使用
                                # 報告が、プログラム終了時に作成されます。
                                # 値が off の場合は何も出力されません。この
                                # 変数は showmemuse コマンドには影響しません。
                                # デフォルトは on 。
「help check」と 「help showmemuse」も参照。

dbxenv rtc_error_limit <数>     # 報告される RTC エラー数。
                                # デフォルトは 1000。
dbxenv rtc_error_log_file_name <ファイル名>
                                # rtc_auto_continue が設定されている場合に RTC
                                # エラーが記録されるファイルの名前。
                                # デフォルトは /tmp/dbx.errlog.<一意の ID>。
dbxenv rtc_error_stack <on | off>
                                # 値が on の場合、スタックのトレースで RTC 内部
                                # 機構に対応したフレームが表示されます。
                                # $DBX_rtc_error_stack
dbxenv rtc_inherit <on | off>   # 値が on の場合、デバッグ対象のプログラムから
                                # 実行される子プロセスに対して実行時検査を行い
                                # ます。
                                # デフォルトは off。
dbxenv rtc_mel_at_exit <on | off | verbose>
                                # リーク検査が on の場合に使用されます。
                                #
                                # 値が on の場合、非詳細メモリーリークレポート
                                # がプログラム終了時に生成されます。verbose の
                                # 場合は、詳細メモリーリークレポートがプログラ
                                # ム終了時に作成されます。off の場合は何も出力
                                # されません。この変数は、showleaks コマンドに
                                # は影響しません。
                                # デフォルトは on。
dbxenv run_autostart <on | off> # on でかつ活動状態のプログラムが存在しない
                                # 場合は、step、next、stepi、nexti で
                                # プログラムが暗黙に実行され、言語依存のメ
                                # インルーチンの位置で停止します。さらに
                                # on の場合は cont でも必要に応じてプログラム
                                # が暗黙に実行されます。
                                # デフォルトは off。
dbxenv run_io <stdio | pty>     # ユーザープログラムの入出力を dbx の stdio と
                                # 特定の pty のどちらにリダイレクトするかを
                                # 決定します。pty は $DBX_run_pty で与えられ
                                # ます。
                                # デフォルトは stdio。
dbxenv run_pty <pty 名>         # $DBX_run_io の設定が pty のときに使用される 
                                # pty の名前を設定します。pty は、主に 
                                # dbx の GUI ラッパーが使用します。
dbxenv run_quick <on | off>     # on の場合、debug コマンドを実行してもシンボル
                                # 情報はロードされません。シンボル情報は、
                                # prog -readsyms を使用して要求に応じてロード
                                # できます。それまで、dbx はデバッグ中のプロ
                                # グラムがストリップされたように動作します。
                                # デフォルトは off です。
dbxenv run_savetty <on | off>   # tty 設定、プロセスグループ、およびキーボード
                                # 設定 (コマンド行で -kbd が使われている場合)
                                # を dbx とデバッグ対象の間で多重化します。
                                # これはエディタやシェルをデバッグするときに
                                # 便利です。dbx が SIGTTIN または SIGTTOU 
                                # を取得してシェルへポップバックする場合には、
                                # on に設定してください。
                                # off に設定すると処理が若干高速化されます。
                                # この設定は dbx がデバッグ対象に接続され
                                # ているとか、GUI 環境で動作しているかという
                                # ことには無関係です。
                                # デフォルトは on。
dbxenv run_setpgrp <on | off>   # on の場合は、プログラムに対して run コマンドを
                                # 実行すると、フォーク直後に setpgrp(2) が呼び
                                # 出されます。
                                # デフォルトは off。
dbxenv scope_global_enums <on | off>
                                #  on の場合は、列挙子のスコープがファイル
                                # でなく大域となります。デバッグ情報(~/.dbxrc)が
                                # 処理される前に設定されます。
                                # デフォルトは off。
dbxenv scope_look_aside <on | off>
                                # 現在のスコープとは別のスコープの中から
                                # ファイルの静的シンボルをさがします。
                                # 「help scope」を参照してください。
                                # デフォルトは on
dbxenv session_log_file_name <ファイル名>
                                # すべてのコマンドおよびその出力を dbx が
                                # 記録するファイルの名前。出力はこのファイルに
                                # 追加されます。デフォルトは "" (セッションは
                                # 記録しない)。
dbxenv stack_find_source <on | off> 
                                # on の場合、-g オプションなしでコンパイルされた
                                # 関数でデバッグ対象が停止位置に達すると、dbx は
                                # ソースを検索し、自動的にそのソースが含まれる
                                # 最初のスタックフレームまで進みます。
                                # デフォルトは on。
dbxenv stack_max_size <数>     
                                # where コマンドのデフォルトサイズを設定します。
                                # デフォルトは 100。
dbxenv stack_verbose <on | off> 
                                # where の引数および行情報の表示を制御します。
                                # デフォルトは on。
dbxenv step_events <on | off>   
                                # step および next 実行時のブレークポイントを
                                # 有効にします。デフォルトは off。
dbxenv step_granularity <statement | line>
                                # ソース行ステップの細分性を制御します。
                                # statement とした場合、次のコード
                                #       a(); b();
                                # を通過する場合、2 つの 'next' が必要です。
                                # line とした場合は 1 つの 'next' とな
                                # ります。複数行のマクロを処理する場合には、細分
                                # 性を行にすると便利です。
                                # デフォルトは statement。
注: 細分性を statement とした場合、コンパイラがステートメント境界に関する情報を
発していないかもしれないため、必ずしも望む効果が得られるとは限りません。

dbxenv suppress_startup_message <番号>
                                # 起動メッセージを表示しないリリースレベルを
                                # 設定します。デフォルトは 3.01。
dbxenv symbol_info_compression <on | off>
                                # インクルードファイルごとにデバッグ情報
                                # を 1 回だけロードし、Fortran 用の共通
                                # ブロックシンボルテーブルを 1 回だけ作成します。
                                # デフォルトは on。
dbxenv trace_speed <数>
                                # トレースの実行速度を設定します。この値はス
                                # テップ間の停止秒数を表します。
                                # デフォルトは 0.50。

以上の各指定には、DBX_trace_speed などの ksh の環境変数が存在します。
この変数を直接設定しても dbxenv コマンドを使用しても結果は同じです。

#
:debug (コマンド)
%debug - デバッグ対象のプログラムを表示および変更する
debug                         # デバッグされているプログラムの名前と引数を
                              # 表示します 
debug <プログラム>            # <プロセス ID>、<コア> を指定せずに
                              # <プログラム> のデバッグを開始します。
debug -c <コア> <プログラム>  # コアファイルが <コア> の <プログラム> の
                              # デバッグを開始します。
debug -p <プロセス ID> <プログラム>   # プロセス ID が <プロセス ID> の 
                              # <プログラム> のデバッグを開始します。
debug <プログラム> <コア>     # コアファイルが <コア> の <プログラム> の
                              # デバッグを開始します。
                              # <プログラム> に - を指定すると、dbx は
                              # コアファイルから実行可能モジュールの名前を
                              # 抽出しようと試みます。
                              # 詳細は「help core」を参照してください。
debug <プログラム> <プロセス ID>       # プロセス ID が <プロセス ID> の
                              # <プログラム> の デバッグを開始します。
                              # <プログラム> に - を指定すると、dbx は /proc
                              # から a.out を検索します。
debug -f ...                  # コアファイルが一致しない場合でも、強制的に
                              # ロードします。
debug -r ...                  # -r オプションを付けると、dbx はすべての 
                              # display、trace、when、stop を保存します。
                              # -r オプションを付けないと、暗黙で
                              # delete all と undisplay 0 が実行
                              # されます。
debug -clone ...              # -clone オプションを付けると、別の dbx が
                              # 実行を開始するので、一度に複数のプロ
                              # セスのデバッグが可能です。
                                GUI のもとで実行している場合だけ有効。
debug -clone                  # 別の dbx を開始しますが、デバッグは開始しま
                                せん。GUI のもとで実行している場合だけ有効。
debug [<オプション>] -- <プログラム>   # ダッシュで始まる <プログラム> の
                                 デバッグを開始。
注: debug コマンドでプログラムを読み込むと、リーク検査および
アクセス検査は無効になります。これは "check" コマンドを使用して有効にできます。

「help prog」も参照してください。
#
:delete (コマンド)
%delete - ブレークポイントとハンドラを削除する
delete [-h] <番号> ...      # 指定の番号の trace、when、stop を削除します。
                            # 隠されたハンドラを削除するには、-h オプションを
                            # 指定してください。
delete [-h] 0 | all | -all  # 永続ハンドラおよび隠されたハンドラを除く、
                            # すべての trace、when、stop を削除します。-h を
                            # 指定すると、隠されたハンドラも削除されます。
delete -temp                # すべての一時ハンドラを削除します。
delete $firedhandlers       # 最も新しいストップページを引き起こしたハンドラを
                            # すべて削除します。
#
:detach (コマンド)
%detach - 処理対象のプロセスを dbx から切り離す
detach                      # デバッグの対象を dbx から切り離します。
                            # 受信待ちのシグナルは取り消されます。
detach -sig <シグナル>      # 指定のシグナルを転送しながら、切り離します。
detach -stop                # プロセスを切り離し、停止状態のままにします。

-stop オプションを使用すれば、排他的アクセスのためブロックされる可能性のある、
/proc に基づいたデバッグツールの一時的なアプリケーションを実行できます。
例：
        (dbx) oproc=$proc       # 前のプロセス ID を覚えておく
        (dbx) detach -stop
        (dbx) /usr/proc/bin/pwdx $oproc
        (dbx) attach $oproc
#
:dis (コマンド)
%dis -  マシン命令を逆アセンブルする
dis <アドレス> [/ <カウント>]  # アドレスが <アドレス> で始まる <カウント>
                               # 命令 (デフォルトは 10) を逆アセンブルします。
dis <アドレス 1>, <アドレス 2> # アドレス <アドレス 1> と <アドレス 2>
                               # 間の命令を逆アセンブルします。
dis                            # + のアドレス (「help examine」 参照) から
                               # 始まる 10 命令を逆アセンブルします。
dis /<個数>                    # + から <個数> 個の命令を逆アセンブルします。

    <アドレス> のデフォルト値は最後の逆アセンブルの後のアドレスです。
    現在のアドレス値は examine コマンド (その別名 は x) によって共有
    されます。(「help examine」も参照してください。)
#
:display (コマンド)
%display - 停止ポイントごとに式を評価して表示する
display                # 表示の対象となっている式のリストを表示します。
display <式>, ...      # 停止ポイント毎で、<式>, ... の値を表示します。
display [-r|+r|-d|+d|-p|+p|-L|-f<書式>|-F<書式>|--] <式>, ...
                        フラグについては「help print」を参照。

「help undisplay」も参照。
#
:document (コマンド)
%document - コマンドや表題に解説を付ける
document <コマンド名>   # <コマンド名> に解説を付けます。document コマンドは
                        # 標準入力から読み取ります。
                        # 新しいコマンド foo に解説を追加するには、以下の
                        # ようにします。

                         (dbx) document foo
                         foo <引数>   # 各文字を大文字に変換して、<引数> を
                                      # エコーします。
                         ^D

                          入力を終了するには ^D キーを押します。

                          コマンド foo の解説を削除するには、次のようにします。
                         
                          (dbx) document foo </dev/null
#
:down (コマンド)
%down - 呼び出しスタックを下方 (`main' から遠ざかる方向) に移動する
down                   # 呼び出しスタックを 1 レベルだけ下げます。
down <数>              # 呼び出しスタックを <数> レベル下げます。
down -h [<数>]         # 呼び出しスタックを下げます。隠れたフレームも飛び越し
                       # ません。
#
:dump (コマンド)
%dump - 手続き内の局所変数をすべて表示する
dump                   # 現手続きの局所変数をすべて表示します。
dump <手続き>          # <手続き> の局所変数をすべて表示します。
#
:edit (コマンド)
%edit - $EDITOR を起動してソースファイルを編集 (GUI の使用時には表示) する
edit                   # 現ファイルを編集します。
edit <ファイル>        # 指定された <ファイル> を編集します。
edit <手続き>          # 関数または手続き <手続き> のあるファイルを編集します。

dbx が GUI の下で動作していない場合、edit は $EDITOR を使用します。
GUI の下で動作している場合、edit は GUI にメッセージを送信して適切な
ファイルを表示します。 
# GUI が -E オプションで起動された場合、
# ソースディスプレイを処理する外部エディタが使用され、
# それ以外の場合はソース区画が指定のファイルを表示するために更新されます。
# 
:examine (コマンド)
%examine - メモリー内容を表示する
examine [ <アドレス> ] [ / [ <個数> ] [ <書式> ] ]

        <アドレス> で始まるメモリー内容の <個数> 個の項目を、指定の <書式> で
        表示します。デフォルトの <アドレス> は、最後の表示で使用したアドレスの
        次の <アドレス> です。デフォルトの <個数> は 1 です。デフォルトの
        <書式> は、2 回目以降の実行では、最後に実行した examine で使用した
        もので、1 回目は、X です。
        examine コマンド (その別名は x) で使用されるアドレスは dis コマンドで
        使用されるアドレスと同じものです。
        (「help dis」を参照してください。)
 
examine <アドレス 1> , <アドレス 2> [ / [ <書式> ] ]

        <アドレス 1> から <アドレス 2> まで (両端を含む) のメモリーの内容を、
        書式 <書式> で表示します。

examine <アドレス> = [ <書式> ]

        アドレスの内容ではなく、アドレスを指定の書式で表示します。
                
        <アドレス> として + を使用すると、最後に表示されたアドレスの
        すぐ後のアドレスを表します (省略時と同じ)。

        x は、examine の事前定義されている別名です。
        有効な <書式> は以下のとおりです:

               i     命令 (逆アセンブリ)
               d,D   10 進 (2 または 4 バイト)
               o,O   8 進 (2 または 4 バイト)
               x,X   16 進 (2 または 4 バイト)
               b     8 進 (1 バイト)
               c     文字
               w     ワイド文字
               s     文字列
               W     ワイド文字列
               f     浮動小数点 16 進 (4 バイト、6 桁精度)
               F     浮動小数点 16 進 (8 バイト、14 桁精度)
               g     F と同じ
               E     浮動小数点 16 進 (16 バイト、14 桁精度)
               ld,lD 10 進 (4 バイト、D と同じ)
               lo,lO 10 進 (4 バイト、O と同じ)
               lx,lX 16 進 (4 バイト、X と同じ)
               Ld,LD 10 進 (8 バイト)
               Lo,LO 8 進 (8 バイト)
               Lx,LX 16 進 (8 バイト)

#
:gdb (コマンド)
%gdb - gdb コマンドセットのサポート
gdb on | off
"gdb on" と入力して、gdb コマンドモードにすると、
dbx が gdb コマンドを認識し、受け入れる状態になります。
gdb コマンドモードを終了して dbx コマンドモードに戻るには、
"gdb off" と入力します。gdb コマンドモードが有効な間は
dbx コマンドは受け付けられない、またその逆も成り立つことに
注意してください。ブレークポイントなど、すべてのデバッグ設定は、
コマンドモードの切り替えに関係なく保存されます。

現在のリリースでは、次の gdb コマンドはサポートされていません。
        - commands      - define
        - handle        - hbreak
        - interrupt     - maintenance
        - printf        - rbreak
        - return        - signal
        - tcatch        - until
#
:fix (コマンド)
%fix - ソースファイルを再コンパイルおよび再リンクする
特定のプログラムに変更を加えたいとき fix を使用します。
fix は変更されたソースファイルを再コンパイルし、変更された関数をアプリ
ケーションに動的にリンクします。
fix                     # 現在のファイルを修正します。
fix <ファイル名> <ファイル名> ...
                        # リストの中のファイルを修正します。
fix -f                  # ソースが修正されていなくても、ファイルの修正を
                        # 強制します。
fix -a                  # デバッガが変更したファイルをすべて修正します。
fix -g                  # -O フラグを除き、-g フラグを加えます。
fix -c                  # コンパイルされる行を印字 (dbx が内部的に使用する
                        # オプションを含む場合もあります)。
fix -n                  # compile/link コマンドを実行しません
                          (-vとともに使用)。
fix -v                  # 詳細モード (dbxenv の設定は無効になる)
fix +v                  # 簡略モード (dbxenv の設定は無効になる)

コンパイラとリンクのカスタマイズ方法については、「help _cb_fix_comp」と
「help _cb_fix_link」を参照してください。
また、詳細は「help fix-pitfalls」と「help dbxenv」の fix_verbose を参照して
ください。
#
:fixed (コマンド)
%fixed - 修正されたすべてのファイル名を表示する
fixed                  # 修正されたファイルすべての名前を一覧表示します。
#
:exception (コマンド)
%exception - 現在の C++ 例外の値を表示する
exception [-d | +d]    # 現在の C++ 例外の値を表示する。-d フラグの意味に
                         ついては「help print」を参照。

「help whocatches」と「help event specification」も参照。
#
:exists (コマンド)
%exists - シンボル名が存在するかどうかを検査する
exists <名前>          # 現在のプログラムの中に <名前> が見つかった場合 
                       # 0 を、見つからなかった場合 1 を返します。
#
:file (コマンド)
%file - 現在のファイルの名前を表示および変更する
file                   # 現在のファイルの名前を表示します。
file <ファイル名>      # 現在のファイルを変更します。
#
:files (コマンド)
%files - 正規表現で一致したすべてのファイル名を表示する
files                  # 現在のプログラムのデバッグ情報に寄与したすべ
                       # てのファイル (コンパイルした -g ファイル) 
                       # の名前をリストします。
files <正規表現>       # 指定の正規表現に一致するすべての -g ファイル名を
                       # リストします。

例:
   (dbx) files ^r
myprog:
  retregs.cc
  reg_sorts.cc
  reg_errmsgs.cc
  rhosts.cc

正規表現の書式については、「help regexp」を参照してください。

#
:frame (コマンド)
%frame - 現スタックのフレーム番号を表示および変更する
frame                  # 現フレームのフレーム番号を表示します
frame [-h] <番号>      # フレーム番号 <番号> を現フレームと設定します
frame [-h] +[<数>]     # スタックを <数> フレーム分 (デフォルトは 1) 上がります
frame [-h] -[<数>]     # スタックを <数> フレーム分 (デフォルトは 1) 下がります
       -h              # 行き先が隠れたフレームにでも移動を行います
  
#
:visiting$$scope (トピック)
dbx でさまざまプログラムの要素を調べるときは dbx の調査スコープを変更する必要
があります。調査スコープの一部を確認できる組み込み変数があります。調査スコープ
は、曖昧なシンボルを解決するというような式の評価で使用されます。たとえば、
print i は調査スコープを使用していずれの i のことを指しているのかを判断します。

debug または attach コマンドは調査スコープを初期化します。プログラムがブレーク
ポイントで停止するときはいつでも dbx は  調査スコープを現在の位置に設定します。
このたびに dbx は通常ソースコードを持つスタックフレームを探します。
「help dbxenv」の stack_find_source 変数を参照してください。

各スレッドと LWP は独自の調査スコープを保持しています。
スレッド間で変更を行う場合、調査スコープは保持されます。

スタックフレームのコマンド (up、down、frame <数>) を使用して現在のスタックフ
レームを変更する場合、調査スコープは新規のスタックフレームの PC に従って設定さ
れます。

調査スコープを設定するコマンドには以下のものがあります。
line、func、file、list <関数>、list <ファイル>

list <関数> または list <ファイル> を使用しないかぎり、list コマンドで使用され
る行番号の位置によって調査スコープが移動することはありません。

調査スコープが設定された場合、現在の list の行番号は新規スコープの始まりに設定
されます。これ以降 list コマンドは現在の行を更新します。
しかし現在のファイル中でリストしている行は調査スコープを変更しません。
たとえば、list my_func と list 127 は同じソース行のブロックを表示しますが、
list my_func は調査スコープを my_func に変更するのに対し、list 127 はソース
行を表示しているだけにすぎません。

現在の調査スコープを表示する組み込み変数には以下のものがあります。
   $vscope $vlineno $vfunc $vclass $vfile $vloadobj

現スレッドまたは LWP の 現 PC を常に反映している別の変数のセットが
あります。
   $scope  $lineno  $func  $class  $file  $loadobj
これらの値は調査スコープを変更するさまざまなコマンドの影響を受けません。
#      
:func (コマンド)
%func - 現関数の名前を表示および変更する
func                   # 現在の関数の名前を表示します。
func <手続き>          # 関数または手続き <手続き> を現関数とします。
#
:funcs (コマンド)
%funcs - 正規表現で一致したすべての関数名を表示する
funcs                  # 現在のプログラムの関数のすべてを一覧表示します。
funcs [-f <ファイル名>][-g][<正規表現>]                  
      -f <ファイル名>  # ファイル中の関数のすべてを一覧表示します。
      -g               # すべての関数をデバッグ情報とともに一覧表示します。
      <正規表現>       # 正規表現に一致する関数のすべてを一覧表示します。

例:
  (dbx) funcs [vs]print
  `libc.so.1`isprint
  `libc.so.1`wsprintf
  `libc.so.1`sprintf
  `libc.so.1`vprintf
  `libc.so.1`vsprintf

正規表現については、「help regexp」を参照してください。

#
:handler (コマンド)
%handler - イベントハンドラを (使用可能、使用不能、その他に) 変更する
ハンドラは、デバッグセッション中に管理する必要がある各イベントに対して作成
されます。コマンド trace、stop、when はハンドラを作成します。これらの各
コマンドは、ハンドラ ID と呼ばれる番号 (<hid>) を返します。handler、status、
delete コマンドは、汎用的な方法でハンドラに関する情報を操作または提供します。

handler -enable <ハンドラ ID>, ...    # 指定ハンドラを使用可能にします。
                                      # 'all' ですべてを指定。
handler -disable <ハンドラ ID>, ...   # 指定ハンドラを使用不能にします。
                                      # 'all' ですべてを指定。
                                      # 最も新しいストップページを引き起こ
                                      # したハンドラを無効にするには、
                                      # <ハンドラ ID> の代わりに
                                      # $firedhandlers を使用します。

handler -count <ハンドラ ID>          # 指定ハンドラのカウンタを出力します。
handler -count <ハンドラ ID> <新制限> # 指定ハンドラの新たな計数制限を設けます。
handler -reset <ハンドラ ID>          # 指定ハンドラのカウンタをリセットします。

「help event」も参照してください。
#
:help (コマンド)
%help - コマンドと表題の詳細情報を表示する
help                     # dbx 組み込みコマンドの概要を印字します。
help <コマンド>          # <コマンド> に関するヘルプを印字します。
help <標題> <副題>       # <標題> と <副題> に関するヘルプを印字します。
help -k <キーワード>     # <キーワード> を含む各表題の名前を印字します。

                dbx が GUI の下で動作していないときには、help は、
                $PAGER が指定されている場合、その $PAGER へ出力されます。
                $PAGER が指定されておらず、/usr/ucb/more が存在する場合は、
                /usr/ucb/more へパイプされます。(path オプションを設定して
                いない場合、$PAGER の値はフルパスで指定しなければなりません)。
                この機能を無効にするには、unalias help をユーザーの .dbxrc 
                ファイルに追加してください。

                commands コマンドを使用すると、すべての help コマンドの
                簡単な説明が表示されます。新機能と変更点については、
               「help changes」を参照してください。

#
:hide (コマンド)
%hide - 正規表現に一致したスタックフレームを隠す
hide                   # 現在有効なスタックフレームのフィルタを一覧表示します。
hide <正規表現>        # <正規表現> に一致するスタックフレームを隠します。
                       # 正規表現は関数名かロードオブジェクトの名前に一致し、
                       # sh または ksh 形式のファイル用正規表現です。

「help unhide」も参照してください。
#
:history (ksh コマンド)
%history - コマンドの履歴を操作する
history               # 最新のコマンドのリストを表示します。
history <数>          # 履歴リストをリサイズして、<数> コマンドを保持します。
history -             # 履歴のコマンドの記録を停止します。
history +             # コマンドの記録を再開します。
#
:ignore (コマンド)
%ignore -  シグナルを捕捉しない
ignore                # 無視されたシグナルのリストを表示します。
ignore <数>...        # 番号が <数> のシグナルを無視します。
ignore <シグナル>...  # 名前が <シグナル> のシグナルを無視します。
                      # SIGKILL は捕捉または無視することはできません。
ignore $(catch)       # すべてのシグナルを無視します。
シグナル無視を指定すると、dbxはプロセスがその種のシグナルを受け取っても
「止まりません」。

「help catch」「help cancel」および「help cont」の -sig オプションも
参照してください。
#
:import (コマンド)
%import - dbx コマンドライブラリからコマンドを読み込む
import <パス名>       # dbx コマンドライブラリ <パス名> から dbx コマンドを
                      # 読み込みます。
#
:intercept (コマンド)
%intercept -  C++ の型の例外の送出を阻止 (捕獲) する。C++ でのみ使用可能
intercept <型名>           # 型 <型名> の例外を阻止する
intercept -a               # すべての例外を阻止する。
intercept -x <型名>        # <型名> は阻止しない。
intercept -a -x <型名>     # <型名> 以外のすべての型を阻止する。
intercept                  # 阻止された型の一覧。

<型名> には、-unhandled と -unexpected のどちらかを指定できます。
対応する catch ブロックを持たない例外が送出された場合、その送出は
「ハンドラを持たない (unhandled)」送出と呼ばれます。また、呼び出し元の
関数で規定する仕様に合致しない例外が送出された場合は、その送出は
「予想外の (unexpected)」送出と呼ばれます。

ハンドラを持たない例外と予想外の例外は、デフォルトでは阻止 (捕獲) されます。

「help event specification」以下の「throw」、「help event variables」以下の
「$exception」および「help unintercept」も参照してください。
#
:kill (ksh/dbx コマンド)
%kill - プロセスにシグナルを送ったり強制終了させる
kill -l                       # すべてのシグナルの番号、名称、説明一覧を表示
                              # します。
kill                          # 制御下にあるプロセスを強制終了します。
kill <ジョブ>...              # 一連のジョブに SIGTERM シグナルを送ります。
kill -<シグナル> <ジョブ>...  # 指定のシグナルを一連のジョブに送ります。
                              # <ジョブ> はプロセス ID でも、「help fg」で
                              # 述べる方法のいずれで指定してもかまいませんが、
                              # この場合には % は必須です。
#
:language (コマンド)
%language - 現在のソースの言語を表示および変更する
language              # 現在の language モードを表示します。
                      # (「dbxenv language_mode」を参照)
                      # もしモードが autodetect もしくは main ならば
                      # 現在の言語も表示します。これは式の構文解析、
                      # 評価に役立ちます。
language <言語>       # このコマンドのモードは推奨しません。
                      # dbxenv language_mode を使用してください。
 
「help dbxenv」の「language_mode」も参照。
#
:line (コマンド)
%line - 現在の行番号を表示および変更する
line                         # 現在の行番号を表示。
line <行番号>                # 現在の行番号を <行番号> に設定。
line "<ファイル名>"          # 現在の行番号をファイル <ファイル名> の 1 行目に
                             # 設定。
line "<ファイル名>":<行番号> # 現在の行番号をファイル <ファイル名> の <行番号>
                             # 行目に設定。ファイル名を囲む「"」は省略可能。

 例
    line 100
    line "/root/test/test.cc":100
#
:list (コマンド)
%list - ソースファイルを行単位で表示する
デフォルトの表示行数 N は dbxenv の変数 output_list_size で制御されます。
詳細は、「help dbxenv」の output_list_size を参照。
list                  # N 行表示する。
list <n>              # 行番号 <n> を表示する。
list +                # 次の N 行を表示する。
list +<n>             # 次の <n> 行を表示する。
list -                # 前の N 行を表示する。
list -<n>             # 前の <n> 行を表示する。
list <n1>,<n2>        # <n1> から <n2> までの行を表示する。
list <n1>,+           # <n1> から <n1> + N までを表示する。
list <n1>,+<n2>       # <n1> から <n1> + <n2> までを表示する。
list <n1>,-           # <n1>-N から <n1> までを表示する。
list <n1>,-<n2>       # <n1>-<n2> から <n1> までを表示する。
list <関数>           # <関数> のソースの先頭から表示する。
list <ファイル名>     # ファイル <ファイル名> の先頭から表示する。
list <ファイル名>:<n> # ファイル <ファイル名> の行 <n> から表示する。
                      # 行番号としてファイルの最後の行を表す $ を指定できます。
                      # コンマは省略可能です。list <関数> は現在
                      # の有効範囲を変更します。詳細は、「help scope」を参照。
Options:
-i または -instr      # ソース行とアセンブリコードを交互に表示する。
-w または -w<n>       # 行または関数の前後 N (または <n>)行 (ウィンドウ) をリ
                      # ストする。このオプションを指定した場合は、「+」または
                      #「-」構文を指定したり 2 つの行番号を指定することはでき
                      # ません。 

例:
    list                      // 現在の行から N 行を表示する。
    list +5                   // 現在の行から次の 5 行を表示する。
    list -                    // 前の N 行を表示する。
    list -20                  // 前の 20 行を表示する。
    list 1000                 // 行 1000 を表示する。
    list 1000,$               // 行 1000 から最後の行までを表示する。
    list 2737 +24             // 行 2737 と次の 24 行を表示する。
    list 1000 -20             // 行 980 から 1000 までを表示する。
    list "test.cc":33         // ファイル test.cc のソース行 33 を表示する。
    list -w                   // 現在の行の前後 N 行を表示する。
    list -w8 `test.cc`func1   // 関数 func1 の前後 8 行を表示する。
    list -i 500 +10           // 行 500 から行 510 までのソースとアセンブ
                                 リコードを表示する。
アセンブリレベルのソースコードのリストについては 「listi」 を参照してください。
#
:listi (コマンド)
%listi - リストを表示し、命令を逆アセンブルする
「list -i」と同じ。詳細は 「help list」を参照してください。
#

:loadobject (コマンド)
%loadobject - ロードオブジェクトのシンボル情報を表示、制御する
loadobject <サブコマンド> <サブコマンド引数>
(このコマンドのデフォルトの別名として 「lo」を使用できます。)

loadobject -list    <正規表現>            現在読み込まれているロードオブジェク
                                          トを表示します。
loadobject -load    <ロードオブジェクト>  指定されたロードオブジェクトのシンボ
                                          ルを読み込みます。
loadobject -unload  <正規表現>            指定されたロードオブジェクトの読み込
                                          みを解除します。
loadobject -hide    <正規表現>            dbx の検索アルゴリズムの対象からロー
                                          ドオブジェクトを削除します。
loadobject -use     <正規表現>            dbx の検索アルゴリズムの対象にロード
                                          オブジェクトを加えます。
loadobject -dumpelf <正規表現>            ロードオブジェクトの各種の ELF 情報を
                                          表示します。
loadobject -exclude <除外正規表現>        <除外正規表現> のパターンと一致する
                                          ロードオブジェクトの自動読み込みを禁
                                          止します。
loadobject -exclude                       除外パターンのリストを表示します。
loadobject -exclude -clear                除外パターンのリストを消去します。

<正規表現> の指定は任意です。省略した場合は、該当するコマンドがすべての
ロードオブジェクトに適用されます。

<除外正規表現> の指定は必須です。省略することはできません。

このコマンドで使用する「正規表現」の詳細については「help regexp」を
参照してください。

dbx の内部でのロードオブジェクトの動作については、
「help loadobject management」を参照してください。

loadobject -list
loadobject -list -a
loadobject -list <正規表現>

    各ロードオブジェクトの完全パス名と、これらのオブジェクトの状態を示す文字を
    表示します。現在は隠されているロードオブジェクトが -a オプションを使用する
    場合にのみ表示されます。
    それぞれの文字の意味は次のとおりです。

    'h' : 隠されたロードオブジェクトであることを意味します。「whatis」 または
          「stop in」のようなシンボルを検索するコマンドでは検出されません。
    'u' : アクティブなプロセスがある場合で 「u」は「マップされていない」こと
          を意味します。
    'p' : この文字は、「loadobject -load」コマンドや、プログラム中の dlopen イ
          ベントによって「読み込み済み」になっているロードオブジェクトに付けら
          れます (「help loadobject preloading」を参照してください)。

    例:
    
      (dbx) lo -list libm
         /usr/lib/64/libm.so.1
         /usr/lib/64/libmp.so.2
         
      (dbx) lo -list ld.so
       h  /usr/lib/sparcv9/ld.so.1 (rtld)

    上記の最後の例は、実行時リンカーのシンボルがデフォルトで隠されているること
    を示しています。dbx コマンドでこれらのシンボルを使用するには、後述の
    「lo -use」コマンドを使用する必要があります。

loadobject -load <ロードオブジェクト> ...
loadobject -load -all

    <ロードオブジェクト> では、完全パス名、または /usr/lib や /usr/lib/sparcv9 
    に含まれているライブラリを指定できます。デバッグ中のプログラムがある場合は、
    該当する ABI ライブラリディレクトリだけが検出の対象になります。
    -all オプションを使用して、現在プロセスによってマップされ、
    まだ読み込まれていないロードオブジェクトすべてを dbx でロードするか
    どうか確認します。
    複数の「lo -exclude」コマンドでプログラムを開始した後、いくつかの
    除外を削除した場合にこの方法を使用できます。

loadobject -unload <正規表現>

    このコマンドは、コマンド行で指定された <正規表現> と一致するロードオブジェ
    クトのシンボルを読み込み解除します。ただし、「debug」コマンドで読み込まれ
    た主プログラムは読み込み解除できません。また、現在使用されていたり、dbx が
    機能するうえで必要なロードオブジェクトも、読み込み解除できない場合がありま
    す。

loadobject -dumpelf <正規表現>

    このコマンドは、ディスク上のロードオブジェクトファイルの ELF 構造体につい
    ての情報を出力します。この出力の詳細は変更される可能性が高くなります。こ
    の出力を解析したい場合は、なるべく Solaris の「dump」コマンドや「elfdump」
    コマンドを使用してください。

loadobject -exclude  <除外正規表現>

    このコマンドは、<除外正規表現> と一致するロードオブジェクトのシンボルを、
    自動的に読み込まないようにします。他のサブコマンドの <正規表現> と異なり、
    この正規表現は必ず指定する必要があり、デフォルトで「すべて」にはなりません。
    
    現時点では、この機能を使用して、主プログラムや実行時リンカーの読み込み
    を禁止することはできません。また、C++ 実行時ライブラリの読み込みを禁止する
    と、C++ が機能しなくなる可能性があります。この機能は、実行時検査 (RTC) と
    は併用しないでください。

loadobject -use <正規表現>

    このコマンドは、「隠された」ロードオブジェクトをプログラムのスコープに取
    り込み、これらのロードオブジェクトの型と関数を dbx から参照できるようにし
    ます。これらのロードオブジェクトは、あらかじめ dbx によって自動的に、また
    は「lo -load」コマンドによって明示的に読み込まれていなければなりません。

loadobject -hide <正規表現>

    このコマンドは、ロードオブジェクトをプログラムのスコープから除外し、これら
    のロードオブジェクトの関数とシンボルを dbx から隠します。さらに、このコ
    マンドは「読み込み済み」ビットをリセットします。(「help loadobject 
    preloading」を参照してください。)

ロードオブジェクトの詳細と、dbx がロードオブジェクトをどのように取り扱うかにつ
いては、「help loadobject management」、「help loadobject preloading」、および
「help core mismatch」を参照してください。

#

:loadobject$$management (トピック)
ロードオブジェクトとは、SVR4 ABI で定義されているように、「ロード可能な
オブジェクト」の省略です。実行可能ファイル (a.out) や共有ライブラリ (*.so)
はロードオブジェクトです。

実行可能ファイルが実行されると、動的リンカーが、そのファイルの依存リストに
含まれるすべてのロードオブジェクトを事前にロードします。dbx は、このロードの
内容を追跡して、ロードオブジェクトのシンボルテーブルを読み取ります。規模の
大きなアプリケーションの場合は、非常に多くの共有ライブラリを持っているため、
起動時の負荷が膨大になってしまうことがあります。このような事態を避けるには

ロードオブジェクトを初期ロードのシンボルテーブルから削除してください。詳細
については「help loadobject」の「exclude」オプションの項を参照してください。

アプリケーションが実行されると、動的リンカーは dlopen(3) システム関数を
使用してさらに多くのロードオブジェクトを動的にロードします。ロードされた
オブジェクトはその後 dlclose(3) でアンロードされます。dbx はこのような
イベントを追跡しているため、次のように指定してイベントの内容を通知させる
ことができます。
        stop dlopen                     # すべての dlopen でプロセスを停止
        stop dlopen libjava_g.so        # "libjava_g.so" の dlopen で停止
("stop in dlopen" ではまったく同じ結果にはなりません)
詳細については「help event specification」および「help event variables」を
参照してください。

(when コマンドを使用して) イベントハンドラを記述し、dlopen イベントの発生後
にブレークポイントを設定することもできますが、ロードオブジェクトのシンボル
テーブルを事前にロードし、dlopen イベントが発生する前に、シンボルテーブルに
仮想的なブレークポイントを挿入するほうが簡単です。詳細については「help 
loadobject preloading」を参照してください。

dbx は、特に GUI 環境下で使用している場合は複数の実行可能ファイルをデバッグ
できます。これらの実行可能ファイルは、すべて同じ基本セットのロードオブジェク
ト (libc.so、libthread.so、libX11.so など) を再利用します。これらのライブラ
リのシンボルは、プログラムが実行されるたびに読み込まれるのではなく、いったん
読み込まれた後、後続のプログラムで再利用されます。

メモリーを節約するため、dbx は新しいプログラムをデバッグするときに、それま
での実行可能ファイルのシンボルを読み込み解除しますが、ライブラリは蓄積され、
必要になったときに再利用されます。現在のプログラムで使用されないロードオブジェ
クトのシンボルは「隠され」ます。
ロードオブジェクトの使用 (use) と隠す (hide) については、「help loadobject」
を参照してください。

関連トピック:

   ロードオブジェクトが現在のシステムと一致しない場合のコアファイルの読み込
   みについては、「help core mismatch」を参照してください。

   dbx によるロードオブジェクトのシンボルの読み込みを中止して、プログラムの
   ロードを高速化する方法については、「help loadobject」の「-exclude」オプ
   ションの項を参照してください。

   dlopen() によってプログラムにライブラリが読み込まれる前に、そのライブラリ
   の内部のブレークポイントを設定する方法については、「help loadobject 
   preloading」を参照してください。
#
:loadobject$$preloading (トピック)
dbx では 、まだ読み込まれていないロードオブジェクトを (whatis、func、list など
のコマンドで) 参照したり、その内部にブレークポイントを配置することはできません。
(dbx でのロードオブジェクトの取り扱われ方についての一般的な説明は、
「help loadobject management」および「help loadobject」を参照してください。)
たとえば、dlopen(3) によってプログラムにライブラリが読み込まれる場合、通常は 
dlopen() が実行されるまでは、そのライブラリの内部にブレークポイントは設定でき
ません。ただし、「loadobject -load」コマンドを使用して、ロードオブジェクトを
事前に読み込むと、このようなブレークポイントも設定できるようになります。
(「help loadobject」を参照してください。)

代わりに、いったんプログラムを実行してライブラリを読み込ませ、その後でブレーク
ポイントを設定し、プログラムを再実行することもできます。

コマンドを使用して明示的に読み込まれたり、プログラムが dlopen() を使用して読み
込んだロードオブジェクトには、「読み込み済み」のフラグが付きます。これらのロー
ドオブジェクトのシンボルは、プログラムがこれらのライブラリを開く前から使用でき
ます。「loadobject -list」コマンドの出力では、読み込み済みのライブラリに「p」
の文字が付きます。
#
:loadobjects (コマンド)
「loadobjects」コマンドは、新しい「loadobject」コマンド (別名「lo」) に置き換
えられました。この新しいコマンドの使用法については、「help loadobject」を参照
してください。また、アドレスのマッピング (従来の -v オプション) については、
「proc -map」を参照してください。

ロードオブジェクトを一覧表示するには、「loadobject -list」を使用します。
ロードオブジェクトを除外するには、    「loadobject -exclude ...」を使用します。
ロードオブジェクトを読み込むには、    「loadobject -load ...」を使用します。

従来のオプション       新しいコマンド
----------------       --------------
loadobjects -a         loadobject -list
loadobjects -v         proc -map 
loadobjects -p xxx     loadobject -load xxx
loadobjects -x xxx     loadobject -exclude xxx

-f オプション

   従来の loadbjects コマンドの一部のオプションでは、サブオプションとして
   「-f <ファイル名>」を指定できました。新しい「loadobject」コマンドには、こ
   のサブオプションに直接相当する機能はありません。ロードオブジェクトのパス名
   リストを記載したファイルがある場合、そのファイルの各行の先頭に「lo -load」
   コマンドを挿入し、ロードオブジェクトを読み込ませるときに、source コマンドで
   これらのコマンドを実行してください。(/home/foo/myapp/lib/libf.*.so のよう
   に) 複数のパス名を 1 つの正規表現で指定できる場合は、一連の正規表現を使用し
   て、このファイルの行数を大幅に削減することができます。

#
:lwp (コマンド)
%lwp - 現在の LWP を表示および変更する
lwp                   # 現在の LWP を表示します。
lwp <LWP-ID>          # 指定の LWP <LWP-ID> に切り替えます。
#
:lwps (コマンド)
%lwps - すべての LWP プロセスを表示する

lwps                  # 現在のプロセスの LWP をすべてリストします。
#
:mmapfile (コマンド)
%mmapfile - コアダンプから抜けてしまう mmap ファイルの内容を表示する
mmapfile <マップファイル> <アドレス> <オフセット> <長さ>
Solaris コアファイルは、読み取り専用のメモリーセグメントを含みません。

実行可能な読み取り専用セグメント (たとえばテキスト) は、自動的に処理されます。
また、dbx は 実行可能な関連する共有オブジェクトを調べることで、これらのセグメン
トに対するメモリーアクセスを解決します。

読み取り専用のデータセグメントは、アプリケーションメモリーの 1 つが、いくつかの
データベースをマップする場合によく発生します。たとえば次のようば場合です。
        caddr_t vaddr = NULL;
        off_t offset = 0;
        size_t = 10 * 1024;
        int fd;
        fd = open("../DATABASE", ...)
        vaddr = mmap(vaddr, size, PROT_READ, MAP_SHARED, fd, offset);
        index = (DBIndex *) vaddr;

デバッガを介してメモリーとしてデータベースにアクセスできるようにしたい場合は、
以下を発行する必要があります。
        mmapfile ../DATABASE $[vaddr] $[offset] $[size]
これで構造化された方法によるデータベース内容の表示が可能になります。
        print *index
#
:module (コマンド)
%module - 特定のまたはすべてのモジュールのデバッグ情報を読み取る
module [-v]                  # 現モジュールの名前を表示します。
module [-f] [-v] [-q] <名前> # <名前> に対するデバッグ情報を読み取ります。
module [-f] [-v] [-q] -a     # 全モジュールに対するデバッグ情報を読み取ります。
フラグ:                        -f : ファイルが実行形式ファイルより新しい場合に
                                    もデバッグ情報読み取りを強行します (注意
                                    してご使用ください)。
                               -v : 冗長モード。言語 ファイル名などを表示しま
                                    す。
                               -q : 詳細メッセージを表示しません。
#
:modules (コマンド)
%modules - モジュール名を表示する
modules [-v]            # 全モジュール一覧を表示します。
modules [-v] -debug     # デバッグ情報が入っている全モジュール一覧を表示します。
modules [-v] -read      # すでに読み取られたデバッグ情報が入っているモジュールの
                        # 一覧を表示します。
フラグ :                  -v : 冗長モード。言語、ファイル名などを表示します。
#
:next (コマンド)
%next - ソースの 1 行を実行する (呼び出しは飛び越す)
next                    # 1 行ステップ実行します (呼び出しをステップオーバー)。 
                        # MT プログラムを使用すると、関数呼び出しがステップ
                        # オーバーされたとき、デッドロックを防ぐために、この関
                        # 数呼び出しが持続している間は、すべての LWP が暗黙に
                        # 再開されます。
                        # 活動状態でないスレッドは休止できません。
next <数>               # <数> 行ステップ実行します (呼び出しをステップオーバー)
next ... -sig <シグナル> # next する間、指定のシグナルを配信します。

dbxenv の変数 step_events によってステップ実行中のブレークポイントの有効、
無効が制御できます。

next ... <スレッド-ID>  # 指定のスレッドをステップ実行します。
next ... <LWP-ID>       # 指定の LWP をステップ実行します。

マシンレベルで呼び出しをステップ実行する方法については「nexti」を参照してください。
「help dbxenv」の「step_granularity」も参照してください。
#
:nexti (コマンド)
%nexti - 1 つのマシン命令を実行する (呼び出しをステップオーバー)
nexti                   # 1 つのマシン命令を実行します (呼び出しをステ
                        # ップオーバー)。
nexti <数>              # <数> 個のマシン命令を実行します (呼び出しを
                        # ステップオーバー)。 
nexti -sig <シグナル>   # nexti する間、指定のシグナルを配信します。
nexti ... <LWP-ID>      # ... 指定の LWP。
nexti ... <スレッド-ID> # ... 指定のスレッドが活動状態である LWP。
                        # 関数をステップオーバーしている間は、すべての LWP を
                        # 暗黙には再開しません。
#
:pathmap (コマンド)
%pathmap - ソースファイルの検出などのためにパス名をマッピングする
pathmap [ -c ] [-<インデックス>] <マッピング元> <マッピング先>
pathmap [ -c ] [-<インデックス>] <マッピング先>
        # <マッピング元> から <マッピング先> へのマッピングを確立します。
        # ここで、<マッピング元> と <マッピング先> はファイルパスの接頭辞です。
        # <マッピング元> は、実行可能ファイルまたはオブジェクトファイルに
        # コンパイルされたファイルパスを指し、
        # <マッピング先> はデバッグ時のファイルパスを指します。
        # -c を使用すると、現在の作業ディレクトリのマッピングを行ないます。
        # <マッピング元> が空の場合、すべてのパスは <マッピング先> にマップ
        # されます (古い use コマンドの機能)。インデックスが指定されている
        # 場合は、マッピングはそのインデックスを持つリストに挿入されます。
        # 指定されていない場合は、リストの最後に追加されます。
pathmap         # 現存するパスマッピングの一覧を表示します (インデックスに
                # よって)。
pathmap -s      # pathmap と同じ。ただし出力は dbx で読み取り可能です。
pathmap -d <マッピング元 1> <マッピング元 2> ...
                # 指定のマッピングを削除します。
pathmap -d <インデックス 1> <インデックス 2> ...
                # 指定のマッピングを削除します。

pathmap は、1 つのパス名から違うパス名へのマッピング (対応規則) を
生成します。マッピングは、ソース、オブジェクト、そして現作業ディレクトリ 
(「-c」指定時のみ) に適用されます。

pathmap は、オートマウントや明示的に NFS マウントされたファイルシステムで、
パスがホストごとに異なるような場合に対処するために使います。-c は、
オートマウントされたファイルシステムにおいて、CWD の値が不正確になるなどの
問題に対処するためにも使用してください。pathmap コマンドは、ソースまたは
構築ツリーを移動するときにも使用できます。

pathmap /tmp_mnt / は、デフォルトで存在します。

pathmap は、dbxenv core_lo_pathmap が on に設定されているときに、
コアファイル用のロードオブジェクトを検索するために使います。
pathmap は、これ以外の場合、ロードオブジェクト (共有ライブラリ) の検索に
影響を及ぼしません。
pathmap の詳細については、「help core mismatch」の説明を参照してください。

例:
$<ex smaller>
(dbx) pathmap /export/home/work1 /net/mmm/export/home/work2
  # /export/home/work1/abc/test.c を 
  # /net/mmm/export/home/work2/abc/test.c へマッピング
(dbx) pathmap /export/home/newproject
  # /export/home/work1/abc/test.c を /export/home/newproject/test.c へ
  # マッピング
(dbx) pathmap
(1) -c /tmp_mnt /
(2) /export/home/work1 /net/mmm/export/home/work2
(3) /export/home/newproject

#
:pop (コマンド)
%pop - 呼び出しスタック上のフレームをポップする
pop                   # 現在のトップフレームをスタックからポップします。
pop <数>              # <数> 個のフレームをスタックからポップします。
pop -f <数>           # 指定されたフレーム番号まで、スタックからフレームを
                      # ポップします。
pop -c                # デバッガからの最後の呼び出しをポップします。

-g オプションを付けてコンパイルされた関数の場合に限り、フレームにポップすること
ができます。プログラムカウンタは、呼び出しサイトのソース行の先頭にリセットされ
ます。デバッガが行なった関数の呼び出しを超えてポップすることはできません。
その場合は、'pop -c' を使用してください。通常、pop コマンドでは、ポップされた
フレームに対応する C++ デストラクタがすべて呼び出されます。この設定は、dbxenv の
'pop_autodestruct' を 'off' にセットすれば、変更できます。
#
:print (コマンド)
%print - 式の値を表示する
print <式>, ...      # 式 <式>, ... の値を表示します。
print -r <式>        # 引き継がれたメンバーを含めて、式 <式> の値を表示します
                     # (C++ のみ)。
print +r <式>        # dbxenv 変数 output_inherited_members がオンの場合は、引
                     # き継がれた membersression を表示しません (C++のみ)。
print -d [-r] <式>   # 静的型の代わりに、<式> の動的型を表示 (C++ のみ)。
print +d [-r] <式>   # dbxenv 変数 output_dynamic_type が on の時は、<式> の
                     # 動的型を使用しません (C++ のみ)。
print -p <式>        # prettyprint 関数を呼び出します。
print +p <式>        # dbxenv の output_pretty_print が on のとき prettyprintを 
                     # 呼び出しません。「help prettyprint」を参照。
print -L <式>        # <式> で指定された表示オブジェクトが 4 K を上回る場合に
                     # 表示を行います。
print -l <式>        # (リテラル) 左辺を出力しません。式が文字列 (char *) で始
                     # まる場合、アドレスを表示しないで文字列の文字を引用符なし
                     # でそのまま表示します。
print -f<書式> <式>  # 整数、文字列、または浮動小数点式の書式として <書式> を
                     # 使用します。「help format」を参照。
print -F<書式> <式>  # 指定の書式を使用するが左辺 (変数名または式) を表示しませ
                     # ん。「help format」を参照。
print -o <式>        # <式> の値を表示します。<式> は序数値として列挙型を指定
                     # する必要があります。ここで書式文字列 (-f<書式>) を使用
                     # することもできます。非列挙型の式の場合は、このオプション
                     # は無視されます。
print -- <式>        # 「--」はフラグ引数の終わりを示します。これは <式> が + 
                     # または - で始まるとき使用されます。有効範囲の解決ルールに
                     # ついては 「help scope」を参照。
                     # print の出力をリダイレクトする方法と末尾にコメントを追加
                     # する方法については「help redirection」を参照。
#
:rprint (コマンド)
%rprint - シェル引用規則にもとづいて式を表示する
rprint [-r|+r|-d|+d|-p|+p|-L|-l|-f<書式>|-F<書式>|--] <式>  
                     # 式の値を表示する。特別な引用ルールは適用されないので、
                     # たとえば rprint a > b を実行した場合、
                     # a (もし存在すれば) の値がファイル b に書き出されます。
                     # フラグについては「help print」を参照。
#
:proc (コマンド)
%proc - 現在のプロセスの状態を表示する
proc -map            # ロードオブジェクトの一覧をアドレス付きで表示します。
proc -pid            # 現在のプロセス ID (PID) を表示します。
#

:prog (コマンド)
%prog - デバッグ中のプログラムとその属性を管理する
prog -readsyms       # dbxenv run_quick をオンに設定することによって延期
                     # されたシンボリック情報を読み取る。
prog -executable     # プログラムが - を使用して接続されている場合、
                     # 実行可能ファイル "-" のフルパスを表示。
prog -argv           # argv[0] を含む argv 全てを表示。
prog -args           # argv[0] を除く argv を表示。
prog -stdin          # "< <ファイル名>" 、または stdin が使用されている場合
                     # は空白を表示。
prog -stdout         # "> <ファイル名>" か ">> <ファイル名>"、または 
                     # stdout が使用されている場合は空白を表示。
                     # -args、-stdin、-stdout の出力は、文字列を結合して
                     # run で再使用できるように設計されています。
#
:pwd (ksh コマンド)
%pwd - 現在の作業ディレクトリを表示する
pwd                  # 現在の作業ディレクトリを表示します。
#
:quit (コマンド)
%quit - dbx を終了する
quit                 # dbx を戻りコード 0 で終了。exit と同じです。
quit <n>             # 戻りコード <n> で終了。exit <n> と同じです。
dbx がプロセスに接続されている場合、プロセスは終了前にすべて切り離されます。
保留中のシグナルは取り消されます。微妙な制御が必要であれば detach を使用して
ください。
#

:regexp (トピック)
dbx の一部のコマンド (funcs、files、loadobject) では、正規表現を使用して、
コマンド行で処理対象の項目を指定できます。正規表現の構文については、Solaris の
「regcmp」の man ページ (セクション 3c) を参照してください。また、それぞれの
コマンドで、何が正規表現と対照されるかについては、該当するコマンドのヘルプ情報を
参照してください。
#

:replay (コマンド)
%replay - 最後に行なった実行コマンド以降のコマンドを再実行する
replay [-<数>]       # 最後の run/rerun/debug コマンド以後のすべての、または
                     # <数> 個のコマンドをさかのぼったコマンドまで再生します。

「help save」と「help restore」も参照してください。
#
:rerun (コマンド)
%rerun - 引数なしでプログラムを実行する
rerun                # 引数なしでプログラムの実行を開始します。
rerun <引数群>       # 新しい引数でプログラムの実行を開始します。

「help run」も参照してください。
#
:run (コマンド)
%run - 現在の引数でプログラムを実行する
run                         # 現在の引数でプログラムの実行を開始します。
run <引数群>                # 新しい引数でプログラムの実行を開始します。
                            # プログラムの実行を停止するには ^C を使用します。
run ... >|>> <ファイル>     # 出力のリダイレクト先を設定します。
run ... < <ファイル>        # 入力のリダイレクト先を設定します。

現在、run または runargs を使用して標準エラー出力 (stderr) にリダイレクトする
方法はありません。

「help return」、「help runargs」、「help prog」も参照してください。
#
:runargs (コマンド)
%runargs - ターゲットプロセスの引数を変更する

runargs - ターゲットプロセスの引数を変更する
runargs <引数群>            # run で使用される現在の引数を設定します。
runargs ... >|>> <ファイル> # run で使用される出力のリダイレクト先を設定します。
runargs ... < <ファイル>    # run で使用される入力のリダイレクト先を設定します。
runargs                     # 現在の引数をクリアします。
現在の引数を調べるには debug を引数なしで実行します。「help prog」も
参照してください。
#
:restore (コマンド)
%restore - dbx の実行記録を復元する
restore [<ファイル名>]  # save コマンドで保存されたときの状態に dbx を
                        # 復元します。

「help save」と「relp replay」も参照してください。
#
:save (コマンド)
%save - コマンド記録を保存する
save [-<数>] [<ファイル名>]   # 最後の run/rerun/debug コマンド以後の
                              # すべてのコマンド、または <数> 個のコマンド
                              # を遡ったすべてのコマンドをデフォルトの
                              # <ファイル名> に保存します。

「help restore」と「help replay」も参照してください。
#
:scopes (コマンド)
%scopes - 活動状態のスコープのリストを出力する
scopes                  # ネームスペースを含む活動状態のスコープの
                        # リストを出力します。
#
:search (コマンド)
%search - 現在のファイル中で前方検索する
search <文字列>         # 現在のファイルにおいて <文字列> を前方検索します。
search                  # 最後の検索文字列を使用して、検索を繰り返します。  
#
:setenv (ksh コマンド)
%setenv - 環境変数を設定する
setenv <名前> <文字列>  # 環境変数 <名前> を <文字列> に設定します。
#
:source (コマンド)
%source - ファイルからコマンドを実行する
source <ファイル名>     # <ファイル名> を実行します。
                        # $PATH は検索されません。

「help .」を参照してください。
#
:status (コマンド)
%status - ブレークポイントなどのイベントハンドラを表示する
status                  # 有効な trace、when、stop を表示します。
status <ハンドラ>       # <ハンドラ> を表示します。
status -h               # 隠されたものを含めて、有効な trace、when、
                        # stop を表示します。
status -s               # 同上。ただし次のようにして出力結果を再度
                        # dbx に読み取らせることができます。 

                                (dbx) status -s > bpts 
                                ...
                                (dbx) source bpts

「help debug」の -r フラグの説明も参照してください。
#
:step (コマンド)
%step - ソースの 1 行を実行する (呼び出しにステップイン)
step                     # 1 行だけステップ実行します (呼び出にステップイン)
                         # 活動状態でないスレッドはステップ実行できません。
step <n>                 # <n> 行をステップ実行します。
                         # (呼び出しにステップイン) 
step up                  # 同上、そして現関数を抜けます。
step ... -sig <シグナル> # 同上、そしてシグナルを配信します。
step to [<関数>]         # 現在のソース行で、<関数> にステップインします。
                         # <関数> が指定されない場合、<関数> は、現在の
                         # ソース行用のアセンブリコードで定義された通り、 
                         # 最後に呼び出された <関数> になります。
                         #「help step to」の説明も参照してください。

dbxenv の変数 step_events によってステップ実行中のブレークポイントの有効、
無効が制御できます。

step ... <スレッド-ID>   # 指定の <スレッド-ID> をステップ実行します。step up 
                         # には適用しないでください。
step ... <LWP-ID>        # 指定の <LWP-ID> をステップ実行します。

マシンレベルでステップ実行 (ステップイン) する方法については「stepi」を
参照してください。
「help dbxenv」の「step_granularity」も参照してください。
#
:step$$to (サブトピック)
現在のソース行で最後のアセンブリ呼び出し命令、または関数へのステップイン
(指示された場合) が試みられると、呼び出しが無効になる可能性があります
(条件分岐により)。このような場合、現在のソース行では、呼び出しが無効になり、
または呼び出しがないとみなされ、現在のソース行をステップ実行 (ステップオーバー)
します。ユーザー定義の代入演算子に対する特別な指定は、step to コマンドを
使用したときに、使用されるものです。
#
:stepi (コマンド)
%stepi - 1 つのマシン命令を実行する (呼び出しにステップイン)
stepi                   # 1 つのマシン命令を実行します (呼び出しにステップイン)。
stepi <n>               # <n> マシン命令をステップ実行します 
                        # (呼び出しにステップイン)
stepi -sig <シグナル>   # ... そして、指定のシグナルを配信します。
stepi ... <LWP-ID>      # ... 指定の LWP をステップ実行します。
stepi ... <スレッド-ID> # ... 指定のスレッドが活動状態であるスレッド
#
:stop (コマンド)
%stop - 行レベルのブレークポイントを設定する
stop [ -update ]        # 実行の即時停止。when イベント指定だけで有効です。
stop -noupdate          # 上記と同じですが、GUI 表示は更新しません。
stop at <行>            # 指定行で実行を停止します。
stop in <関数>          # <関数> を呼び出したときに実行を停止します。
stop inclass <クラス名> # C++ のみ: あるクラス、構造、共用体、またはテンプレート
                        # クラスの全メンバー関数のブレークポイントを設定します。
stop inmember <名前>    # C++ のみ: 全メンバー関数 <名前> のブレークポイントを
                        # 設定します。
stop infunction <名前>  # C++ のみ: 全非メンバー関数 <名前> のブレークポイントを
                        # 設定します。

stop には次のような一般的構文があります。 
        
        stop <イベント指定> [ <修飾子> ]

指定されたイベントが起きると、プロセスは停止させられます。
マシンレベルでブレークポイントを設定する方法については「stopi」を
参照してください。
すべてのイベントの一覧と構文については「help event specification」 を
参照してください。イベント管理コマンドの一般的な内容については「help events」を
参照してください。
#
:stopi (コマンド)
%stopi - マシン語レベルのブレークポイントを設定する
stopi at <アドレス>   # <アドレス> の位置で実行を停止します。
stopi in <関数>       # <関数> が呼び出されると、実行を停止します。

stopi は stop に似ていますが、stopi で停止した場合、その位置を逆アセンブルに
よって表示する点が異なります。
stopi には次のような一般的構文があります。

        stopi  <イベント指定> [ <修飾子> ]

指定されたイベントが起きると、プロセスは停止させられます。すべてのイベントの
一覧と構文については、「help event specification」を参照してください。
イベント管理コマンドの一般的な内容については 「help events」を参照してください。
#
:thread (コマンド)
%thread - 現在のスレッドを表示および設定する

thread                              # 現在のスレッドを表示します。
thread <スレッド-ID>                # 現在のスレッドを <スレッド-ID> に
                                    # 切り替えます。

以下の使用法のすべてにおいて、<スレッド-ID> 省略時は、現スレッドが仮定されます。

thread -info [ <スレッド-ID> ]      # 指定のスレットについて分かっていることを
                                    # すべて表示します。
thread -hide [ <スレッド-ID> ]      # 指定のスレッドを「隠し」ます。通常の  
                                    # threads コマンドで表示されなくなります。
thread -unhide [ <スレッド-ID> ]    # 「隠し」を解除します。
thread -unhide all                  # すべてのスレッドの「隠し」を解除します。
thread -suspend <スレッド-ID>       # 指定のスレッドの実行を中断します。中断さ
                                    # れたスレッドは、スレッドリストに S を
                                    # 付けて示されます。
thread -resume <スレッド-ID>        # -suspend を取り消します。
thread -blocks [ <スレッド-ID> ]    # 他のスレッドをブロックしているスレッドが
                                    # 保持しているロックをすべて表示します。
thread -blockedby [ <スレッド-ID> ] # 指定のスレッドがブロックされている同期
                                    # オブジェクトを (存在する場合は) 示します。
#
:threads (コマンド)
%threads - すべてのスレッドを表示する

threads                    # すべての既知スレッドのリストを表示します。
threads -all               # 普通では表示されないスレッド (ゾンビ) を表示します
threads -mode all|filter   # threads がデフォルトですべてのスレッドを表示するか
                           # フィルタをかけるかを制御します。フィルタをかける
                           # 場合、「thread -hide」によって隠されているスレッド
                           # は表示されません。
threads -mode auto|manual  # GUI の下で、スレッドリストの自動更新を使用可能にし
                           # ます。
threads -mode              # 現在のモードを表示します。

コード文字が各スレッドごとに表示されます。「a」は現在実行がスケジュールされて
いる「active」スレッドを表します。「b」は LWP に常時割り当てられている「bound」
スレッドを表します。
#
:sync (コマンド)
%sync - 指定された同期オブジェクトに関する情報を表示する
sync -info <addr>       # <addr> における同期オブジェクトに関する情報を
                        # 表示します。
#
:syncs (コマンド)
%syncs - すべての同期オブジェクト (ロック) をリストする
syncs                   # すべての同期オブジェクト (ロック) をリストします。
#
:lwpid (トピック)
LWP 上のシステムハンドルに用いられる用語です。構文 l@<数> は、各種コマンドで
LWP の指定に使用します。数は、lwp_create() が返し、/proc インタフェースに
よって供給される LWP の ID を示します。通常、全 LWP を示す際には all を使用
できます。
#
:trace (コマンド)
%trace - ソース行、関数呼び出し、変数の変更を実行しながら表示する
trace -file <ファイル名> # 全トレースの出力先を指定の <ファイル名> とします。
                         # トレース出力を標準出力に戻すには、<ファイル名> の
                         # 代わりに - を使用してください。トレース出力は常に
                         #  <ファイル名> に追加されます。また、dbx がプロンプト
                         # を出すたびに、およびアプリケーションが終了するたびに
                         # フラッシュされます。この <ファイル名> は新しい
                         # 実行または attach 後の再開で再びオープンされます。
trace step               # 各ソース行、関数呼び出しと戻りをトレースします。
trace next -in <関数>    # 指定の関数にある間、各ソース行をトレースします。
trace [ at ] <行番号>    # 指定のソース行をトレースします。
trace in <関数>          # 指定の関数への呼び出しと戻りをトレースします。
trace inmember <関数>    # 名前が <関数> のすべてのメンバー関数の呼び出しを
                         # トレースします。
trace infunction <関数>  # 名前が <関数> の関数の呼び出しをトレースします。
trace inclass <クラス>   # <クラス> のメンバー関数のすべての呼び出しを
                         # トレースします。
trace change <変数>      # 変数への変更をトレースします。
...

「trace」の一般的な構文は次のとおりです。

        trace <イベント指定> [<修飾子>]

指定のイベントが起こると、トレース結果が表示されます。
すべてのイベントのリストと構文については、「help event specification」を参照し
てください。イベント管理コマンドの概要については、「help events」を参照してく
ださい。トレースの速度は、dbxenv 変数 trace_speed を使用して設定できます。


ソース行のトレース ('step'イベント指定) は、非汎用修飾子である 
 -nosrc と -nocalls を使用してカスタマイズすることができます。
        -nocalls        トレースメッセージの出入りを無効にします。
        -nosrc          ソース行の内容の印刷を無効にします。
                        代わりにトレース出力は次のようになります。
                                trace: "<ファイル名>":<行番号>
これら 2 つの修飾子を使用すれば、トレースにかかる時間やディスクスペースの
負荷が軽減されます。

マシンレベルのトレースについては「tracei」を参照してください。

古い構文は受け付けられなくなりました (新旧構文間のマッピングについては
「help old trace」を参照してください)。

#
:old$$trace (トピック)
古い trace 構文を上に、それに相当する新しい構文を下に、ペアで示したのが
次のものです。

        trace                   # 各ソース行をトレースします。
        trace step

        trace in <手続き>       # 手続き中、各全ソース行をトレースします。
        trace next -in <手続き>

        trace <行番号>          # 指定のソース行をトレースします。
        trace at <行番号>       # ('stop at'に類似)

        trace <手続き>          # 手続きへの呼び出しをトレースします。
        trace in <手続き>       # ('stop in'に類似)

        trace var at <行番号>   # <行番号> に到達したときに変数を印刷します。
        when at <行番号> {
            echo at line $lineno in file \"$(basename $file)\": var = $[var];
        }

        trace <変数> [in <プロセス>]
                                # 変数への変更をトレースします。
        trace change <変数> [ -in <プロセス> ]
#
:tracei (コマンド)
%tracei - マシン命令、関数呼び出し、および変数の変化を表示する

tracei step                # 各マシン命令をトレースします。
tracei next -in <関数>     # 指定の関数にある間、各命令をトレースします。
tracei [ at ] <アドレス>   # 指定のアドレスにある命令をトレースします。
tracei in <関数>           # 指定の関数への呼び出しと戻りをトレースします。
tracei inmember <関数>     # 名前が <関数> のメンバー関数の呼び出しをトレース
                           # します。
tracei infunction <関数>   # 名前が <関数> の関数の呼び出しをトレースします。
tracei inclass <クラス>    # <クラス> のメンバー関数の呼び出しをトレース
                           # します。
tracei change <変数>       # 変数への変更をトレースします。
...

tracei は、実際には「trace <イベント指定> -instr」の短縮形です。
ここで、-instr 修飾子を指定すると、ソース行単位ではなく命令単位でトレースが
行われます。イベントが発生した場合の出力情報は、ソース行形式に対して、
逆アセンブリ形式です。

詳細については「help trace」を参照してください。
#
:unbutton (コマンド)
%unbutton - GUI ボタンを削除する
unbutton <コマンド>  # <コマンド> を含むすべての GUI ボタンを削除します。
unbutton -a          # すべての GUI ボタンを削除します。このコマンドは、dbx が 
                     # GUI の下で動作していない場合には無効です。
#
:undisplay (コマンド)
%undisplay - display コマンドを取り消す
undisplay <式>, ...    # display <式> コマンドを取り消します。
undisplay <番号>, ...  # <番号> の display コマンドを取り消します。
undisplay 0            # すべての display コマンドを取り消します。
#
:unhide (コマンド)
%unhide - hide コマンドを取り消す
unhide 0               # すべてのスタックフレームのフィルタを削除します。
unhide <正規表現>      # スタックフレームのフィルタ <正規表現> を削除します。
unhide <番号>          # スタックフレームのフィルタ番号 <番号> を削除します。
                       # hide コマンドはフィルタに番号を付けてリストします。
#
:unintercept (コマンド)
%unintercept - intercept コマンドを取り消す。C++ でのみ有効
unintercept <型名>     # intercept リストから <型名> を取り消します。
unintercept -a         # intercept リストのすべてを取り消します。
unintercept -x <型名>  # intercept -x リストから <型名> を取り消します。
unintercept -a -x      # intercept -x リストからすべてを取り消します。
unintercept            # 取り消された例外の型の一覧を表示。

<typename> には、-unhandled と -unexpected のどちらかを指定できます。

「help intercept」も参照してください。
#
:up (コマンド)
%up - 呼び出しスタックを 1 レベル上げる (main に向かって)
up                     # 呼び出しスタックを 1 レベル上に移動します。
up <個数>              # 呼び出しスタックを <個数> 個レベル上に移動します。
up -h [<個数>]         # 呼び出しスタックを上に移動しますが、隠された
                       # フレームは飛び越しません。
#
:use (コマンド)
%use - ディレクトリ検索パスを表示および設定する
このコマンドは古くなっており、このコマンドを使用する場合は、次の pathmap 
コマンドを使用してください。 

    use => pathmap -s
    use <ディレクトリ> => pathmap <ディレクトリ>

詳細については、「help pathmap」を参照してください。

use コマンドは今後のリリースでは使用できません。
#
:whatis (コマンド)
%whatis - 式の型と型の宣言を表示する
whatis [-n] [-r] <名前>     # <名前> の宣言を表示します。
whatis -t [-r] <型>         # <型> の宣言を表示します。
whatis -e [-r] [-d] <式>    # <式> の型を表示します。

                      -r  基底クラスに関する情報を表示します (C++ のみ)。
                      -d  静的型の代わりに動的型をを表示します (C++ のみ)。
                          (「help c++ whatis」も参照してください)。
#
:when (コマンド)
%when - イベントが発生したときにコマンドを実行する
when at <行> { コマンド; }       # <行> に達したときコマンドを実行します。
when in <手続き> { コマンド; }   # <手続き> が呼び出されたときコマンドを
                                 # 実行します。
                
when には次のような一般的構文があります。

        when <イベント指定> [ <修飾子> ] { <コマンド> ... ; }

指定したイベントが開始されると、<コマンド> が実行されます。

すべてのイベントのリストと構文については、「help event specification」を
参照してください。イベント管理コマンドの一般的な内容については、
「help event」を参照してください。
低レベルのイベントを受けてコマンドを実行する方法については「wheni」を
参照してください。
#
:wheni (コマンド)
%wheni - 低レベルのイベントが発生したときにコマンドを実行する
wheni at <アドレス> { コマンド; }  

         # <アドレス> に達するとコマンドを実行します。
           wheni には次のような一般的構文があります。

             wheni <イベント指定> [ <修飾子> ] { <コマンド> ... ; }

           指定したイベントが開始されると、<コマンド> が実行されます。
           すべてのイベントのリストと構文については、
          「help event specification」を参照してください。
           イベント管理コマンドの一般的な内容については、
          「help event」を参照してください。
#
:where (コマンド)
%where - 呼び出しスタックを表示する
where                 # 手続きのトレースバックを表示します。
where <個数>          # トレースバックの上から <個数> 個のフレームを
                      # 表示します。
where -f <番号>       # フレーム <番号> からトレースバックを開始します。
where -h              # 隠されたフレームを含めます。
where -l              # 関数名付きのライブラリ名
where -q              # 関数名のみの高速トレースバック。
where -v              # 詳細トレースバック (関数引数と行情報を含みます)。

上記の形式のどれでも、スレッド ID か LWP ID を続けて、指定されたものの
トレースバックを得ることができます。
「hide」コマンドと「unhide」コマンドも参照してください。

#
:whereami (コマンド)
%whereami - 現在のソース行を表示する
whereami              # 現在の位置 (スタックの先頭) に対応するソース行を
                      # 表示し、現在のフレームに対応するソース行が違う
                      # 場合、それも表示します。
whereami -instr       # ソース行の代わりに、現在逆アセンブルされてい
                      # る命令を表示することを除いて、上記と同じです。
#
:whereis (コマンド)
%whereis - すべての宣言および、特定のアドレスに該当する位置を表示する
whereis <名前>         # <名前> のすべての宣言を表示します。
whereis -a <アドレス>  # <アドレス> に該当する位置を表示します。
#
:which (コマンド)
%which - 指定の名前の完全修飾名を表示する
which [-n] <名前>      # <名前> の完全修飾名を表示します。
which -t <型>          # <型> の完全修飾名を表示します。

#
:whocatches (コマンド)
%whocatches - C++ の例外を捕獲する場所を指定する
whocatches <型>        # 現在実行中の箇所で送出された場合、<型> の例外が
                         捕えられる箇所 (もしあれば) を指示します。
                         次に実行するステートメントが throw x 
                         (ここで、x は <型>) とすると、そのステートメントを
                         捕獲する catch 句の行番号、関数名、フレーム番号を
                         表示します。
                         このスローを実行しているのと同じ関数中に捕獲ポイント
                         がある場合は、"<型> は処理されません" と
                         返されます

#
#
# Runtime checking stuff is here 
#
:check (rtc コマンド)
%check - メモリーのアクセス、リーク、使用状況の検査 (RTC) を有効にする
check

    実行時検査 (RTC) の現在の状態を表示します

    注: このコマンドで有効にした機能は、debug コマンドで
    初期状態にリセットされます。

check -access

    アクセス検査を有効にする。RTC は下記のエラーを報告します。
        baf     # 不正開放
        duf     # 重複解放
        maf     # 境界整列を誤った解放
        mar     # 境界整列を誤った読み取り
        maw     # 境界整列を誤った書き込み
        oom     # メモリー不足
        rua     # 未割り当てメモリーからの読み取り
        rui     # 未初期化メモリーからの読み取り
        wro     # 読み取り専用メモリーへの書き込み
        wua     # 未割り当てメモリーへの書き込み

    アクセスのエラー検出時のデフォルトの動作はプロセスの停止です。この動作を
    変更するには dbxenv の変数 rtc_auto_continue を使います。
    この設定が on のときは、アクセスエラーがファイル (ファイル名は dbxenv の
    変数 rtc_error_log_file_name で設定可能) に記録されます。
    「help dbxenv」も参照してください。

    デフォルトでは、各アクセスエラーは、初めて起こったときにのみ報告されます。
    この動作は、dbxenv 変数の rtc_auto_suppress を使用して変更できます (この
    変数のデフォルト設定は on です)。「help dbxenv」を参照してください。
    
check -leaks [-frames <数>] [-match <結合の下限>]

    リーク検査を有効にする。RTC は下記のエラーを報告します。

        aib     # メモリーリークの可能性あり - ブロックの(先頭ではなく)
                # 途中のアドレスを指すポインタのみ存在する
        air     # メモリーリークの可能性あり - ブロックへのポインタがレジスタに
                # のみ存在する
        mel     # メモリーリーク - ブロックへのポインタがない

    リーク検査が有効な場合は、プログラムの終了時にリークのレポートが自動的に
    作成されます。その時点ですべてのリーク (リークの可能性も含む) が報告されま
    す。デフォルトでは、非詳細レポートが生成されます (dbxenv の rtc_mel_at_exit
    によって設定)。ただし、いつでもリーク報告を表示することができます。
    「help showleaks」も参照してください。

    -frames <数> を指定すると、リーク報告時に最大 <数> 個の異なるスタック
    フレームが表示されます。-match <結合の下限> はリークを結合する目的で使われま
    す。複数のリークを生じる割り当て時の呼び出しスタックが、 <結合の下限> 個の
    フレームで一致する場合、それらのリークは 1 つの結合されたリークとして報告
    されます。

    <数> のデフォルト値は 8 か <結合の下限> の値のどちらか大きい方です。
    <数> の最大値は 16 です。<結合の下限> のデフォルト値は C++ では 3、
    それ以外は 2 です。

check -memuse [-frames <数>] [-match <結合の下限>]

    メモリー使用状況 (memuse) 検査を有効にする。check -memuse は
    check -leaks も自動的に有効にします。プログラム終了時のリーク報告に加えて、
    使用ブロック数 (biu) も報告されます。デフォルトでは、 非詳細レポートが生成
    されます (dbxenv「rtc_mel_at_exit」によって設定)。
    プログラムが実行中であればいつでも、プログラムのすべてのメモリー割り当てを
    調べることができます (「help showmemuse」を参照)。 

    -frames <数> を指定すると、リーク報告時に最大 <数> 個の異なるスタック
    フレームが表示されます。-match <結合の下限> はこれらのレポートまとめる目的で
    使われます。複数のブロックの割り当て時の呼び出しスタックが、<結合の下限> 個
    のフレームで一致した場合、それらはひとつにまとめて報告されます。  

    <数> のデフォルト値は 8 か <結合の下限> の値のどちらか大きい方です。
    <数> の最大値は 16 です。<結合の下限> のデフォルト値は C++ では 3、
    それ以外は 2 です。

    「check -leaks」も参照してください。

check -all [-frames <数>] [-match <結合の下限>]

    check -access; check -memuse [-frames <数>] [-match <結合の下限>] と同じ。
    dbxenv の変数 rtc_biu_at_exit の値は check -all では変更されません。
    したがって、デフォルトでは終了時にメモリー使用状況が作成されません。
    rtc_biu_at_exit 変数については「help dbxenv」を参照。

check [<関数>] [<ファイル>] [<ロードオブジェクト>]

    check -all; suppress all;
    unsuppress all in <関数> <ファイル> <ロードオブジェクト>; と同じ。
    これを使用して、特定の場所でのみ RTC を実行することができます。

デフォルトで抑制されるエラーに注意してください。

  RTC では、すべてのエラーを検出するためにプログラムのコンパイル時に -g を指定
  する必要はありません。ただし、一部のエラー (多くは未初期化メモリーからの
  読み取り) の正確さを保証するために -g によって付加されるシンボル情報が必要な
  ケースもあります。
  そうした理由から、シンボル情報がない場合は一部のエラー (a.out では rui、
  共有ライブラリでは rui と aib と air) が抑制されます。
  この動作を変更したいときは、suppress と unsuppress を使います 

検査を無効にする方法については「help uncheck」を参照してください。
エラーの抑制については「help suppress」を参照してください。
RTC の概要については「help rtc」を参照してください。

「help showleaks」と「help showmemuse」も参照してください。
#
:uncheck (rtc コマンド)
%uncheck - メモリーのアクセス、リーク、使用状況の検査 (RTC) を無効にする
uncheck                # 現在の検査の状態を表示します。
uncheck -access        # アクセス検査を無効にします。
uncheck -leaks         # リーク検査を無効にします。
uncheck -memuse        # メモリー使用状況検査を無効にします。
uncheck -all           # uncheck -access; uncheck -memuse と同じ。
uncheck [<関数>] [<ファイル>] [<ロードオブジェクト>]
                       # suppress all in <関数> <ファイル>
                       # <ロードオブジェクト> と同じです。
検査をオンにする方法については「help check」を参照してください。
エラーを抑制する方法については「help suppress」を参照してください。
RTC の概要については「help rtc」を参照してください。
#
:suppress (rtc コマンド)
%suppress - メモリーエラーの報告を抑止する (RTC)
suppress                    # suppress と unsuppress のコマンド履歴
                            # (-d と -reset コマンドは含みません)。
suppress -d                 # デバッグ用にコンパイルされていない関数内で抑止
                            # されているエラーの一覧をロードオブジェクトごと
                            # に表示します。(デフォルトの抑止)
                            # これらのエラーは、unsuppress -d コマンドでのみ
                            # 抑制を解除できます。
suppress -d <エラー>        # 全ロードオブジェクトに対するデフォルトのエラー
                            # 抑制を変更します。指定の <エラー> (複数指定可)
                            # が追加して抑制されます。
suppress -d <エラー> in <ロードオブジェクト>
                            # 指定の <ロードオブジェクト> に対するデフォルトの
                            # のエラー抑制を変更します。指定の <エラー>
                            # (複数指定可) が追加して抑制されます。
suppress -last              # 現在エラーの起きて停止している場所で、
                            # 現エラーを抑制します。
suppress -reset             # デフォルトの抑制マスクを元の (実行開始時の) 値
                            # に設定します。
suppress -r <ID> ...        # ID で指定される抑止イベントを削除します。
                            # (すべての ID を表示には (un)suppress を使用する)
suppress -r 0 | all | -all  # すべての抑制イベントを削除する。
suppress <エラー>           # <エラー> (0 個以上) を抑制します。
suppress <エラー>  in [<関数>] [<ファイル>] [<ロードオブジェクト>]
                            # <関数> のリストと <ロードオブジェクト> のリスト
                            # の中の <エラー> を抑制します。
suppress <エラー> at <行>   # <行> で <エラー> を抑制します。
suppress <エラー> at "<ファイル>":<行> 
                            # <ファイル> の <行> で <エラー> を抑制します。
suppress <エラー> addr <アドレス> 
                            # <アドレス> で <エラー> を抑制します。

<エラー> には、次のエラーを複数個指定できます。その場合は各エラーを空白で
区切って指定します。
all     # すべてのエラー
aib     # メモリーリークの可能性 - ブロック内アドレス
air     # メモリーリークの可能性 - レジスタ内アドレス
baf     # 不正な領域解放
duf     # 重複領域解放
mel     # メモリーリーク
maf     # 境界整列を誤った領域解放
mar     # 境界整列を誤った読み取り
maw     # 境界整列を誤った書き込み
oom     # メモリー不足
rua     # 非割り当て領域からの読み取り
rui     # 非初期化領域からの読み取り
wro     # 読み取り専用領域への書き込み
wua     # 非割り当て領域への書き込み
biu     # ブロック使用中 (メモリー割り当て済みの)。これはエラーでは
          ありませんが suppress コマンドでは biu をエラーとして扱えます。

rtc_auto_suppress 変数にも注意してください:

dbxenv rtc_auto_suppress <on | off>
         # on の場合、ある場所における RTC エラーを 1 回しか報告しません。

エラー抑止を解除する方法については「help unsuppress」を参照してください。
RTC の概要については「help rtc」を参照してください。
#
:unsuppress (rtc コマンド)
%unsuppress - suppress コマンドを取り消す (RTC)
unsuppress                  # suppress と unsuppress のコマンド履歴
                            # (-d と -reset コマンドは含みません)。
unsuppress -d               # デバッグ用にコンパイルされていない関数内で抑制
                            # されていないエラーの一覧をロードオブジェクトごとに
                            # 表示します。これら以外のエラーは、suppress -d 
                            # コマンドでのみ抑制することができます。
unsuppress -d <エラー>      # 全ロードオブジェクトに対するデフォルトのエラー
                            # 抑制を変更します。指定の <エラー> (複数指定可) の
                            # 抑制が解除されます。
unsuppress -d <エラー> in <ロードオブジェクトの並び>
                            # 指定の <ロードオブジェクト> に対するデフォルトの
                            # エラー抑制を変更します。指定の <エラー> 
                            # (複数指定可) の抑制が解除されます。
unsuppress -last            # エラーの起きた場所で、現エラーの抑制を解除します。
unsuppress -reset           # デフォルトの抑制マスクをもとの (実行開始時の) 値に
                            # 設定します。
unsuppress <エラー>         # <エラー> (0 個以上) の抑制を解除します。
unsuppress <エラー> in [<関数>] [<ファイル>] [<ロードオブジェクト>] 
                            # <関数> のリストと <ロードオブジェクト> のリストの
                            # 中の <エラー> の抑制を解除します。
unsuppress <エラー> at <行> # <行> で <エラー> の抑制を解除します。
unsuppress <エラー> at "<ファイル>":<行> 
                            # <ファイル> の <行> で <エラー> の抑制を解除します。
unsuppress <エラー> addr <アドレス> 
                            # <アドレス> で <エラー> の抑制を解除します。

<エラー> には、次のエラーを複数個指定できます。その場合は各エラーを空白で
区切って指定します。

all     # すべてのエラー
aib     # メモリーリークの可能性 - ブロック内アドレス
air     # メモリーリークの可能性 - レジスタ内アドレス
baf     # 不正な領域解放
duf     # 重複領域解放
mel     # メモリーリーク
maf     # 境界整列を誤った領域解放
mar     # 境界整列を誤った読み取り
maw     # 境界整列を誤った書き込み
oom     # メモリー不足
rua     # 非割り当て領域からの読み取り
rui     # 非初期化領域からの読み取り
wro     # 読み取り専用領域への書き込み
wua     # 非割り当て領域への書き込み
biu     # ブロック使用中(メモリー割り当て済みの) これはエラーではありませんが
          suppress コマンドでは biu をエラーとして扱えます。

エラーを抑制する方法については「help suppress」を参照してください。
RTC の概要については「help rtc」を参照してください。
#
:showleaks (rtc コマンド)
%showleaks - 最後の showleaks コマンド以降のメモリーリークを報告する (RTC)
showleaks [-a] [-m <m>][-n<個数>][-v]

    最後に実行した showleaks コマンド以降の新しいメモリーリークを報告します。
    デフォルトの非冗長の場合、「リーク」レコードごとに 1 行のレポートが
    出力されます。「実際のリーク」に続いて、「可能性のあるリーク」が報告
    されます。レポートは、リークの結合サイズに従ってソートされます。

    -a         これまでに発生したリースのすべてを報告する。
               (前回の showleaks コマンド以降とは限らず、すべてのリークを報告)

    -m <m>     リークをまとめる目的で使用します。複数のリークを割り当てる
               際の呼び出しスタックが <m> 個のフレームと一致する場合、リークは 
               1 つにまとめて報告されます。
               -m オプションを指定すると、<m> の大域値 (check コマンドで指定)
               は無効になります。
    -n <個数>  レポートに <個数> 個のレコードを表示します。デフォルトでは
               べてのレコードが示されます。

    -v         冗長出力を生成します。デフォルトでは、非冗長出力が示されます。

   「help check」を参照してください。
:showmemuse (rtc コマンド)
%showmemuse - 最後の showmemuse コマンド以降のメモリー使用状況を表示する (RTC)
showmemuse [-a] [-m <m>] [-n <個数>] [-v]

    showmemuse は、最後の showmemuse コマンド以降の使用中のメモリーブロック
    数を表示します。「使用ブロック」レコードごとに 1 行のレポートがプリント
    されます。これらのレポートは、ブロックの結合されたサイズにもとづいてソー
    トされます。最後の showleaks コマンド以降のリークのブロック数も報告され
    ます。

    -a       使用中のすべてのブロックを表示する (最後の showmemuse コマンド
             以降のブロックに限らない)。

    -m <m>   これは使用ブロックのレポートをまとめる目的で使われます。複
             数のブロックを割り当てる際の呼び出しスタックが <m> 個のフレー
             ムと一致する場合、それらのブロックは 1 つの結合されたレポート
             で報告されます。-m オプションは <m> の大域値を無効にします。

    -n <個数> レポートで最大 <個数> 個のレコードを表示する。デフォルトは 20。

    -v       冗長出力を生成する。デフォルトでは非冗長出力が表示されます。

    <m> のデフォルト値は 2 か、または check コマンドで最後に指定した
    大域値です。<個数> オプションのデフォルト値は 20 です。

   「help check」を参照。
:showblock (rtc コマンド)
%showblock - 特定のヒープブロックがどこから割り当てられたかを表示する (RTC)
showblock -a <アドレス>

    メモリー使用状況検査、またはメモリーリーク検査がオンの場合、showblock は
    <アドレス> のアドレスにあるヒープブロックに関する詳細を表示します。この詳細
    には、ブロックの割り当て位置とそのサイズが示されます (「help check」を
    参照)。
#
#
#
# Collector data is here
#
:collector (コマンド)
%collector - パフォーマンスデータを収集する

collector <コマンド列>      # コレクタコマンドを指定します。
   enable                   # コレクタを有効にして、新規の実験を
                            # 開きます。
   disable                  # パフォーマンスデータの収集を停止し、
                            # 実験を閉じます。
   pause                    # パフォーマンスデータの収集を停止しますが、
                            # 実験は開いたままにします。
   resume                   # 一時停止状態のパフォーマンスデータの収集を
                            # 再開します。
   profile <オプション>     # プロファイル設定を指定します。
   synctrace <オプション>   # 同期トレース設定を指定します。
   hwprofile <オプション>   # ハードウェアカウンタのプロファイル設定を指定します。
   heaptrace <オプション>   # ヒープトレース設定を指定します。
   mpitrace <オプション>    # MPI トレース設定を指定します。
   sample <オプション>      # 標本収集設定を指定します。
   dbxsample <オプション>   # dbx が処理を停止しているときの標本処理を指定します。
   store <オプション>       # 実験のファイル制御と設定を行います。
   limit <オプション>       # 実験ファイルのサイズを制限します。
   show <オプション>        # 現在のコレクタ設定を表示します。
   archive <オプション>     # 実験が終了したときに保管モードを指定します。
   status                   # 現在の実験の状態に関して問い合わせます。


データ収集を開始するには、"collector enable" と入力します。
データ収集を終了するには、"collector disable" と入力します。

"collector show" と入力すると、いつでもコレクタの設定をすべて表示できます。
「help collector mt」も参照してください。


#
:collector$$profile (コマンド)
collector profile <オプション>   # プロファイルオプションを指定します。 
    <on|off>                     # プロファイルデータ収集モードを指定します。
    timer <間隔>                 # プロファイルタイマー周期を指定します。
                                 # 浮動小数点に固定されます。
                                 # 指定された末尾の m はミリ秒、また u は
                                 # マイクロ秒を表します。
#
:collector$$synctrace (コマンド)
collector synctrace <オプション> # 同期トレースオプションを指定します。
    <on|off>                     # 同期トレースデータ収集モードを指定します。
    threshold <マイクロ秒>       # マイクロ秒単位でしきい値を指定します。
    threshold calibrate          # しきい値が自動計算されます。
#
:collector$$hwprofile (コマンド)
collector hwprofile <オプション> # ハードウェアカウンタオプションを指定します。
    <on|off>                     # プロファイルデータ収集モードを指定します。
    list                         # 使用可能なカウンタのリストを表示します。
    counter <カウンタ名> <間隔> [<カウンタ名 2> <間隔 2>]
                                 # ハードウェアカウンタ名と間隔を指定します。
#

:collector$$dbxsample (コマンド)
collector dbxsample <オプション> # 処理を停止しているときの dbx の標本収集の
                                 # 動作を指定します。
    <on|off>                     # 標本を記録するかどうかを指定します。
#
:collector$$heaptrace (コマンド)
collector heaptrace <オプション> # ヒープトレースオプションを指定します。
    <on|off>                     # ヒープトレースデータ収集モードを指定します。
#
:collector$$mpitrace (コマンド)
collector mpitrace <オプション>  # MPI トレースオプションを指定します。
    <on|off>                     # MPI トレースデータ収集モードを指定します。
#

:collector$$sample (コマンド)
collector sample <オプション>    # 標本オプションを指定します。
    <periodic|manual>            # 標本モードを指定します。
    period <秒>                  # 秒単位で標本期間を指定します。
    record <名前>                # 指定された名前を付けて標本を記録します。

#
:collector$$show (コマンド)
collector show <オプション>      # 1 つまたは複数のカテゴリ設定を表示します。
    <オプション> の省略時        # すべての設定を表示します
    all                          # すべての設定を表示します。
    profile                      # プロファイル設定を表示します。
    synctrace                    # 同期トレース設定を表示します。
    hwprofile                    # ハードウェアカウンタのプロファイル設定を
                                 # 表示します。
    heaptrace                    # ヒープトレース設定を表示します。
    limit                        # 実験サイズの制限値を表示します。
    mpitrace                     # MPI トレース設定を表示します。
    sample                       # 標本収集設定を表示します。
    store                        # 格納設定を表示します。
    archive                      # 保管設定を表示します。
#
:collector$$store (コマンド)
collector store <オプション>     # 格納オプションを指定します。
    directory <文字列>           # 実験を格納するディレクトリを指定します。
    experiment <文字列>          # 実験ファイル名を指定します。
    group <文字列>               # 実験グループ名を指定します。
#
:collector$$status (コマンド)
collector status                 # 現在の実験の状態を問い合わせます。
#
:collector$$archive (コマンド)
collector archive <オプション>   # 保管モードを設定します。
    on                           # (デフォルト) 通常の保管です。
    off                          # 保管しません。
    copy                         # 互換性のために、ロードオブジェクトを実験に
                                 # コピーします。

:collector$$mt (トピック)
MT アプリケーションのデータ収集はサポートされています。
MT収集に関しては以下のような若干の制限があります。

o 共用ライブラリの init セクション内で稼動するコードの情報収集は
  できません (a.out は可)。

o マルチスレッドアプリケーションの場合、プロセスに接続し、プロ
  ファイリングのためのコレクタを開始することができます。
  それには collector.1 のマニュアルページの指示に従ってください。 
        
o 同期トレースデータを収集する場合は、プログラムの実行前に、
  libcollector.so を LD_PRELOAD しておく必要があります。

########################################################################
#################### Language Specific Information #####################
########################################################################
#
# C++ specific help is here
#
:c++ (トピック)
コマンド「 help c++ <副題>」を入力して、以下の <副題> について詳しい情報を
得ることができます。

    whatis      # クラス定義に関しての情報の検索。
    printing    # 継承されれたデータメンバーの印刷または表示。
    dynamic     # オブジェクトポインタの動的情報の検索。
    vfuncs      # 仮想関数のデバッグに関する情報。
    rtti        # 実行時型情報を使用。
    inclass     # クラスのすべてのメンバー関数へのブレークポイントの設定。
    inmember    # 多重定義されたメンバー関数すべてへのブレークポイントの設定。
    inobject    # クラスのメンバー関数すべてへのブレークポイントの設定。
    infunction  # 多重定義された非メンバー関数すべてへのブレークポイントの設定。
    overloaded  # 多重定義された関数/データメンバーの扱い。

または 'help -k <キーワード>' で <キーワード> を扱うヘルプの表題を検索して
ください。
#
:c++$$whatis (サブトピック)
whatis コマンドが、C++ クラスまたは構造体に対して使用された場合、このコマンドは、
定義されているメンバー関数 (定義を取り消されたメンバー関数は除く)、すべての
リスト、静的データメンバー、クラスフレンド、そのクラス内で明示的に定義されている
データメンバーの一覧を表示します。-r (recursive = 再帰) オプションを指定すると、
継承したクラスからの情報を追加します。

-d フラグが -e フラグと共に使用された場合、式の動的な型が使われます。
「help c++ dynamic」を参照してください。

C++ テンプレートに関連する識別子は、以下の方法で表示することができます。
すべてのテンプレート定義をリストするには「whatis -t」を入力します。
関数テンプレートのインスタンス化情報をリストするには「whatis」を入力します。
クラステンプレートのインスタンス化情報をリストするには「whatis -t」を入力します。
#
:c++$$printing (サブトピック)
print や display に -r (recursive = 再帰) オプションを
付けると、GUI は、クラスで直接定義したすべてのデータメンバーとともに、
基底クラスから継承したデータメンバーも表示します。

この 3 つのコマンドは、dbxenv のひとつである output_dynamic_type の
デフォルトの値を切り替える -d と +d オプションも取ることができます。
「help c++ dynamic」も参照してください。
#
:c++$$dynamic (サブトピック)
C++ のオブジェクトポインタには 2 種類の型があります。1 つは静的な型、
つまりソースコード中で定義された型で、もうひとつは、動的な型、つまり
キャストを行う前の型です。print、display、whatis コマンドを -d オプション
と共に使うか、dbxenv の output_dynamic_type を on に設定することにより、
dbx は、動的な型情報を表示できることがあります 

一般に、オブジェクトが vtable として知られる仮想関数テーブルを内蔵して
いる場合、dbx はその情報を利用して、オブジェクトの型を正確に推定できます。

プロセスの存在しない時に -d フラグを使うと、(または output_dynamic_type
を on にすると) プログラムが実行中でない旨のメッセージが表示されます。
これは、プロセスがない場合、動的情報にアクセスすることは不可能だからです。
また、仮想継承を通じての動的な型を調べようとした場合、クラスポインタに
対する不正なキャストが行われたというエラーになります。
これは、C++ では、仮想基底クラスからその継承クラスへのキャストが許されて
いないためです。
#
:c++$$vfuncs (サブトピック)
print または call コマンドを使用すると、仮想関数も他の関数と全く同様に
呼び出すことができます。

注: このサポートは、Sun C++ コンパイラ 3.0 以上でしか利用できません。
#
:c++$$rtti (サブトピック)
dbx は、C++ の dynamic_cast および typeid 演算子をサポートします。
これらの 2 つの演算子によって式を評価する場合、dbx は、コンパイラによって
利用可能になった特定の rtti 関数に対して呼び出しを行います。ソース中で
これらの演算子が明示的に使用されていない場合、これらの関数はコンパイラに
よって生成されていないことがあるため、dbx は式を評価することができません。
#
:c++$$inclass (サブトピック)
イベント指定子 inclass は、指定のクラスで定義された全メンバー関数に
ブレークポイントを設定するために使用できます。
これは、stop、when、および trace コマンドで使用可能です。
「help event specification」を参照してください。
#
:c++$$inmember (サブトピック)
イベント指定子 inmember は、クラスにかかわらず指定の名前のメンバー関数
全部にブレークポイントを設定するために使用できます。
これは、stop、when、および trace コマンドで使用可能です。
「help event specification」を参照してください。 
#
:c++$$inobject (サブトピック)
inobject イベント指定子を使用すると、指定の C++ オブジェクト (C++ クラス/
構造/共用体へのポインタ) に定義された非静的メンバー関数すべてのブレーク
ポイントを設定して、そのオブジェクトから呼び出された場合にのみ停止する
ことができます。これは、stop、trace、および when の各コマンドに使用できます。
dbxenv 変数の output_dynamic_type がオンの場合、dbx はオブジェクトの動的
型を使用します。「help c++ dynamic」と「help event specification」を参照
してください。
#
:c++$$infunction (サブトピック)
イベント指定子 infunction は、指定の名前の非メンバー関数全部にブレークポイント
を設定するために使用できます。これは、stop と when コマンドで使用可能です。
詳細は「help event specification」を参照してください。
#
:c++$$overloaded (サブトピック)
イベント指定子 infunction は、指定の名前の非メンバー関数全部にブレークポイント
を設定するために使用できます。これは、stop と when コマンドで使用可能です。
詳細は「help event specification」を参照してください。

* 名前のみで多重定義関数を参照する場合
* `` で始まる関数または変数を参照する場合

以下の例を考えてみましょう。

        int foo(double);
        int foo(int);
        int bar();
        class x {
                int bar();
        };

非メンバー関数のいずれかで停止した場合、

        stop in foo(int)

と入力することで、大域関数 foo(int) にブレークポイントを設定できます。
メンバー関数にブレークポイントを設定するには、次のコマンドを用います。

        stop in x::bar()

仮に単に、

        stop in foo

とだけ言った場合、dbx は、foo(int) のことなのか foo(double) のことなのか
決定できず、利用者に多重定義メニューを出して選択を促します。
また、

        stop in ``bar

と言った場合、dbx は、大域関数 bar() のことなのかメンバー関数 bar() の
ことなのか決定できず、多重定義メニューを表示します。
#
:fortran90
「help fortran」を参照。
#
:fortran77
「help fortran」を参照。
#
:f90
「help fortran」を参照。
#
:f77
「help fortran」を参照。
#
:fortran (トピック)

ブレークポイント
----------------
Fortran 77 ではメインプログラムの名前は MAIN であって main ではありません。
メインプログラムを停止させるには stop in MAIN としなければなりません。

式
--
Fortran スタイルの式の構文解析、複素数の演算、Fortran のほとんどの組み
込み関数の呼び出しが新しくサポートされました。dbx のトークン走査 (スキ
ャナ) は、Fortran 向きにできていないため、「 print 1.eq.1」のような表現
はうまく解釈されず、代わりに「 print 1 .eq. 1」のように言い換える必要が
ある場合があります。
#
########################################################################
########################### KSH-specific help topics ###################
########################################################################
# I18N - translate this topicname to match same word in `Other Topics' message
:editing (ksh トピック)
「help editing emacs」または「help editing vi」を使用してください。
#
# I18N - translate this topicname (only before $$) to match previous topic
:editing$$emacs (ksh サブトピック)
emacs スタイルのエディタを使用可能にするには set -o emacs を使用します。 
bind コマンドは現在のキーバインドをリストしたり、バインドを変更したりします。

次に重要なデフォルトバインドの一部を示します。

        ^A = beginning-of-line          ^B = backward-char
        ^D = eot-or-delete              ^E = end-of-line
        ^F = forward-char               ^G = abort
        ^K = kill-to-eol                ^L = redraw
        ^N = down-history               ^P = up-history
        ^R = search-history             ^^ = quote
        ^? = delete-char-backward       ^H = delete-char-backward
        ^[b = backward-word             ^[d = delete-word-forward
        ^[f = forward-word              ^[^H = delete-word-backward
        ^[^[ = complete                 ^[? = list-command

「help bind」と「help editing vi」を参照してください。

#
# I18N - translate this topicname (only before $$) to match previous topic
:editing$$vi (ksh サブトピック)
vi スタイルのエディタを使用可能にするには set -o vi を使用します。
bind コマンドは現在のキーバインドをリストしたり、バインドを変更したりします。
コマンド (コマンドモード単位) は次のとおりです。

   a = 追加                A = 行末追加
   c = 変更                d = 削除
   G = 行に進む            h = 後方文字
   i = 挿入                I = 行頭に挿入
   j = 次行                k = 前行
   l = 前方文字            n = 次の一致
   N = 前の一致            p = 後に入れる
   P = 前に入れる          r = 繰り返し
   R = 交換                s = 置換
   u = 取り消し            x = 文字の削除
   X = 前文字を削除        y = ヤンク
   ~ = 大小文字入れ替え    _ = 最後の引数
   * = 展開                = = リスト展開
   - = 前行                + = 次行
   sp = 前方文字           # = コマンドをコメントで無効にする
   ? = 先頭からの履歴検索
   / = 現在からの履歴検索
   
挿入モードでは、以下の特殊なキー入力があります。
   ^? = 文字の削除、      ^H = 文字の削除
    ^U = 行の削除、       ^W = ワードの削除

「help editing emacs」と「help bind」を参照してください。


#
:path (ksh トピック)
デフォルトでは、dbx はコマンド検索に $PATH を利用します。
$PATH 検索を使用不可能にするには、set +o path と入力します。
「help ksh options」と「help ksh PATH」を参照してください。
#
:PATH (ksh トピック)
デフォルトでは、dbx はコマンド検索に $PATH を利用します。
$PATH 検索を使用不可能にするには、set +o path と入力します。
「help ksh options」と「help ksh PATH」を参照してください。
#
:ksh (トピック)
dbx のコマンド構文は Korn シェルの構文です。分岐処理と繰り返し処理、
環境変数、履歴、コマンド行編集はすべてサポートされます。
以下の <副題> を「help ksh <副題>」と入力すると詳細な解説が得られます。

 aliases       # 組み込み別名のリスト
 backslash     # kprint が認識するバックスラッシュエスケープのリスト
 builtins      # 組み込みコマンドのリスト
 differences   # dbx インタプリタと ksh の間の既知の相違点
 environment   # 定義済み変数のリスト
 expressions   # ksh 式、$[] 言語などの使用法
 options       # set -o オプション
 syntax        # 単純化された ksh 文法
 variables     # ksh 変数の設定、試験、変更
 <変数名>      # 特定の定義済み変数の使用法

あるいは 'help -k <キーワード>' で 、<キーワード> の言葉を扱うヘルプの
表題を検索してください。

#
:ksh$$aliases (サブトピック)
以下の別名は定義済みです。

        [='\['
        alias='kalias'
        echo='kprint'
        exception='print *$exception'
        functions='typeset -f'
        integer='typeset -i'
        nohup='nohup '
        pwd='kprint -r "$PWD"'
        r='fc -e -'
        suspend='kill -STOP $$'
        type='whence -v'
        x='examine'
#
:ksh$$backslash (サブトピック)
kprint コマンドは、-r オプションを付けない限り、以下の文字シーケンスを
特別に扱います。

        \a       警鐘 (ベル , ASCII 007)
        \b       バックスペース
        \c       -n オプションのように、newline の終了を抑制します。
        \f       紙送り
        \n       改行 (newline)
        \r       復帰 (carriage return)
        \t       タブ
        \v       垂直タブ
        \\       バックスラッシュ
        \nnn     (8 進 1 〜 3 桁) ASCII コードが 
                 nnn の 8 ビット文字

バックスラッシュも引用文字です。紙送りをエコーするには、以下のどれかを使用
できます。

        (dbx) kprint -n \\f
        (dbx) kprint -n '\f'
        (dbx) kprint -n "\f"
#
:ksh$$builtins (サブトピック)
以下の ksh コマンドが dbx に組み込まれています。

    :           .               [               bg              bind
    break       builtin         cd              continue        dalias
    eval        exec            exit            export          false
    fc          fg              getopts         hash            jobs
    kalias      kill            kprint          let             read
    readonly    return          set             sh              shift
    test        times           trap            true            typeset
    ulimit      umask           unalias         unset           wait
    whence

詳細については、「help <コマンド名>」を参照してください。
#
:ksh$$differences (サブトピック)
dbx コマンドインタプリタ (pdksh) と ksh88 との間には以下のような違いがあることが
知られています。

(1) アレイ (配列) をサポートしません。
(2) 以下の set -o オプションが実装されていません。
    allexport bgnice gmacs markdirs
    noclobber nolog privileged protected viraw
(3) 以下の新しい set -o オプションが実装されています。
    : hashall ignoresuspend path
(4) 以下の typeset オプションが実装されていません。
    : -l、-u、-L、-R、-H、-Z
(5) 新しい typeset オプション -q が実装されています。
(6) dbx コマンドが組み込まれています。
(7) bind コマンドにより編集関数を再バインドできます。
(8) 言語式。例: $[p->x]
(9) 16 進と 8 進の C 構文
(10) csh に似た履歴アクセス
(11) csh に似た別名引数
(12) print は kprint と命名されています。
(13) 新しい kprint および read オプション、-e
(14) 逆引用符は dbx スコープ解決演算子です。代わりに $() を使用します。
(15) [[ expr ]] が実装されていません。
(16) 新しいパターン演算子 (@(...) など) が実装されていません。
(17) コプロセスは実装されていません。
(18) 引数のない kill はデバッグ対象プロセスを停止させます。
#
:ksh$$environment (サブトピック)
以下の標準 ksh 環境変数は事前に定義されています。
  CDPATH 
  COLUMNS 
  EXECSHELL 
  FCEDIT 
  HISTSIZE 
  HOME
  IFS 
  MAIL 
  MAILCHECK
  MAILPATH 
  OLDPWD 
  OPTARG 
  OPTIND 
  PATH 
  PPID 
  PS1 
  PS2 
  PS3 
  PS4 
  PS5 
  PWD 
  RANDOM 
  REPLY
  SECONDS 
  _ # - ? $ ! * @

名前が英数字ではない環境変数については、「help ksh specialvars」 を
参照してください。その他については、「help ksh <変数>」 を参照して
ください。

名前が DBX_ で始まる変数があります。これらは dbxenv 環境変数に対応します。
一覧については「help dbxenv」を参照してください。

読み出し専用の状態変数は、dbxdir、havegui、mtfeatures、および version です。
詳細については、「help dbxdir」、「help havegui」、「help mtfeatures」、
および「help version」を参照してください。

変数 last_choice は多重定義の解決で自動的に設定されます。詳細は、
「help last_choice」を参照してください。

以下は読み出し専用 dbx 状態変数です。

  ins lineno vlineno line
  func vfunc class vclass file vfile loadobj vloadobj scope vscope
  funcaddr caller
  newhandlerid handlerid firedhandlers
  proc prog
  lwp thread
  dllist dlobj
  exception
  sig sigstr sigcode sigcodestr
  exitcode
  falsehits
  syscode sysname

それぞれの意味については、「help event variables」を参照してください。

また、以下のレジスタの名前が予約されています。「help resisters」を
参照してください。
#
:ksh$$expressions (サブトピック)
dbx には、ksh 式 と言語式の 2 種類の式があります。前者は、
32 ビット整数値と以下の演算子しかサポートしません (C と同様) 。

        || && | & ^ == != > < >= <= >> << + - * / % ! ~ ()
        = += -= *= /= %= &= |= ^= <<= >>=

ksh 式を評価するには、単に (()) で囲むだけです。
'$' は可能ですが、ksh 変数の参照には必要ありません。
代入の左辺に使用してはなりません。

後者は、ターゲット言語のすべてのデータ型とその演算子の大半 
(代入演算子を除く) をサポートします。言語式を評価するには、$[] で
囲みます。$[] が (()) の中にあってもかまいませんが、その逆は許され
ません。$[] の中の式は現在の言語で評価されます。(「help language」
を参照してください) print のフラグも識別できます。「help print」を
参照してください。

例:

(dbx) typeset -i x    # x は整数として内部に格納されます。
(dbx) z=3 x=5         # z は (デフォルトでは) 文字列です。 (()) は単純な
(dbx)                 # 整数の代入には必要ありません。
(dbx) ((ww = z << x)) # この場合 (()) が必要です。空白があってもかまいません。
(dbx) echo $ww
 96
(dbx) z=$[p->x[3]]    # z には (文字列の) 結果を代入します。p はデバッグ
(dbx)                 # 対象プロセスのポインタです。
(dbx) ((s = z/$[sizeof double]))  # $[] は (()) に囲まれています。

dbx は、変数の型 (long、long long、unsinged) を認識すると、各変数の値に
それぞれ L、LL、および U の接尾辞を付加します。以下の例は、この接尾辞を
取り除くことによって、あるプログラム変数を ksh 変数に割り当てる 2 通りの
方法を示しています。

(dbx) whatis i
long long i;
(dbx) print i
i = 8LL
(dbx) z=$[-flld i] 
(dbx) echo $z
8
(dbx) z=$[(int) i]
(dbx) echo $z
8
(dbx) 

#
:ksh$$options (サブトピック)
以下のオプションは set -o で認識するものです。
1 文字だけの省略形がある場合には、それを括弧で囲んで示します。

  emacs           emacs 編集モード
  errexit         (-e) エラーが発生すると終了します。
  hashall         (-h) 実行した UNIX コマンドすべてのフルパスを覚えます。
  ignoreeof       ファイルの終わりになっても終了しません。
  interactive     (-i) stdin は端末です。
  keyword         (-k) 変数 = 値 が引数リストにあっても、代入として扱います。
  monitor         (-m) 別のプロセスグループにおいて、バックグラウンドジョブを
                       実行します。
  noexec          (-n) コマンドの実行を抑制します。
  noglob          (-f) ワイルドカードの展開を抑制します。
  nounset         (-u) 設定されていない変数を参照した場合、エラーを報告します。
  path            コマンドが見つからない場合、$PATH を検索します。
  stdin           (-s) stdin からコマンドを取り出します。
  trackall        (-h) hashall と同じ
  verbose         (-v) 各コマンドの実行前にエコーします。
  vi              vi 編集モード
  xtrace          (-x) コマンドの実行前、評価後にエコーします。
#
:ksh$$specialvars (サブトピック)
以下の特殊変数が定義済みです。

  $_      前の単純コマンドの最後の引数。また、メールを検査する場合、
          mailfile のパス名
  $#      位置パラメータ $1 ... の番号
  $-      呼び出し時に提供されたオプションのセット
  $?      最後に実行されたコマンドの戻り値 (0 〜 255) 。
          127 より大きい場合、コマンドがシグナルによって終了したことを示し
          ます。シグナル番号は $? から 128 を引いた値に等しくなります。
  $$      この dbx プロセスのプロセス ID
  $!      最後のバックグラウンドプロセスのプロセス ID
  $*      位置パラメータ
  $@      位置パラメータ

最後の 2 つは、引用された場合を除いて同じです。"$*" は、空白で区切った
位置パラメータを持つ 1 つの引数を生成します。"$@" は、それぞれを "" で囲んだ 
n 個の引数を生成します。位置パラメータが以下の場合、
        a
        hi there
        foo

(つまり、3 つのパラメータがあって、空白が 1 つある場合) 、"$*" は以下に
等しくなります。

        "a hi there foo"

一方、"$@" は次のようになります。

        "a" "hi there" "foo"
#
:ksh$$CDPATH (変数)
CDPATH 変数には、コロンで区切ったディレクトリのリストが入っていて、
cd コマンドの引数を求めてそのリストが検索されます (引数がスラッ
シュで始まらない場合)。$CDPATH が設定されている場合、現在の作業
ディレクトリはデフォルトでは検索されません。
デフォルトでは NULL です。
#
:ksh$$COLUMNS (変数)
COLUMNS 変数には端末の幅を反映する必要があります。
組み込みコマンド行エディタで使用されます。
#
:ksh$$EXECSHELL (変数)
EXECSHELL 変数には、スクリプトを実行するときに使用するデフォルトの
シェルのフルパス名が入ります。
デフォルトは /bin/sh です。
#
:ksh$$FCEDIT (変数)
FCEDIT 変数には、fc コマンドで起動されるエディタをフルパス名で指定します。
デフォルトのエディタは /bin/ed です。
#
:ksh$$HISTSIZE (変数)
HISTSIZE 変数には、履歴に保存するコマンドの数が入ります。数が大きくなると、
多くのメモリーを使用することになります。デフォルトは 15 です。
#
:ksh$$HOME (変数)
HOME 変数は、cd コマンドのデフォルト引数、dbx が起動ファイル .dbxrc を
探す場所、パス名の '~' を展開した結果です。

#
:ksh$$IFS (変数)
IFS 変数には「内部フィールドのセパレータ」が入ります。
セパレータは、パラメータとコマンドを分離する文字です。
デフォルトは空白、タブ、復帰改行です。
#
:ksh$$MAIL (変数)
MAIL 変数には、受信メールファイルのフルパス名が入ります。
このファイルは、$MAILPATH が設定されていない場合、
受信されたメールがないかどうか定期的に確認されます
(「help ksh MAILPATH」を参照)。
#
:ksh$$MAILCHECK (変数)
MAILCHECK 変数には、dbx が入ってくるメールを確認するまでの
最小経過秒数が入ります。最後の確認から $MAILCHECK 秒が経過した場合、
プロンプトを表示する直前にこの確認が実行されます。$MAILCHECK が NULL 
またはゼロの場合、各プロンプトの前に確認が行われます。$MAILCHECK
が設定されていないか、数値以外の値に設定されている場合、メールの
確認は使用不可能になります。デフォルトは 600 秒 (10 分) です。
#
:ksh$$MAILPATH (変数)
MAILPATH 変数には、受信メールがないかどうか確認するファイルの
リストが、コロンで区切られて入ります。各パス名に、疑問符や表示する
メッセージを続けることができます。デフォルトのメッセージは 
「you have mail in $_」です ($_ 変数はフルパス名に設定されます)。
MAILPATH が設定されていないと、dbx は $MAIL を確認します。
デフォルトでは設定されません。
#
:ksh$$OLDPWD (変数)
OLDPWD 変数には前作業ディレクトリのフルパス名が入ります。
最初は $PWD に等しくなります(「help ksh PWD」参照)。
#
:ksh$$OPTARG (変数)
OPTARG 変数は、getopts が引数を持つオプションを解析するときに、
getopts によって設定されます。引数が入りますが、オプション文字は入りません。
たとえば、以下の位置引数で、

        -a -bfoo +c -de

getopts が次のように呼び出された場合、

        while getopts ab:cdef opt
        do
                case $opt in
                a)      aflag=on ;;
                b)      bflag=$OPTARG ;;
                +c)     cflag=off ;;
                c)      cflag=on ;;
                d)      dflag=on ;;
                e)      eflag=on ;;
                f)      fflag=on ;;
                esac
        done

得られる変数設定は次のようになります。

        aflag   on
        bflag   foo
        cflag   off
        dflag   on
        eflag   on
        fflag   (no change)
#
:ksh$$OPTIND (変数)
OPTIND 変数は、getopts が次に処理するオプションのインデックスに設定します。
関数またはスクリプトの最初には自動的に 1 に設定されます。手動で設定し、
特定の位置パラメータを getopts に処理させることもできます。
#
:ksh$$PATH (変数)
PATH 変数には、コマンド名にスラッシュがなくて、path オプションが設定
されている場合、そのコマンドがないかどうか検索されるディレクトリのリストが、
コロンで区切られて入ります。
「help path」を参照してください。
#
:ksh$$PPID (変数)
PPID 変数には、dbx を発生させたプロセスのプロセス ID が入ります。
#
:ksh$$PS1 (変数)
PS1 変数には一次プロンプト文字列が入ります。
\$PS1 は表示前に展開されるので、        

        PS1='$PWD> '

はプロンプトに現在の作業ディレクトリを入れます。! は現在の履歴番号と
置き代わります。感嘆符をそのまま得るには !! を使用します。$PS1 の
デフォルトは ($0) です (つまり、dbx を呼び出したパス名を括弧で囲みます)
#
:ksh$$PS2 (変数)
PS2 変数には二次プロンプト文字列が入ります。 このプロンプトは、
Return キーを押しても、コマンドが完了しなかった場合に表示されます。
デフォルトは > です。
#
:ksh$$PS3 (変数)
PS3 変数には select コマンドのプロンプト文字列が入ります。
デフォルトは #? です。
#
:ksh$$PS4 (変数)
PS4 変数は、現在のところ dbx によって設定されません。
#
:ksh$$PS5 (変数)
PS5 変数は、adb モードのプロンプト文字列です。デフォルトは ADB> です。
#
:ksh$$PWD (変数)
PWD 変数には現在の作業ディレクトリのフルパス名が入ります。
pwd コマンドは単に $PWD の値をエコーするだけです。
#
:ksh$$RANDOM (変数)
RANDOM 変数は乱数を生成します。 $RANDOM にアクセスするごとに、
0 から 32767 までの乱数が自動的に代入されます。 RANDOM にある数を割り当てて、
乱数ジェネレータの因子とすることができます。
#
:ksh$$REPLY (変数)
REPLY 変数には select コマンドへの応答が代入されます。
#
:ksh$$SECONDS (変数)
SECONDS 変数には、dbx を呼び出してからの秒数が入ります。
SECONDS に任意の値を割り当てて、タイマーを 0 にリセットすることができます。
#
:ksh$$syntax (サブトピック)
以下の記述は正式な文法の記述ではありません。単に、よく使われる構文を
簡略に記載したものです。

パイプライン::=  コマンドリスト [ | コマンドリスト]...

コマンドリスト::=  コマンド
             |    コマンドリスト [ && パイプライン]...
             |    コマンドリスト [ || パイプライン]...
             |    コマンドリスト [ ; パイプライン]...
             |    コマンドリスト & [パイプライン & ]...
             |    (コマンドリスト)
             |    { コマンドリスト; }
             |    関数定義

関数定義     ::=  function 識別子 { コマンドリスト; }
             |    識別子 () { コマンドリスト; }

コマンド     ::=  if コマンドリスト; then コマンドリスト;
                  [ elif コマンドリスト; then コマンドリスト; ]...
                  [ else コマンドリスト; ] fi
             |    case ワード in [ パターン ) コマンドリスト;; ]... esac
             |    for 識別子 [ in ワード ... ] ; do コマンドリスト; done
             |    select 識別子 [ in ワード ... ] ; do コマンドリスト; done
             |    while コマンドリスト; do コマンドリスト; done
             |    until コマンドリスト; do コマンドリスト; done
             |    when WHEN の引数 { コマンドリスト; }
             |    ((式))
             |    time パイプライン
             |    識別子 = 値 ... コマンド
             |    関数呼び出し
             |    組み込み
             |    UNIX のコマンド
#
:ksh$$variables (サブトピック)
ksh 変数には文字列か整数が入ります。デフォルトのタイプは 
文字列です。整数変数 x を宣言するには、typeset -i x を
使用します。変数を参照するには、通常の ksh 構文を使用します。

  $x              単純参照。
  ${x}            単純参照。名前の明示的な境界。
  ${x- 値 }       x が設定されていない場合 '値 ' を代用します。
  ${x:- 値 }      x が設定されていないか、NULL の場合 '値 'を代用します。
  ${x= 値 }       x が設定されていない場合、x に '値 'を代入します。
  ${x:= 値 }      x が設定されていないか、NULL の場合、x に '値 'を代入します。
  ${x+ 値 }       x が設定されている場合 '値 ' を代用します。
  ${x:+ 値 }      x が設定されていて、NULL ではない場合 '値 ' を代用します。
  ${x? 値 }       x が設定されていない場合、エラーメッセージ '値 'を生成します。
  ${x:? 値 }      x が設定されていないか、NULL の場合、エラーメッセージ 
                  '値 ' を生成します。
  ${x#pat}        x から、パターン pat と左端から最短一致するものを除いた文字列。
  ${x##pat}       x から、パターン pat と左端から最長一致するものを除いた文字列。
  ${x%pat}        x から、パターン pat と右端から最短一致するものを除いた文字列。
  ${x%%pat}       x から、パターン pat と右端から最長一致するものを除いた文字列。
  ${#x}           x の (文字列としての) 値の長さ。

出力基底 <基底> (2 〜 36) を持つ整数変数 x を宣言するには、
typeset -i<基底> x を使用します。他の基底の数値は 
<基底>#<数字列> のように入力できます。
たとえば、数値 42 (10 進) は以下のどれでも入力できます。

        2#101010        3#1120          4#222           5#132
        6#110           7#60            8#52            9#46
        10#42           11#39           12#36           13#33
        14#30           15#2C           16#2A           17#28
        18#26           19#24           20#22           21#20
        22#1K           23#1J           24#1I           25#1H
        26#1G           27#1F           28#1E           29#1D
        30#1C           31#1B           32#1A           33#19
        34#18           35#17           36#16
'42' はまた、 '052' と '0x2a' (それぞれ、8 進定数、16 進定数の 
C 言語の構文) と表すこともできます。大文字か小文字かはこれらの形式では
問題になりません。
#
########################################################################
########################## Ksh Commands ################################
########################################################################
:: (ksh 構文)
%: - 何もしない
「:」コマンドは何も行わずに、0 (真) を返します。
#
:. (ksh 構文)
%. - ファイルからコマンドを読む
'. <ファイル>' コマンドにより dbx は <ファイル> からコマンドを読み取ります。
どのような変数代入も関数定義も現在の環境に影響します。
path オプションが設定されると、\$PATH が検索されます。

「help source」と「help ksh options」を参照してください。
#
:[ (ksh 構文)
%[ - [<式>] は、test <式> を簡略化したもの
[<式>] コマンドは test <式> に代わる構文です。
詳細については、「help test」を参照してください。
#
:bg (ksh コマンド)
%bg - 現在のジョブをバックグラウンドに入れる
bg              # 現在のジョブをバックグラウンドに入れます。
bg %+           # 現在のジョブをバックグラウンドに入れます。
bg %-           # 前回のジョブをバックグラウンドに入れます。
bg %<番号>      # ジョブ <番号> をバックグラウンドに入れます。
bg %<文字列>    # <文字列> で始まるジョブをバックグラウンドに入れます。
bg %?<文字列    # <文字列> を含むジョブをバックグラウンドに入れます。
                % はすべての場合で省略可です。
#
:bind (ksh コマンド)
%bind - emacs キーバインドを表示および編集する
bind                   # キーバインドを編集して現在の emacs を表示します。
bind <キー>=<定義>     # <キー> を <定義> にバインドします。
bind <キー>            # <キー> の現在の定義を表示します。
bind <キー>=           # <キー> のバインドを削除します。
bind -m <キー>=<定義>  # <キー> を <定義> のマクロにします。
bind -m                # bind と同じ。        

詳細は「help editing emacs」と「help editing vi」を参照してください。

#
:break (ksh キーワード)
%break - while、until、for ループの外へブレークする
break                  # 取り囲むループ (while、until、for) から外へ
                       # ブレークします。
break <数>             # <数> 重の取り囲むループの外へブレークします。
#
:builtin (ksh コマンド)
%builtin - 関数や別名を無視して組み込みコマンドを使用する
builtin <コマンド> [<引数群>] # <コマンド> を実行して、名前が <コマンド> 
                              # の関数または別名の正常な検索を抑制します。 
                              # <コマンド> が組み込みでない場合、エラー
                              # メッセージを表示します。
#
:cd (ksh コマンド)
%cd - 作業ディレクトリを変更する
cd                # ディレクトリを $HOME に変更します。
cd <ディレクトリ> # ディレクトリを <ディレクトリ> に変更します。
                  # <ディレクトリ> が / で始まっていなければ、$CDPATH を
                  # 検索します。/ で始まっていれば、そのまま使用します。
                  # どちらの場合も、<ディレクトリ>  がチルド ~ で始まる場合、
                  # ~/ は $HOME で置換し、
                  # ~<名前> は <名前> というユーザーのホームディレクトリで
                  # 置換します。
cd <旧> <新>      # ディレクトリを <新ディレクトリ> に変更します。ここで、
                  # <新ディレクトリ> は、現在のディレクトリ名の中の文字列 
                  # <旧> を <新> と置き換えることによって得られます。
cd -              # ディレクトリを $OLDPWD に変更します。
#
:continue (ksh キーワード)
%continue - while、until、for ループの次の繰り返しに進む
continue          # 最も近い閉じたループ (while、until または for)
                  # の次の反復から ksh コマンドの実行を継続します。
continue <数>     # <数> レベル外側の閉じたループの次の反復から実行を
                  # 継続します。

プロセス制御については、「help cont」 を参照してください。
#
:dalias (コマンド)
%dalias - dbx 形式 (csh 形式) の別名を定義する
dalias                # (dbx 別名) 現在定義されている別名をすべて表示します。
dalias <名前>         # 別名 <名前> の定義があれば表示します。
dalias <名前> <定義>  # <名前> を定義して、<定義> の別名とします。<定義>
                      # には空白があってもかまいません。セミコロン
                      # または改行で定義を終了します。
                      # dbx では、次の csh 履歴置換用のメタ構文を使用でき
                      # ます。このメタ構文は通常、別名で使用されます。
                              !:<n>
                              !-<n>
                              !^
                              !$
                              !*
                      # ! は通常、前にバックスラッシュを付けます。
                      # 以下に例を示します。
                      #       dalias goto "stop at \!:1; cont; clear"
                      # 詳細は、csh(1) のマニュアルページを参照してください。

「help alias」と「help kalias」を参照してください。
#
:eval (ksh コマンド)
%eval - コマンドを評価する
eval <コマンド> [<引数群>]   # コマンド <コマンド> を、キーボードから入力
                             # されたかのように評価します。
                             # コマンドをプログラマティックにして、
                             # 実行しなければならない場合に便利です。

                                 例: 
                                 (dbx) x='echo $$'
                                 (dbx) $x
                                 $$
                                 (dbx) eval $x
                                 1234
#
:exec (ksh コマンド)
%exec - 現在の dbx を終了し、新しいプログラムを実行する
exec <コマンド> [<引数群>]   # dbx は指定のコマンドを exec() します。
                             # この結果、dbx は終了し、新しいコマンドが同じ
                             # プロセス ID で実行されます。
#
:exit (ksh コマンド)
%exit - dbx を終了する
exit                    # dbx を戻りコード 0 で終了します。
exit <整数>             # dbx を戻りコード <整数> で終了します。
#
:export (ksh コマンド)
%export - 指定の環境変数をエクスポートする
export                  # エクスポートされた ksh 変数をすべて表示します。
export <名前>           # 変数 <名前> をエクスポートされたものとしてマーク
                        # します。
export <名前>=<値>      # 変数 <名前> をエクスポートされたものとしてマークし、
                        # それに新しい値を代入します。
export <名前 1> <名前 2>... 
                        # 指定の変数をエクスポートされたものとしてマークします。
export <名前 1>=<値 1> <名前 2>=<値 2>...   
                        # 同様
                        # エクスポートされた変数は属性 -x を持ちます。
                        # 「help typeset」を参照してください。
#
:false (ksh コマンド)
%false - 何もせずに 0 以外を返す
false                   # 何も行わないで、ゼロ以外の値 (255) を返します。
#
:fc (ksh コマンド)
%fc - コマンドの履歴を編集および実行する
fc                      # 最新(最後に実行した) のコマンドに対しエディタ
                        # ($FCEDIT) を起動します。エディタを終了後に
                        # 結果が実行されます。
                        #「help ksh FCEDIT」を参照してください。
fc -e <エディタ>        # $FCEDIT の代わりに <エディタ> を使用して、直前の
                        # コマンドを編集します。
fc -l                   # 履歴内の最後の 16 コマンドをリストします。
fc -ln                  # 履歴番号を付けないで、最後の 16 コマンドを
                        # リストします。
fc -lr                  # 最後の 16 コマンドを逆の順にリストします。
fc -e - <コマンド>      # <コマンド> に一致する前コマンドを再度実行します。
                        # <コマンド> は、正の番号 (履歴番号) 、負の番号 
                        # (現在の履歴番号から引いた値) 、文字列 (与え
                        # られた文字列で始まる最新のコマンドに一致) 、
                        # なし (前コマンドを意味します) のいずれかです。
                        # 組み込み別名 r は fc -e - に設定します。
fc -e - <旧>=<新> <コマンド>
                        # 上記と同様ですが、コマンドを実行する前に、<旧>
                        # を <新> で置き換えます。
fc -e -g - <旧>=<新> <コマンド>
                        # 大域的に、<旧> を <新> で置き換えます。
#
:fg (ksh コマンド)
%fg - 現在のジョブをフォアグラウンドに入れる
fg              # 現在のジョブをフォアグラウンドに入れます。
fg %+           # 現在のジョブをフォアグラウンドに入れます。
fg %-           # 前回のジョブをフォアグラウンドに入れます。
fg %<番号>      # ジョブ番号 <番号> をフォアグラウンドに入れます。
fg %<文字列>    # <文字列> で始まるジョブをフォアグラウンドに入れます。
fg %?<文字列>   # <文字列> を含むジョブをフォアグラウンドに入れます。

  % はすべての場合で省略可能。
#
:getopts (ksh コマンド)
%getopts - オプションに対する位置パラメータを構文解析する
getopts <オプション指定> <名前>      
        # <オプション指定> の値に基づいて、適正なオプションがないかどうか位置
        # パラメータ ($1、$2 など) を検査し、その結果を <名前> に代入します。
        # <オプション指定> はオプション文字の列です。オプション文字にコロン 
        # (:) が続く場合、引数が必要です。例題は、「help ksh OPTARG」を
        # 参照してください。
getopts <オプション指定> <名前> <引数群>... 
        # 位置パラメータではなく、指定の引数を使用します。
#
:hash (ksh コマンド)
%hash - 追跡対象の別名を操作する (高速コマンド検索)
hash            # 追跡された別名をリストします。
hash <コマンド> # <コマンド> を追跡された別名にします。
hash -r         # 追跡された別名すべてを設定解除します。
                # UNIX コマンドを実行した場合、hashall オプションを設定し、
                # コマンドを単純名 (ハイフンなし) で与えると、その名前が、
                # 実行されたプログラムに対応するパス名に対して追跡された
                # 別名として入力されます。
#
:jobs (ksh コマンド)
%jobs - 活動状態のジョブを表示する
jobs            # 活動状態のジョブをすべてリストします。リストには、
                # ジョブ番号、現在 (+) と前回 (-) のジョブの印、
                # プロセス ID 、状態の識別 (「停止中」、「実行中」など)、
                # コマンドの最初の数文字が含まれます。
                # 詳細は、「help fg」と「help bg」を参照してください。
#
:kalias (ksh コマンド)
%kalias - ksh の別名を定義する
kalias                  # (kalias = ksh alias) 現在定義されている別名をすべて
                        # リストします。
kalias <名前>           # 別名 <名前> の定義があればリストします。
kalias <名前>=<定義>... # <定義> の別名になるように <名前> を定義します。
                        # <定義> に空白がある場合、引用符で囲まなければ
                        # なりません。
                        # 標準の ksh alias との相違点は、kalias コマンド
                        # (ただの dalias コマンドではなく) が、別名で一般
                        # 的に使われる csh 履歴置換のメタ構文を使用できる
                        # 点です。以下に例を示します。 
                        #         dalias goto "stop at !:1; cont; clear"
                        # dalias コマンドは、kalias コマンドとは異なり、
                        # ! の前にバックスラッシュを付ける必要はありません。

「help dalias」、「help alias」を参照してください。
#
:kprint (ksh コマンド)
%kprint - 引数をエコーする (Korn print)
kprint <引数>...         # (kprint = ksh print) 引数をエコーします。
kprint -n <引数>...      # 改行なしで、引数をエコーします。
kprint -e <引数>...      # バックスラッシュエスケープを展開して、引数をエコー
                         # します (デフォルト設定)。
kprint -r <引数>...      # バックスラッシュエスケープを展開しないで、引数を
                         # エコーします。「help ksh backslash」を参照してく
                         # ださい。
kprint -u <n> <引数>...  # ファイル記述子 <n> に引数をエコーします。
kprint - <引数>...       # 引数をエコーします。これで、<引数> がハイフン (-) で 
                         # 始まっても、オプションとしては扱われません。
                         # 組み込み別名の echo は kprint と同じです。
#
:let (ksh コマンド)
%let - ksh の数式を評価する
let <引数>...            # 1 つ以上の算術式を評価します。戻りコードは
                         # 最後に評価した式が 0 以外の場合 0 (真) 、
                         # それ以外は 1 (偽) です。let <引数>... は 
                         # ((<引数>...)) と同じです。
                         # 詳細については、「help ksh expressions」 を
                         # 参照してください。
#
:read (ksh コマンド)
%read - ファイルや stdin から 1 行読み取る
read <名前>              # stdin から 1 行受け付け、ksh 変数 <名前> に代入
                         # します。
read <n1> <n2>...        # stdin から 1 行受け付け、最初のワードを <n1> に、 
                         # 2 番目のワードを <n2> に、以下同様に割り当てます。
read <名前>?<プロンプト> # stderr に <プロンプト> を表示し、stdin から 1 行
                         # 受け付け、それを <名前> に代入します。
read -e ...              # 行の終わりのバックスラッシュを、行継続文字として
                         # 扱います (デフォルト) 。
read -r ...              # バックスラッシュを特別には扱いません。
read -u <n> ...          # stdin ではなくファイル記述子 <n> から読み取ります。
:readonly
%readonly - 環境変数を変更不可能にする
readonly                  # -r 属性を持つ ksh 変数を一覧表示します。
readonly <名前>...        # 指定の変数に対して -r 属性を設定します。
readonly <名前>=<値>...   # 新しい値を代入し、指定の変数に -r 属性を
                          # 設定します。詳細については、「help typeset」
                          # を参照してください。
#
:return (ksh キーワード)
%return - ksh 関数から復帰する
return               # ksh 関数が、最後に実行したコマンドの終了コードを返します。
return <n>           # ksh 関数が、終了コード <n> を返します。
#
:set (ksh コマンド)
%set - ksh オプションと位置パラメータを設定する
set                 # すべての ksh 変数とその値をリストします。
set <引数>...       # 位置パラメータを <引数>... に設定します。
set -- <引数>...    # 先頭がダッシュで始まるような位置パラメータを設定します。
set -o <オプション> # <オプション> を設定します。
set +o <オプション> # <オプション> を解除します。
set -o              # 現在設定されているオプションをすべてリストします。
set +o              # 現在設定されているオプションをすべてリストします。
set -<オプション>   # 省略形が <オプション> のオプションを設定します。
set +<オプション>   # 省略形が <オプション> のオプションを解除します。
                    # 詳細については、「help ksh options」 を参照してください。
#
:sh (ksh コマンド)
%sh - $PATH に該当するコマンドを実行する
sh <コマンド> [<引数>...]   # 別名、関数、組み込みの通常の検索を抑制して、
                            # <コマンド> を実行します。
#
:shift (ksh コマンド)
%shift - 位置パラメータをシフトする
shift                # 位置パラメータを 1 つ左にシフトして、$1 を落とします。
shift <数>           # 位置パラメータを <数> 個左にシフトして、最初の 
                     # <数> 個の引数を落とします。
#
:test (ksh コマンド)
%test - ファイル属性や、文字列の比較などを行う
test <式>  # <式> の評価が真の場合は真 (0) を返し、そうでなければ
           # 偽 (1) を返します。以下の演算子を認識します。
                          
           -r <ファイル>   <ファイル> が読み取り可能なら真。
           -w <ファイル>   <ファイル> が書き込み可能なら真。
           -x <ファイル>   <ファイル> が実行可能なら真。
                           (<ファイル> がディレクトリの場合検索可能なら真。)
           -f <ファイル>   <ファイル> が正規ファイルなら真。
           -d <ファイル>   <ファイル> がディレクトリなら真。
           -c <ファイル>   <ファイル> がキャラクタ型特殊ファイルなら真。
           -b <ファイル>   <ファイル> がブロック型特殊ファイルなら真。
           -p <ファイル>   <ファイル> が名前付きパイプ (FIFO) なら真。
           -u <ファイル>   <ファイル> に set-uid-bit がセットされてるなら真。
           -g <ファイル>   <ファイル> に set-gid-bit がセットされてるなら真。
           -k <ファイル>   <ファイル> にスティッキビットがセットされてるなら真。
           -s <ファイル>   <ファイル> が 0 バイトより大きければ真。
           -O <ファイル>   <ファイル> のこのユーザーの所有なら真。
           -G <ファイル>   <ファイル> のグループ ID がこのユーザーと同じなら真。
           -L <ファイル>   <ファイル> がシンボリックリンクなら真。
           -S <ファイル>   <ファイル> がソケット特殊ファイルなら真。
           -t <fd>         ファイル記述子の <fd> がオープンされていて、
                           端末装置に対応してれば真。
           -z <文字列>     <文字列> が長さがゼロならなら真。
           -n <文字列>     <文字列> が長さがゼロ以外なら真。
           -o <オプション> <オプション> が設定されているなら真。
           !               次に続く式を否定します。
           -o              2 進の or
           -a              2 進の and
           (<式>)          グループ化 (引用符を付けなければなりません)。

 注意: -o 演算子は、それに続く語が、set コマンドで受け付けるオプション
       の 1 つである場合だけ、「オプション」を意味します。オプション一覧は
       「help ksh options」を参照してください。
#
:times (ksh コマンド)
%times - dbx および子の累積ユーザー時間およびシステム時間を印刷する
times           # dbx およびその全子プロセスの累積ユーザー時間および
                # システム時間を印刷します。
#
:trap (ksh コマンド)
%trap - ksh コマンドをシグナルまたはプロセス終了と関連付ける
trap                        # 現在設定されているトラップとアクションを表示
                            # します。
trap <アクション> <条件>... # <条件> が発生した場合に dbx が <アクション> を
                            # 実行します。

                            <アクション> に可能な値は以下のとおりです。

                              null        条件を無視します。
                              -           デフォルトにリセットします。
                              省略        '-' と同じ
                              <コマンド>  一連のコマンド。
$<newline>        
                            <条件> の有効値は以下のとおりです。

                              0           dbx が終了すると発生します。
                              <番号>      シグナル番号
                              <名前>      シグナル名。使用可能な名前は
                                          kill -l で参照してください。
                              EXIT        0 と同じ
#
:true (ksh コマンド)
%true - 何もせずに 0 を返す
true                    # 何も行わないで、0 を返します。
#
:typeset (ksh コマンド)
%typeset - 環境変数の属性を設定
typeset                 # すべての ksh 変数とその属性の名前を表示します。
typeset -f              # すべての ksh 関数の名前を表示します。
typeset -x              # export と同じ  (「help export」を参照)
typeset -r              # readonly と同じ (「help readonly」を参照)
typeset -i              # -i (整数) 属性を持つすべての ksh 変数の名前と
                        # 値を表示します。
typeset -t              # -t (トレース) 属性を持つすべての ksh 変数の
                        # 名前と値を表示します。
typeset -q              # -q (引用) 属性を持つすべての ksh 関数の名前を
                        # 表示します。
typeset -[xritq] <名前> # 指名された変数または関数の属性を設定します。
typeset +[xritq] <名前> # 属性をクリアします。
typeset -i<基数> <変数> # 変数 <変数> の基数を指定します。
                        # <基数> は 2 から 36 まででなければなりません。
#
:ulimit (ksh コマンド)
%ulimit - 資源の制限値の表示や設定を行う
ulimit                  # 現在のファイルサイズ制限値を表示します (-f と同じ) 。
ulimit -[cdmstf]        # 現在のハード制限値を以下のように表示します。
                        #    -c    コアファイルのサイズ (ブロック数単位)
                        #    -d    データセグメントのサイズ (キロバイト単位)
                        #    -m    マップメモリーのサイズ (キロバイト単位)
                        #    -s    スタックセグメントのサイズ (キロバイト単位)
                        #    -t    時間制限 (秒単位)
                        #    -f    書き込まれるファイルのサイズ (ブロック数単位)
ulimit -[CDMSTF]        # 上記の情報についての現在のソフト制限値を表示します。
ulimit -[cdmstf] <数値> # ハード制限値を設定します (ハード制限値を引き上げるには
                        # スーパーユーザーでなければなりません) 。
ulimit -[CDMSTF] <数値> # ソフト制限値を設定します (現在のハード制限値を上回る値
                        # には設定できません)。

#
:umask (ksh コマンド)
%umask - 新規に作成されるファイルのアクセス権 (read/write/execute) を変更する
umask           # 現在の umask を 3 桁の 8 進数で表示します。
umask <n>       # umask を指定の値に設定します (8 進数として解釈されます) 。
                # umask は、このプロセスで作成した任意のファイルのファイル
                # パーミションを値のゼロに設定されるビットを指定します。
                # 代表的な値は 022 (本人以外書き込み不可) および 027 (グループに
                # よる書き込み不可、本人とグループ以外アクセス不許可) です。
#
:unalias (dbx/ksh コマンド)
%unalias - 別名定義を取り消す
unalias <名前>...       # 指定の別名定義があれば、それを削除します。
#
:unset (ksh コマンド)
%unset - set で設定したものを取り消す
unset <変数>...          # 指定の ksh 変数の定義があれば、それを削除します。
unset -f <関数>...       # 指定の ksh 関数の定義があれば、それを削除します。
#
:vitem (コマンド)
%vitem - データのグラフ化インタフェース
   vitem コマンドはデータグラファ GUI へのインタフェースです。
   
vitem -new <配列式>             # <配列式> をグラフ表示する新しいウィンドウ
                                # を開きます。
vitem <id> -replace <array-expr># 既存の項目を置換します。
vitem <id>|all ... -update ontimer|onstop|ondemand
                                # 指定項目の更新モードを設定します。
vitem <id>|all ... -update now  # 現在グラフ表示されているすべてを再表示します。
vitem <id>|all ... -enable      # 再表示を有効にします。
vitem <id>|all ... -disable     # 再表示を無効にします。
vitem <id>|all -list            # 既知の表示のすべてをリストします。
vitem <id>|all -list -s         # 既知の表示すべてを、「source」コマンドで
                                # 再読み取りできる方法でリストします。
vitem <id>|all -delete          # 指定項目を削除します。
vitem -timer <秒>               # 間隔タイマーを設定します。
                                # dbx の単一の間隔タイマーは、「timer」
                                # 「event specification」およびコレクタコマンド
                                # によっても共有されます。これらの機能のいずれか
                                # を使用すると、他の機能は除外されます。
#
:wait (ksh コマンド)
%wait - バックグラウンドのジョブの終了を待つ
wait            # 現在のバックグラウンドジョブが終了するのを待ちます。
wait <ジョブ>   # 指定されたバックグラウンドジョブが終了するのを待ちます。
                # <ジョブ> の有効な構文については、「help fg」を
                # 参照してください。

   % はオプションで、省略可能です。
#
:whence (ksh コマンド)
%whence - 別名、関数、組み込み関数、コマンドなどの意味を表示する
whence <名前>...        # 指定の名前の意味を表示します。
                          名前がキーワードまたは ksh 関数の場合は、名前
                          だけを表示します。組み込みコマンドの場合は、
                          builtin とコマンド名を表示します。別名の場合
                          は、その別名の定義を表示します。追跡された別名
                          または UNIX コマンドの場合、そのコマンドへの
                          フルパス名を表示します。
whence -v <名前>...     # 詳細表示。関数の場合、その定義を含みます。
########################################################################
######################## ksh keywords  #################################
########################################################################
%case - 多方向に分岐する: case <文字列> in <ケース> esac
%do - コマンドをグループ化する: while <テスト> do <コマンド> done
%done - コマンドをグループ化する: while <テスト> do <コマンド> done
%elif - 条件付きで実行する: if then elif else fi
%else - 条件付きで実行する: if then elif else fi
%esac - 多方向に分岐する: case <文字列> in <ケース> esac
%fi - 条件付きで実行する: if then elif else fi
%for - リスト上でループを実行する: for <変数> in <リスト> do <コマンド> done
%function - ksh 関数を定義する:  function <名前> { <コマンド> }
%if - 条件付きで実行する: if then elif else fi
%in - for ... in ... do ... done  または  case ... in ... esac
%select - 選択ループを実行する: select <変数> in <リスト> do <コマンド> done
%then - 条件付きで実行する: if then elif else fi
%time - ユーザー時間およびシステム時間を報告する: time <コマンド>
%until - 条件が真になるまでループを実行する: until <テスト> do <コマンド> done
%while - 条件が真の間ループを実行する: while <テスト> do <コマンド> done
%{ - コマンドをグループ化する:  { <コマンド>; <コマンド>; }
%} - コマンドをグループ化する:  { <コマンド>; <コマンド>; }
########################################################################
######################## Miscellaneous #################################
########################################################################
:dbxdir (dbx 変数)
この事前定義済みの読み出し専用変数には、dbx の実行可能ファイルを
含むディレクトリのフルパス名が入っています。
#
:havegui (dbx 変数)
dbx が GUI の下で動作する場合、$havegui は「真」の値を取り、
そうでなければ「偽」です。
#
:mtfeatures (dbx 変数)
スレッドや LWP 関連のコマンドが使用可能にされると (デバッグ対象プロセスがマルチ
スレッドの場合) $mtfeatures は「真」の値を取り、そうでなければ「偽」です。
スレッドコマンドが使用できない場合でも、LWP コマンドは使用できるかもしれません。
この場合、mtfeatures は「真」の値を取ります。
#
:version (dbx 変数)
dbx のバージョンを表示します。
「help invocation」の -V オプションも参照してください。
#
:last_choice (dbx 変数)
この変数には「多重定義表示メニュー」での最後の選択が記憶されます。
これは主にスクリプト中で使われます。

        function myprint {
                # print it twice, once in octal, then in hex
                # reuse same overload choice, if any
                DBX_output_base=8 builtin print $*
                DBX_output_base=16 builtin print $* <<-EOF
                $last_choice
                EOF
        }
#
# Obsolete commands/syntax go here...
#
:/
「/」コマンドは無くなりました。「help changes301」を参照してください。
#
:?
「?」コマンドは無くなりました。「help changes301」を参照してください。
#
:=
「=」コマンドは無くなりました。「help changes301」を参照してください。
#
#########################################################
##################  RTC help topics #####################
#########################################################
:rtc (トピック)

実行時検査機能 (RTC) に関するヘルプは、いくつかのサブトピックとコマンドから
構成されています。以下に RTC に関するヘルプトピックを示します。

主題部分のヘルプ:

    introduction    # RTC の概要。
    commands        # RTC 関連コマンドの概要。
    dbxenvs         # RTC 関連 の dbx の環境変数の概要。
    api             # ユーザー定義ヒープアロケータ支援のためのインタフェース
    limitations     # 一部のプログラムで生じる RTC の限界に関する説明と対策。
    attach          # 接続されたプログラムで RTC を使用する際のヒント。
    batch           # RTC バッチモードに関する注意。
    mt              # マルチスレッドアプリケーションでの RTC の使用に関するヒント。
    errors          # RTC で使用されるエラーコードの概要。
    showmap         # アドレスにより保存される手段のマップを表示

RTC コマンドのヘルプ:

    check           # メモリーアクセス、リーク、または使用のチェックが可能
    uncheck         # メモリーアクセス、リーク、または使用のチェックが不能
    suppress        # メモリーエラーのリポートを抑止
    showleaks       # 最後に showleaks コマンドが実行されてからの新たな
                      メモリーリークを報告
    showmemuse      # 最後に showmemuse コマンドが実行されてから使用された
                      メモリーを表示
    showblock       # メモリーアクセス、リーク、または使用のチェックが不可能
    rtc -showmap    # アドレスにより手段の型のマップを表示

:rtc$$introduction (サブトピック)
実行時検査 (RTC) は、メモリーアクセス検査およびメモリー使用状況/リーク検査の 
2 つの部分からなる dbx の機能です。メモリーアクセス検査は、SPARC でのみ利用で
きます。

アクセス検査では、デバッグするアプリケーションによるメモリーの不正使用を検査
します。RTC はメモリーアクセス (ロード、ストア、および解放操作) を監視して、
メモリーリーク (malloc() により確保されたヒープ領域が、開放されていないまたは、
参照ポインタがない場合) も検出します。

アクセス検査を使用すると、次のものを検出することができます。
o 範囲外のメモリーへのロードとストア 
  (BUS エラーまたはセグメント違反などの予期できない操作)
o 割り当て解除された範囲内メモリーを使用したロードとストア 
  (ヒープメモリーの場合は free() 呼び出しを介して、またはスタックメモリーの場合
  は関数の戻りを介して)
o 初期化されていない範囲内メモリーからのロード
o 重複する free() や、malloc() 領域のない free() などの不正な free() 呼び出し

メモリー使用状況/リーク検査には、主なヒープ領域すべての追跡、必要に応じた、ある
いはプログラム終了時の使用可能データ領域の走査、および参照を持たない領域の識別
が含まれます。

Fortran 開発者は、RTC を最大限に利用できるように -stackver オプションを使用する
ようにしてください。-stackver の使用法については、Fortran マニュアルを参照して
ください。

RTC の詳しいヘルプトピックについては、「help rtc」を参照してください。

#
#
:rtc$$commands (サブトピック)

RTC に関連する dbx コマンドは、次の 3 つに分類されます。

1. RTC をオン/オフにする。 
  
   check と uncheck コマンドで制御します。
   check を使用すると、メモリーアクセス検査 (SPARC のみ)、メモリーリーク検査、
   およびメモリー使用状況検査をオンできます (「help check」と
  「help uncheck」を参照)。

2. RTC によって報告されるエラーのスコープと量を制御する。

   suppress と unsuppress コマンドで制御します。
   この 2 つのコマンドを使用すると、RTC セッションを自在に制御することが
   できます。詳細については、「help suppress」と「help unsuppress」を
   参照してください。

3. メモリーリークレポートとメモリー使用状況レポートを入手する。

   メモリー使用状況 (またはリーク) 検査を check コマンドによってオンにした後、
   showleaks コマンドを使用してリークレポートを、showmemuse コマンドを使用
   してメモリー使用状況レポートを入手できます。showblock コマンドを
   使用すると、ヒープブロックの割り当てに関する詳細も入手できます。
   命令手段のマップを表示するには、rtc -showmap コマンドを使用します。
   詳細については、「help showblock」、「help showleaks」、および
   「help showmemuse」を参照してください。

RTC の詳しいヘルプトピックについては、「help rtc」を参照してください。

#
:rtc$$dbxenvs (サブトピック)

RTC の動作は、dbx の環境変数を使用して制御することができます。
(「help dbxenv」を参照)。RTC に関する dbx の環境変数は次のとおりです。

dbxenv rtc_auto_continue <on | off>
        RTC エラーを rtc_error_log_file_name に記録して続行します。
        デフォルトは off。

dbxenv rtc_auto_suppress <on | off>
        on の場合、指定位置の RTC エラーが 1 回だけ報告されます。
        デフォルトは on。

dbxenv rtc_biu_at_exit <on | off | verbose>
        この変数はメモリー使用検査が on (check -memuse または
        check -all が指定されている)場合使用されます。値が on だと、
        非詳細メモリー使用状況 (使用中ブロック) レポートがプログラムの
        終了時に生成されます。この値が verbose の場合は、詳細メモリー
        使用状況レポートがプログラムの終了時に生成されます。この値が 
        off だと何も出力されません。この変数は対話式の showmemuse 
        コマンドには無効です。デフォルトは on です。

「help check」と「help showmemuse」も参照してください。

dbxenv rtc_error_limit <数>
        報告される RTC エラーの上限数。
        デフォルトは 1000。

dbxenv rtc_error_log_file_name <ファイル名>
        rtc_auto_continue が設定されている場合、RTC エラーが記録されている
        ファイルの名前。デフォルトは /tmp/dbx.errlog.<uniqueID>。

dbxenv rtc_mel_at_exit <on | off | verbose>
        この変数はリーク検査が on の場合に使用されます。
        値が on だと、非詳細メモリーリークレポートがプログラムの
        終了時に生成されます。この値が verbose の場合は、詳細メモリーリーク
        レポートがプログラムの終了時に生成されます。この値が off だと何も出力
        されません。この変数は、対話式の showmemuse コマンドには無効です。
        デフォルトは on です。

RTC の詳しいヘルプトピックについては、「help rtc」を参照してください。 

#
:rtc$$api (サブトピック)

    アプリケーション固有のメモリアロケータを追跡する RTC 関数 

リーク検出とアクセス検査は、双方とも共有ライブラリ libc.soにある標準ヒープ管理
ルーチンを使用する必要があります。これは、RTCがプログラム内のすべての
割り当て/割り当て解除を追跡できるようにするためです。アプリケーションの多くは
独自のメモリー管理ルーチンを、malloc-free を元に作成するか、または最初から
書きます。独自のアロケータ (RTC では「専用アロケータ」という) を使用している
場合、RTC はそれらを自動的に追跡することができないため、その不正な使用による
リークエラーとメモリーアクセスエラーを知ることができません。

ただし、RTC には「専用アロケータ」用の API が用意されています。この APIを使用
すると、専用アロケータを標準ヒープアロケータと同様に扱うことができます。
API そのものはヘッダーファイル rtc_api.h に存在し、製品の一部として提供されて
います。
マニュアルページ rtc_api(3x) には、RTC API に関する詳細が記載されています。

専用アロケータがプログラムヒープを使用しない場合、RTC エラー報告に若干の違いが
生じることがあります。標準ヒープブロックを参照するメモリーアクセスエラーが起こ
ると、RTC エラーレポートには通常、ヒープブロック割り当ての位置が示されます。
上記の場合、これが報告されないことがあります。

RTC の詳しいヘルプトピックについては、「help rtc」を参照してください。 

:rtc$$limitations (サブトピック)

アクセス検査はロードオブジェクトのシンボル情報を必要とします。
ロードオブジェクトが完全にストリップされている場合、RTC はすべての
エラーをキャッチしないかもしれません。初期化されていないメモリからの
読み取りエラーは適切でない可能性があるため抑止されます。「unsuppress rui」
コマンドを使用して抑止解除することができます。ロードオブジェクトの
シンボルテーブルを保持するために、strip を使用する場合は -x オプションを
使用してください。

以下はSPARC にのみ適用されます。

以下で説明する 8M 問題は、dbx が分岐を使用せずにトラップハンドラを呼び出す
新機能を持つ UltraSPARC 搭載のハードウェア上では、もう発生しません。
トラップハンドラへの制御の移行は、速度がかなり遅い (最大 10 倍) ですが、8M 
制限は受けません。ハードウェアが UltraSPARC であれば、トラップが (必要なので) 
自動的に使用されます。これは、システムコマンド isalist を実行し、
"sparcv8plus" と表示されるかどうかで確かめることができます。rtc -showmap 
コマンドを使用して、アドレスによりソートされた手段の型のマップを表示できます。

アクセス検査を実行するために、dbx の RTC 機能は各ロードおよびストア命令を、
パッチ領域への分岐命令と置き換えます。この分岐命令の有効範囲は 8M バイトです。
これは、デバッグされたプログラムが、置き換えられた特定のロード/ストア命令の 
8M バイトのアドレス空間をすべて使いきってしまった場合、パッチ領域を保存する
場所がなくなることを意味します。RTC がメモリーへのロードおよびストアにまったく
割り込めない場合、RTC は正確な情報を提供できないので完全に無効になります。
リーク検査は影響はうけません。

dbx は、この制約が生じると内部的にある処理を適用し、この問題を回避できる
場合は処理を続けます。しかし、dbx が処理を続けられなくなるケースもあります。
その場合は、エラーメッセージの表示後、アクセス検査が無効になります。

8MB の限界に達した場合は、どのように対処するのでしょうか。

1. 64 ビットの SPARC V9 ではなく 32 ビットの SPARC V8 を使用してみます。 

   -xarch=v9 オプションを指定してコンパイルしたアプリケーションで 8M
   バイトの問題が生じる場合は、32 ビットのアプリケーションでメモリーをテ
   ストしてみてください。64 ビットアドレスでは、より長いパッチ命令シーケ
   ンスが必要なため、32 ビットアドレスを使用することによって 8M バイト
   の問題を緩和することができます。これでも問題が回避できない場合は、以
   下の方法を 32 ビットと 64 ビットの両方のプログラムに適用することがで
   きます。 

2. パッチ領域用のオブジェクトコードを追加してみます。 

   rtc_patch_area シェルスクリプトを使用して特別な .o ファイルを作成
   し、大きな実行可能ファイルまたは共有ライブラリの中にリンクすると、さ
   らに多くのパッチ領域を追加することができます。rtc_patch_area(1) マ
   ニュアルページを参照してください。 

   8M バイトの限界に達すると、dbx は大きすぎたロードオブジェクト (メイン
   プログラム、または共有ライブラリ) を知らせ、そのロードオブジェクトに必
   要な総パッチ領域を表示します。 

   最良の解決策としては、特別なパッチ用オブジェクトファイルを実行可能フ
   ァイル全体または共有ライブラリ全体に均一に配置し、デフォルトのサイズ
   (8M バイト) 以下のサイズを使用するようにすることです。さらに、dbx か
   ら要求されるパッチ領域の 10〜20% を超える領域は追加しないでくださ
   い。たとえば、dbx によって a.out に 31M バイト必要になるとします。こ
   の場合、サイズが 8M バイトのオブジェクトファイルを rtc_patch_area
   スクリプトで 4 ファイル作成し、実行可能ファイル全体にほぼ均一になるよ
   うに配置します。 

   dbx が実行可能ファイル内で明示的なパッチ領域を検出すると、パッチ領域
   全体のアドレス範囲を表示するので、それらのオブジェクトファイルをリン
   ク行に正しく配置することができます。 

3. 大きなロードオブジェクトを小さなロードオブジェクトに分割してみます。 

   実行可能ファイルまたは大きなライブラリ内のオブジェクトファイルを小さ
   なオブジェクトファイルのグループに分割します。次に、それらのファイル
   を小さな部分にリンクします。大きなファイルが実行可能ファイルの場合、
   小さな実行可能ファイルと一連の共有ライブラリに分割します。大きなファ
   イルが共有ライブラリの場合、一連の小さなライブラリに再配置します。 

   これで、dbx は異なる共有オブジェクト間でパッチコードのための領域を探
   すことができます。 

4. "pad" .so ファイルを追加してみます。 

   この方法は、プロセスを起動した後でプロセスに接続しようとする場合にの
   み適用してください。 

   実行時リンカーが複数のライブラリを配置する場合、ライブラリ間が近すぎ
   てその間にパッチ領域を生成できない場合があります。dbx が RTC を有効
   にして実行可能ファイルを起動すると、実行時リンカーに共有ライブラリ間
   にすき間を空けるよう要求しますが、RTC を有効にして dbx が起動したプ
   ロセスに接続する場合、ライブラリ間が近すぎる可能性があります。 

   このような状況が生じた場合 (そして、dbx からプログラムを起動できない
   場合)、rtc_patch_area スクリプトを使用して共有ライブラリを作成し、
   そのライブラリを他の共有ライブラリとの間にあるプログラムにリンクして
   みてください。詳細は、rtc_patch_area(1) マニュアルページを参照して
   ください。

RTC の詳しいヘルプトピックについては、「help rtc」を参照してください。

#
:rtc$$attach (サブトピック)


RTC は exec() のほか、次の子プロセスもサポートします (「help follow-fork」を
参照)。RTC は、影響のあるメモリーがすでに割り当てられていると RUI が
検出されない、という例外付きで、接続したプロセスでも動作します。
また、プロセスの開始時には、librtc.so が事前にロードされている必要があります。
接続先が 64 ビットの sparcv9 プロセスである場合は、sparcv9 用の librtc.so を
使用してください。製品が /opt にインストールされている場合、librtc.so の場所は
次のようになります。

      sparcv9 の場合:     /opt/SUNWspro/lib/v9/librtc.so
      その他の場合:       /opt/SUNWspro/lib/librtc.so
librtc.so を事前にロードするには、次のようにします。

      setenv LD_PRELOAD <...librtc のパス...>/librtc.so (csh 構文)

注: librtc の事前ロードは、必要な場合 (attach など) にのみ設定するようにし、
常にオンにしておくことがないようにしてください。次に例を示します。

      1. setenv LD_PRELOAD ... と指定する。
      2. アプリケーションを起動する。
      3. unsetenv LD_PRELOAD と指定する。

接続したいプログラムを、別のプログラムから fork または exec させたい場合は、
LD_PRELOAD をメインプログラム (これが fork を実行する) に設定する必要があります。
LD_PRELOAD の設定値は、fork/exec で継承されます。
ただし、32 ビットのプログラムで 64 ビットのプログラムを fork または exec する場合、
またその逆の場合も、LD_PRELOAD の設定は継承されません。

Solaris の最近のバージョンであれば、32 ビットまたは 64 ビットの
各プログラムにのみ影響を与える LD_PRELOAD_32 もしくは LD_PRELOAD_64
を使用することができます。これらの変数がサポートされているかどうかは
Solaris の「リンカーとライブラリ」を参照してください。

RTC の詳しいヘルプトピックについては、「help rtc」を参照してください。

#
:rtc$$batch (サブトピック)

実行時検査 (RTC) のバッチインタフェースを使用すると、dbx の対話式モードを
使わないで RTC を使用することができます。これにより、シェルスクリプトでの RTC の
使用が簡単になります。「bcheck」と呼ばれる独立したユーティリティが、このために
用意されています。「bcheck」は、実行時検査を有効にした dbx のもとでプログラムを
実行するためのシェルスクリプトです。詳細については、bcheck(1) のマニュアル
ページを参照してください。

RTC に関する詳しいヘルプトピックについては、「help rtc」を参照してください。

#
:rtc$$mt (サブトピック)
実行時検査 (RTC) は、Solaris 2.4 以降でマルチスレッドアプリケーションをサポート
します。
各アクセス検査のエラーレポート (SPARC の場合のみ) とともに、RTC は、エラーが
発生したスレッドの ID を出力します。RTC の生成するリークレポートには、プログラム
内のすべてのスレッドのリークが示されます。

RTC に関する詳しいヘルプトピックについては、「help rtc」を参照してください。

#
:rtc$$errors (サブトピック)
RTC によって報告されるエラーは、通常アクセスエラーとリークの 2 種類に分類
されます。

アクセス検査がオンになっている場合、RTC は次に示すエラーを検出して報告します。
        baf     # 不正な開放
        duf     # 重複領域解放
        maf     # 境界整列を誤った領域解放
        mar     # 境界整列を誤った読み取り
        maw     # 境界整列を誤った書き込み
        oom     # メモリー不足
        rua     # 非割り当て領域からの読み取り
        rui     # 非初期化領域からの読み取り
        wro     # 読み取り専用領域への書き込み
        wua     # 非割り当て領域への書き込み

リーク検査では、RTC は次に示すエラーを報告します。
        aib     # メモリーリークの可能性 - ブロック内アドレス
        air     # メモリーリークの可能性 - レジスタ内アドレス
        mel     # メモリーリーク - ブロックへのポインタがない

メモリー使用状況レポートは opcode biu (使用中ブロック) を使用します。

RTC の詳しいヘルプトピックについては、「help rtc」を参照してください。

:rtc$$showmap (サブトピック)
%showmap - 分岐とトラップのアドレス範囲を表示 (RTC)

    このコマンドは、上級ユーザーのためのもので、dbx を内部デバッグ
    するために使用します。RTC はアクセス検査のためにプログラムテキストに
    計測機構を付加します。計測機構の種類は有効なリソースに基づく分岐または
    トラップ命令である可能性があります。'rtc -showmap' は、計測機構の種類で
    分類されたプログラムテキストのアドレス範囲をレポートします。
    このマップはパッチ領域オブジェクトファイルを追加する最適な場所を見つけ、
    トラップを自動的に使用することを避けるために使用することができます。
    詳細は、「help rtc 8M」を参照してください。
    
#
:FAQ (トピック)
             dbx に関する FAQ (よくある質問)
            =================================

A.  一般的な質問:
 A.1  gdb と同等のコマンドを dbx で実行するには ?
 A.2  dbx が .dbxinit ファイルを読み取りませんがなぜでしょう ?
 A.3  コマンド行編集を使用可能にする方法は ?
 A.4  "alias" が動作しない理由は ?
 A.5  dbx が「foo は現スコープ内で定義されていません (foo is not defined in 
      the current scope)」というメッセージを表示し続ける理由は ?
      スコープとは何ですか ?
 A.6  "set" が動作しない理由は ?
 A.7  dbx がソースファイルを検索できません !
 A.8  dbx のもとでプログラムの動作が通常とは異なります。
 A.9  ブレークポイントを挿入しましたが、そこに到達しません。
 A.10 C++ メンバーの型が whatis の出力内でときどき失われる理由は ?
 A.11 実行時検査に 8M バイトの制限が存在する理由は ?
 A.12 dbx で浮動小数点例外を特定するには?
 A.13 dbx は必要な一時ファイルをどこに作成しますか ?
 A.14 非常に長いリストや引数を持つコマンド実行する方法は ?

B.  マルチスレッド (MT) 関連の質問:
 B.1  MT 対応の dbx の入手先は ?
 B.2  dbx の主な MT 機能は ?
 B.3  特定のスレッドにスコープを限定できますか ?
 B.4  GUI の主な MT 機能は ?
 B.5  スレッドの番号付けの規則は ?
 B.6  LWP の番号付けの規則は ?
 B.7  特定のスレッドにブレークポイントを設定できますか ?
 B.8  スレッドがブレークポイントに行き当たったとき何が起こりますか ? すべての
      スレッドが停止しますか、あるいはブレークポイントに行き当たったスレッド
      だけが停止しますか ?
 B.9  アプリケーションがマルチスレッドであることを dbx が知る方法は ?
 B.10  MT で気を付けるべき落とし穴は ?
 B.11 スリープ中のスレッドの実行を強制できますか ?
 B.12 ある特定のスレッドがどのスレッドを待機している (thr_join を介して) のか
      知る方法は ?
      プロセス/スレッドインスペクタ内のスレッドリストから始めて、どの
      スレッド ID がどの thr_create() 呼び出しから来ているのか特定する方法は ?
 B.13 プロセス/スレッドインスペクタ内のスレッドリストから始めて、どの
      スレッド ID がどの起動関数から来ているのか特定する方法は ?
 B.14 既存のマルチスレッドプロセスへの接続時に、どのスレッドが活動状態に
      なりますか ?
 B.15 活動状態のスレッドが thr_create を実行するとき、どのスレッドが活動状態に
      なりますか ? (thr_create() を実行したスレッドですか、それとも thr_create 
      で作成されたスレッドですか ?) (これを別の言葉で表すと、"follow_fork_mode" 
      に類似した "follow_thread_mode" がありますか ? という意味になります。)
 B.16 活動状態のスレッドが thr_exit を実行するとき、どのスレッド (存在する場合) 
      が活動状態になりますか ?

--------------------------------------------------------------------------------

(A.1) gdb と同等のコマンドを dbx で実行するには ?

次の表は、gdb のいくつかの一般的なコマンドにほぼ同等な dbx のコマンドの
リストです。

GDB                     DBX                        参照先
===                     ===                       ====================

break <行>              stop at <行>              「help stop」
break <関数>            stop in <関数>            「help stop」
break *<アドレス>       stopi at <アドレス>       「help stopi」
break ... if <式>       stop ... -if <式>         「help event specification」
cond <n>                stop ... -if <式>         「help event specification」
tbreak                  stop ... -temp            「help event specification」
watch <式>              stop <式>  [slow]         「help event specification」
watch <変数>            stop modify &<変数> [fast]「help event watchpoint」
catch <x>               intercept <x>             「help intercept」
info break              status                    「help status」
info watch              status                    「help status」
clear                   clear                     「help clear」
clear <関数>            delete <n>                「help delete」
delete                  delete all                「help delete」
disable                 handler -disable all      「help handler」
disable <n>             handler -disable <n>      「help handler」
enable                  handler -enable all       「help handler」
enable <n>              handler -enable <n>       「help handler」
ignore <n> <回数>       handler -count <n> <回数> 「help handler」
commands <n>            when ... { <コマンド>; }  「help when」

backtrace <n>           where <n>                 「help where」
frame <n>               frame <n>                 「help frame」
info reg <レジスタ>     print $<レジスタ>         「help registers」

finish                  step up                   「help step」
signal <番号>           cont sig <番号>           「help cont」
jump <行>               cont at <行>              「help cont」
set <変数>=<式>         assign <変数>=<式>        「help assign」

x/<書式> <アドレス>     x <アドレス>/<書式>       「help examine」
disassem <アドレス>     dis <アドレス>            「help dis」

shell <コマンド>        sh <コマンド> [必要な場合]「help sh」

info func <正規表現>    funcs <正規表現>          「help funcs」
ptype <型>              whatis -t <型>            「help whatis」

define <コマンド>       function <コマンド>       「help ksh syntax」

handle <シグナル>       stop sig <シグナル>       「help event specification」
info signals            status; catch             「help status」
                                                  「help catch」

attach <プロセス ID>    debug - <プロセス ID>     「help debug」
attach <プロセス ID>    debug - <a.out> <プロセス ID>    「help debug」
file <ファイル>         [不要]
exec <ファイル>         debug <ファイル>          「help debug」
core <ファイル>         debug <a.out> <ファイル>  「help debug」

set editing on          set -o emacs              「help editing」
set language <x>        language <x>              「help language」
set prompt <x>          PS1=<x>                   「help ksh PS1」
set history size <x>    HISTSIZE=<x>              「help ksh HISTSIZE」
set print object on     dbxenv output_dynamic_type on   「help c++ dynamic」
show commands           history                   「help history」
dir <名前>              pathmap <名前>            「help pathmap」
show dir                pathmap                   「help pathmap」
info line <n>           listi <n>                 「help listi」
info source             file                      「help file」
info sources            files; modules            「help files」、
                                                  「help modules」
forw <正規表現>         search <正規表現>         「help search」
rev <正規表現>          bsearch <正規表現>        「help bsearch」

--------------------------------------------------------------------------------

(A.2) dbx が .dbxinit ファイルを読み取りませんが、なぜですか ?

dbx は従来の .dbxinit 互換モードをサポートしなくなりした。
詳細は「help .dbxinit」を参照してください。


--------------------------------------------------------------------------------

(A.3) コマンド行編集を使用可能にする方法は ?

コマンド行編集を使用可能にする方法はいくつかあります。
$FCEDIT、$EDITOR、$VISUALのいずれかの変数を設定している場合は、その値が
が調べられます。最後のスラッシュの後の文字列が "emacs" の場合は emacs 
モード、"vi" の場合は vi モードになります。

上記の 3 つの環境変数をどれも設定していないか、リスト内で最初に設定し
ている環境変数に "emacs" または "vi" が含まれていない場合は、emacs モード
が使用可能です。

emacs モードは、コマンド行から (または、.dbxrc ファイル内に) 次のように
入力すれば使用可能にできます。

        set -o emacs

vi モードの場合も同様です

        set -o vi

コマンド行編集を使用不可能にするには、次のように入力します。

        set +o emacs +o vi


--------------------------------------------------------------------------------

(A.4) "alias" が動作しない理由は ?

"alias" は現在、"dalias" または "kalias" に対する事前定義の別名になっています。
「help alias」、「help dalias」、「help kalias」、「help startup」を参照して
ください。

--------------------------------------------------------------------------------

(A.5) dbx が「foo は現スコープ内で定義されていません」
      というメッセージを表示し続ける理由は ?
      スコープとは何ですか ?

このメッセージは、現在の実行箇所から foo という名前のシンボルに
アクセスできないということを意味しています。

スコープについての詳細は「help scope」を参照してください。

--------------------------------------------------------------------------------

(A.6) "set" が動作しない理由は ?

"set" は現在、Korn シェルの "set" コマンドであり、"assign" に対する別名
ではありません。「help assign」および「help set」を参照してください。

--------------------------------------------------------------------------------

(A.7) dbx がソースファイルを検索できません !

ソースファイルをコンパイル時と同じ場所に格納していないか、デバッグしている
マシンとは別のマシンでコンパイルした場合に、コンパイルディレクトリを同一の
パスにマウントしていないことが考えられます。

解決方法については、「help pathmap」を参照してください。

--------------------------------------------------------------------------------

(A.8) dbx 中のプログラムの動作が通常とは異なります。

dbx は通常、次のような場合にプログラムの動作に影響を及ぼします。

     実行時に最初に利用できるファイル記述子は 3 ではないかもしれません。 これ
     はバグであり、現在修正中です。したがって、既存の fd に依存している場合や、
     既存の fd をテーブルのインデックスに使用している場合などには、事情は改善
     される可能性があります。
        
     -C を取り除くのを忘れていたり、RTC をオンのままにしているかもしれません。

     dbx 初期化スクリプトに、その存在を忘れている環境変数が記述されているかも
     しれません。
        
     スタック基底は、dbx の下で動作しているときは、異なったアドレスで始まりま
     す。またスタック基底は、ユーザー環境や argv[] の内容によっても異なります。
     これによって、局所変数は、少し異なった形で割り当てられることになり、
     局所変数が初期化されていなければ、別々のランダムな数値を与えられます。
     この問題は実行時検査で検出できます。「help check」を参照してください。

     プログラムは malloc() したメモリーを初期化しないで使用しています。この
     状況は上と似ています。考え方は同じです。
     プログラムは、初期化されていないメモリーを不良ポインタで参照しています。
     この状況は上の 2 つと似ています。考え方は同じです。

     dbx は、LWP 作成と dlopen イベントを捕捉する必要があります。これはタイミ
     ングの取り方に大きな影響を与えることがあります。dbx は、シグナル上でコン
     テキストスイッチングも行うので、タイミングに敏感なシグナルを多用する場合
     は、動作が異なることもあります。

     プログラムは、マップされたセグメントに関して mmap() が常に同じベースアド
     レスを戻すものと期待しています。dbx の制御下ではアドレス空間が変化するた
     め、mmap() は dbx なしでプログラムを実行したときと同じアドレスを戻しませ
     ん。これがプログラムで問題となっているかどうかを調べるには、すべての 
     mmap() を調べ、戻されるアドレスはプログラムが実際に使用するものであって、
     ハードコードされたアドレスでないことを確認する必要があります。
     マルチスレッドのプログラムは、データに関する競争を含むかスレッドの
     スケジューリングに依存します。dbx の制御下ではスレッドのスケジューリングが
     変化するため、プログラムのスレッドの実行順序がいつもと異なる可能性が
     あります。こうした条件を調べるには lock_lint を試してください。

     GUI なしで実行 (つまり dbx を直接使用) する場合や、adb または truss で実行
     する場合も、同様の問題が起こるかどうか調べてみてください。

dbx を実行中プロセスに接続するですと、デバッグ対象プログラムに対する影響を最小に
することができますので、お試しください。「help debug」も参照してください。

--------------------------------------------------------------------------------

(A.9) ブレークポイントを挿入しましたが、そこに到達しません。

次の可能性を考えられます。
        
     関数にブレークポイントを配置すると、その関数は予想と異なる関数に
     なるかもしれません。whereis <関数名> を使用して、
     指定した名前の関数がいくつ存在しているかを検索してください。
     次に、whereis で出力された正確な構文を stop に使用します。

     (10) に対する解答を参照してください。

     ブレークポイントが while ループ上に存在する場合は、コンパイラが書式 1 の
     コードを書式 2 のコードに変換することによってトラブルが起こるかもしれ
     ません。

     書式 1:

                while (<条件> )
                        <実行文>

      書式 2:

                if (<条件>) {
                again:
                    <実行文>
                    if <条件>
                        goto again;
                }

     この場合では、ブレークポイントを while に置くと、
     結局ブレークポイントを外側の if にだけに置くことになります。
     これは、dbx が複数のアドレスにマップするソース行を扱えないことに
     起因します。

--------------------------------------------------------------------------------

(A.10) C++ メンバーの型が whatis の出力内でときどき失われる理由は ?

     次の whatis コマンドで、メンバー stackcount の型は失われます。

        (dbx) whatis stack
        class stack {
        ...
            static stackcount; /* 定義も割り当てもされない  */
        ...
        };

     クラスメンバーを定義していないか、または割り当てていないと、dbx はその型を
     決定できません。出力する型が存在しません

--------------------------------------------------------------------------------

(A.11) 実行時検査 (RTC) に 8M バイトの制限が存在する理由は ?

     アクセス検査だけがこの制約を受けます。これはリーク検査には影響しません。
     アクセス検査を行うために dbx/RTC はロードおよびストア命令をパッチ領域
     への分岐命令と置き換えます。この分岐命令の有効範囲は 8M バイトです。
     これは、デバッグするプログラムが、置き換えられた特定のロード/ストア命令の 
     8Mb のアドレス空間をすべて使いきってしまった場合、パッチ領域を保存する
     場所がなくなることを意味します。
     メモリーに対するすべてのロードおよびストアを抑止できない場合、RTC は正確な
     情報を提供できないのでアクセス検査を完全に無効にします。これはリーク検査に
     は影響しません。
     dbx は、この制約が生じると内部的にある戦略を適用し、この問題を
     回避できる場合は処理を続けます。しかし、dbx が処理を続けられなく
     なるケースもあります。その場合は、エラーメッセージの表示後、アクセス検査が
     無効になります。(回避策は、「help rtc 8M」を参照してください。)

--------------------------------------------------------------------------------
(A.12) dbx で浮動小数点例外および整数例外を特定するには ?

    次の 2 つのことを行う必要があります。

     dbx 内で "catch FPE" を実行します。これで FP 例外の発生時にプロセスが
     停止するようになります。整数を 0 で除算する、などの整数例外や
     整数のオーバーフローも、SIGFPE 環境では起こります。

     これでもまだ十分でありません。f77 ieee ソフトウェアは典型的にはすべての
     エラーをサイレント (シグナル発生なし) に設定します。そこで次の記述を 
     Fortran 77 アプリケーションに追加する必要があります。

        integer ieeer, ieee_handler, myhandler
        ieeer = ieee_handler('set', 'all', myhandler)
        ...
        
        integer function myhandler(sig, code, context)
        integer sig, code(5)
        call abort()
        end

     以上で、すべての ieee 例外で SIGFPE が発生するようになりますが、これは多少
     行き過ぎです。

     Fortran 95 の場合、すべてのエラーはサイレントではなく、シグナルを
     発生するので、何も追加する必要はありません。

     C または C++ プログラムの場合は、以下を実行します。
        #include <ieeefp.h>

        main()
        {
            fpsetmask(FP_X_INV|FP_X_OFL|FP_X_UFL|FP_X_DZ|FP_X_IMP);
            ...

     これらの関数について、詳細は、該当するマニュアルページを参照してください。

     さらに調整します。どの例外が発生したかを調べるために ieee_handler() または
     fpsetmask() のパラメータを調整するか、dbx catch コマンドの代わりの方法を
     使用します。
        stop sig FPE
     これは「catch FPE」と似た動作をします。あるいは
        stop sig FPE <subcode>
     で微調整します。<subcode> は次のいずれかです。
        FPE_INTDIV      1       # 整数ゼロ除算
        FPE_INTOVF      2       # 整数オーバーフロー
        FPE_FLTDIV      3       # 浮動小数点ゼロ除算
        FPE_FLTOVF      4       # 浮動小数点オーバーフロー
        FPE_FLTUND      5       # 浮動小数点アンダーフロー
        FPE_FLTRES      6       # 浮動小数点結果不正確
        FPE_FLTINV      7       # 無効な浮動小数点演算
        FPE_FLTSUB      8       # 添字範囲オーバー
        
     これは「help signals」でも表示されます。

     「stop」と「catch」は独立していること、「stop FPE」を使用した場合は
     「ignore FPE」も使用すべきことに注意してください。

ご使用の Fortran のドキュメンテーションの付録「Debugging」も参照してください。

-------------------------------------------------------------------------------

(A.13) dbx はどこに必要な一時ファイルを作成しますか？

    dbx はディレクトリ /tmp (または環境変数 TMPDIR が設定されている場合は
    その値) に一時ファイルをすべて保存します。「dbx」で始まり、その
    dbx セッションに固有の dbx 一時ファイルすべてです。dbx 一時ファイルは、
    dbx が終了すると削除されます。

--------------------------------------------------------------------------------

(A.14) 非常に長いリストや引数を持つコマンド実行する方法は ?

    この処理を正しく行うには、run コマンドを別のファイルに記述ておき
    次のように実行します。

        $ dbx a.out
        (dbx) stop at 100
        (dbx) source foo

    入力行の長さには、10k のハード制限があります。


--------------------------------------------------------------------------------

(B.1) MT 対応の dbx の入手先は ?

    特定の MT dbx を入手する必要はありません。MT 機能は標準 dbx の
    組み込み機能です。4.0 dbx リリースでは、MT の機能を使用するために
    別途ライセンスを入手する必要はありません。

--------------------------------------------------------------------------------

(B.2) dbx の主な MT 機能は ?

    threads コマンドを実行すると、認識されている全スレッドの一覧が、現在の
    状態、基底関数、現在の関数といった情報とともに表示されます。各スレッドの
    スタックトレースを調べることができます。
    特定のスレッドまたはすべてのスレッドを再開 (cont) できます。
    特定のスレッドを step または next することができます。
    thread コマンドはスレッド間の移動を助けます。

--------------------------------------------------------------------------------

(B.3) 特定のスレッドにスコープを限定できますか ?

    dbx は、カーソルを「現在の」または、「活動状態の」スレッドに保持します。
    どれが「現在の」スレッドなのかは、 thread コマンドで操作します。デフォルト
    のスレッドとして現在のスレッドを使用するコマンドは、where と thread -info 
    だけです。

--------------------------------------------------------------------------------

(B.4) GUI の主な MT 機能は ?

    これは、threads コマンドの GUI 型プログラムであり、「プロセス/スレッド
    インスペクタ」内のスレッドの最新リストを表示します。したがって、すべての
    スレッドのスタックを迅速かつ効率的に表示することができます。

--------------------------------------------------------------------------------

(B.5) スレッドの番号付けの規則は？

    dbx は、thr_ceate() によって返される各スレッド (thread_t 型) の ID 
    を知っています。構文は t@<番号> です。

--------------------------------------------------------------------------------

(B.6) LWP の番号付けの規則は？

    dbx は、/proc (procfs(4) のマニュアルページを参照) インタフェースによって
    返される各 LWP (lwpid_t 型) の ID を認識します。構文は l@<番号> です。

--------------------------------------------------------------------------------

(B.7) 特定のスレッド上にブレークポイントを設けることができますか ?

    可能です。通常のブレークポイントに対して、次のようにスレッドを指定します。
        stop in foo -thread t@4
    t@4 は ID 4 のスレッドです。

--------------------------------------------------------------------------------

(B.8) スレッドがブレークポイントに行き当たったとき何が起こりますか ?
      すべてのスレッドが停止しますか、あるいはブレークポイントに行き当たった
      スレッドだけが停止しますか ?

    すべてのスレッドが停止します。これは "sympathetic stop" (同情的停止) とか
    "stop the world" (世界停止) と呼ばれています。 /proc および LWP の
    観点からは、これは「同期的」デバッグです。

--------------------------------------------------------------------------------

(B.9) アプリケーションがマルチスレッドであることを dbx が知る方法は ?

    アプリケーションが -lthread 付きでリンクされている場合、dbx は
    アプリケーションがマルチスレッドであるとみなします。 

--------------------------------------------------------------------------------

(B.10) MT で気を付けるべき落とし穴は ?

    特定のスレッドを再開するときに、他のスレッドがブロックされていて再開スレッドの
    必要とするリソースを保持していると、プログラムが簡単にデッドロックに陥ります。

    libthread データ構造はユーザー空間に存在しており、異常なポインタを含むバグ
    によって破損してしまうかもしれません。このような場合には、スレッド等価に
    類似した lwps や lwp のようなコマンドを用いて LWP レベルで作業する
    ことをお勧めします。

--------------------------------------------------------------------------------

(B.11) スリープ中のスレッドの実行を強制できますか ?

    できません。将来のバージョンでは可能になるでしょう。しかし一般的に、
    MT アプリケーションをデバッグしているときは、プログラムの自然な実行
    フローに対して強制的に何かを実行するよりも、静観することをお勧めします。

--------------------------------------------------------------------------------

(B.12) ある特定のスレッドがどのスレッドを待機している (thr_join を介して)
       のか知る方法は ?
       プロセス/スレッドインスペクタ内のスレッドリストからはじめて、どの
       スレッド ID がどの thr_create() 呼び出しから来ているのか特定する方法は ?

    現在は不可能です。もっと高度なインタフェースが開発されて dbx がスレッド
    の状態を問い合わせることができるようになることを期待しています。

--------------------------------------------------------------------------------

(B.13) プロセス/スレッドインスペクタ内のスレッドリストから始めて、どの
       スレッド ID がどの起動関数から来ているのか特定する方法は ?

    これは「基底関数」として知られており、スレッドリスト (thread-list)
    に出力されます。

--------------------------------------------------------------------------------

(B.14) 既存のマルチスレッドプロセスへの接続時に、どのスレッドが活動状態に
       なりますか ?

     決まっていません。

--------------------------------------------------------------------------------

(B.15) 活動状態のスレッドが thr_create を実行するとき、どのスレッドが活動状態に
       なりますか ? (thr_create() を実行したスレッドですか、それとも thr_create
       で作成されたスレッドですか ?) (これを別の言葉で表すと、"follow_fork_mode"
       に類似した "follow_thread_mode" がありますか ? という意味になります。)

    現在のスレッドは、「作成スレッド」のままでいます。follow_fork と類比
    すると parent モードということです。
    Sun の MT モデルでは、スレッドは真の fork と同じ意味ではないこと
    に注意してください。スレッドツリーは存在せず、プロセスにおけるような親子
    関係も存在しません。簡略化された thr_join() だけしか存在しません。

--------------------------------------------------------------------------------

(B.16) 活動状態のスレッドが thr_exit を実行するとき、どのスレッド (存在する場合) 
       が活動状態になりますか ?

    dbx はダミーの「異常終了した」スレッドを活動状態にします。
    このスレッドは t@X で表されます。


#
# We don't want to insert tabs so we don't have to worry about 
# people's stty settings 
# Local Variables:
# indent-tabs-mode: nil 
# End:
#
