日本-日本語
日本HPホーム 製品 & サービス OpenVMS製品情報
≫  お問い合わせ


OpenVMS マニュアル


 

OpenVMS ドキュメント
ライブラリ

タイトルページ
目次
まえがき
第 1 部:デバッガ概要
第 1 章:デバッガ概要
第 2 部:コマンド・インタフェース
第 2 章:デバッガの起動
第 3 章:プログラム実行の制御とモニタ
第 4 章:プログラム・データの検査と操作
第 5 章:プログラム内シンボルへのアクセス制御
第 6 章:ソース・コードの表示の制御
第 7 章:画面モード
第 3 部:DECwindows インタフェース
第 8 章:DECwindows Motifインタフェースの概要
第 9 章:デバッグ・セッションの開始と終了
第 10 章:デバッガの使用方法
第 4 部:PC クライアント・インタフェース
第 11 章:デバッガの PC クライアント/サーバ・インタフェースの概要
第 5 部:高度なトピック
第 12 章:ヒープ・アナライザの使用
第 13 章:その他の便利な機能
第 14 章:特殊なデバッグ
第 15 章:マルチプロセス・プログラムのデバッグ
第 16 章:タスキング・プログラムのデバッグ
第 6 部:付録
付録 A :定義済みのキー機能
付録 B :組み込みシンボルと論理名
付録 C :各言語に対するデバッガ・サポートの要約
付録 D :EIGHTQUEENS.C
索引
PDF
OpenVMS ホーム

HP OpenVMS
デバッガ説明書


目次 索引



シンボル %CALLER_TASK は Ada のタスクだけに使用します。これが評価されると,accept 文のエントリを呼び出したタスクのタスク ID か, %TASK 0 になります。たとえば,アクティブ・タスクが accept 文に対応する一連の文を実行していないときに %CALLER_TASK が評価されると, %TASK 0 になります。

たとえば, 例 16-2 の行 61 ( accept 文の中 ) にブレークポイントが設定されているものとします。この例では,メイン・プログラム (%TASK 1) がエントリ RENDEZVOUS を呼び出すのに応じて,タスク FATHER(%TASK 2) が accept 文を実行します。したがって,そのときに EVALUATE %CALLER_TASK コマンドを入力すれば,呼び出しタスク,つまりメイン・プログラムのタスク ID と評価されます。

DBG> EVALUATE %CALLER_TASK
%TASK 1
DBG>

AST によるエントリ呼び出しの結果がランデブのときに %CALLER_TASK を評価すると,%TASK 0 になります。呼び出し元がタスクでないからです。

16.4 タスク情報の表示

プログラム内のタスクの情報を表示するには,SHOW TASK コマンドを使用します。

SHOW TASK コマンドでは,存在している ( 終了していない ) タスクの情報が表示されます。省略時の設定では,可視タスクの情報が1行だけ表示されます。

第 16.4.1 項第 16.4.2 項 には,それぞれ,SHOW TASK コマンドによって表示される POSIX Threads タスクと Ada タスクの情報が説明されています。

16.4.1 POSIX Threads タスクのタスク情報の表示

SHOW TASK コマンドでは,プログラム内に現存しているすべてのタスクの情報が表示されます ( 例 16-3 を参照)。

例 16-3 POSIX Threadsタスクに対してSHOW TASK/ALLを実行したときの表示例
 (1)          (2)     (3)     (4)   (5)               (6)
 task id    state hold  pri substate        thread_object 
  %TASK    1 SUSP         12 Condition Wait  Initial thread 
  %TASK    2 SUSP         12 Mutex Wait      T_EXAMP\main\threads[0].field1 
  %TASK    3 SUSP         12 Delay           T_EXAMP\main\threads[1].field1 
  %TASK    4 SUSP         12 Mutex Wait      T_EXAMP\main\threads[2].field1 
* %TASK    5 RUN          12                 T_EXAMP\main\threads[3].field1 
  %TASK    6 READY        12                 T_EXAMP\main\threads[4].field1 
  %TASK    7 SUSP         12 Mutex Wait      T_EXAMP\main\threads[5].field1 
  %TASK    8 READY        12                 T_EXAMP\main\threads[6].field1 
  %TASK    9 TERM         12 Term. by alert  T_EXAMP\main\threads[7].field1 
DBG> 

次の番号は, 例 16-3 の番号に対応しています。

  1. タスク ID ( 第 16.3.3 項 を参照 )。アクティブ・タスクには左端の欄にアスタリスク (*) が付けられる。

  2. タスクの現在の状態 ( 表 16-3 を参照 )。 RUN ( RUNNING ) 状態のタスクがアクティブ・タスクである。 表 16-3 には,プログラムの実行中にどの状態に移ることができるかが示されている。

  3. タスクが SET TASK/HOLD コマンドによって保留されているかどうか。タスクの保留については 第 16.5.1 項 を参照。

  4. タスクの優先順位。

  5. タスクの現在の副次状態。副次状態はあるタスク状態を引き起こした原因を推定するのに役立つ。 表 16-4 を参照。

  6. タスク ( スレッド ) オブジェクトのデバッガのパス名,またはデバッガがタスク・オブジェクトをシンボル化できない場合はタスク・オブジェクトのアドレス。

表 16-3 一般的なタスクの状態
タスクの状態 説明
RUNNING タスクは現在プロセッサで実行中である。これがアクティブ・タスクである。この状態のタスクが移ることができるのは, READY,SUSPENDED,TERMINATED のいずれかの状態である。
READY タスクは実行適格であり,プロセッサが使用可能になるのを待っている。この状態のタスクが移ることができるのは RUNNING 状態だけである。
SUSPENDED タスクは中断している。つまり,プロセッサが使用できるのを待っているのではなく,あるイベントを待っている。たとえば,タスクは作成されてから起動されるまで中断状態に留まる。この状態のタスクが移ることができるのは,READY 状態または TERMINATED 状態だけである。
TERMINATED タスクは終了している。この状態のタスクは,ほかの状態に移ることはできない。

表 16-4 POSIX Threadsタスクの副次状態
タスクの副次状態 説明
Condition Wait タスクは POSIX Threads の条件変数を待っている。
Delay タスクは POSIX Threads 遅延への呼び出しで待っている。
Mutex Wait タスクは POSIX Threads ミューテクスを待っている。
Not yet started タスクはまだその起動ルーチンを実行していない。
Term. by alert タスクは警告処理により打ち切られた。
Term. by exc タスクは例外により打ち切られた。
Timed Cond Wait タスクは時限 POSIX Threads 条件変数を待っている。

SHOW TASK/FULL コマンドでは,選択した各タスクについての詳細情報が表示されます。 例 16-4 に, POSIX Threads タスクの例でこのコマンドを実行した場合の出力を示します。

例 16-4 POSIX Threadsタスクに対してSHOW TASK/FULLを実行したときの表示例
(1) task id    state hold  pri substate        thread_object 
 %TASK    4 SUSP         12 Delay           T_EXAMP\main\threads[1].field1 
(2)        Alert is pending 
          Alerts are deferred 
 
(3)        Next pc:           SHARE$CMA$RTL+46136 
          Start routine:     T_EXAMP\thread_action 
(4)        Scheduling policy: throughput 
 
(5)        Stack storage: 
          Bytes in use:          1288   (6) Base:    00334C00 
          Bytes available:      40185        SP:      003346F8 
          Reserved Bytes:       10752        Top:     00329A00 
          Guard Bytes:           4095 
 
(7)        Thread control block: 
          Size:                   293        Address: 00311B78 
 
(8)    Total storage:          56613 
DBG> 

次の番号は, 例 16-4 の番号に対応しています。

  1. タスク情報の種別を示す。

  2. なんらかの異常についての掲示板型の情報。

  3. 次に実行される箇所を示すPC値と起動ルーチン。

  4. タスク・スケジューリングの方針。

  5. スタック記憶域の情報。

    • "Bytes in use:" スタックに現在割り当てられているバイト数。

    • "Bytes available:"未使用空間のバイト数。

    • "Reserved bytes:" スタック・オーバフロー処理のために割り当てられている記憶域。

    • "Guard bytes: "スタックの保護領域つまり書き込み禁止領域のサイズ。

  6. タスク・スタックの上限アドレスと下限アドレス。

  7. タスク ( スレッド ) 制御ブロック情報。タスク値はタスク制御ブロックの 16 進表記アドレス。

  8. タスクが使用する記憶域の合計。タスク制御ブロック・サイズ,予約バイト数,上部保護領域サイズ,記憶域サイズを合計したもの。

図 16-1 にタスク・スタックを示します。

図 16-1 タスク・スタック図


SHOW TASK/STATISTICS コマンドでは,プログラム内のすべてのタスクについての統計情報が報告されます。 例 16-5 には, POSIX Threads タスクのプログラム例に対して SHOW TASK/STATISTICS/FULL コマンドを実行したときの出力が示されています。この情報により,プログラムの性能を測定できます。スケジューリング ( コンテキスト・スイッチとも呼ぶ ) の合計回数が多いほど,タスキング・オーバヘッドは大きくなります。

例 16-5 POSIX Threadsタスクに対してSHOW TASK/STAT/FULLを実行したときの表示例 (VAX システムの例)
task statistics 
    Total context switches:              0 
    Number of existing threads:          0 
    Total threads created:               0 
DBG> 



16.4.2 Adaタスクのタスク情報の表示

SHOW TASK/ALLコマンドでは,プログラム内に現存しているすべてのタスクの情報,つまりタスク自体が作成されてからその親がまだ終了していないすべてのタスクの情報が表示されます( 例 16-6 を参照)。

例 16-6 Adaタスクに対してSHOW TASK/ALLを実行したときの表示例
 (1)       (2)   (3)    (4)       (5)            (6)
 task id pri hold state   substate     task object 
* %TASK 1  7       RUN                SHARE$ADARTL+130428 
  %TASK 2  7  HOLD SUSP  Accept       TASK_EXAMPLE.MOTHER+4 
  %TASK 4  7       SUSP  Entry call   TASK_EXAMPLE.FATHER_TYPE$TASK_BODY.CHILD+4 
  %TASK 3  6       READY              TASK_EXAMPLE.MOTHER) 
DBG> 

次の番号は, 例 16-6 の番号に対応しています。

  1. タスク ID ( 第 16.3.3 項 を参照 )。 アクティブ・タスクには左端の欄にアスタリスク (*) が付く。

  2. タスク優先順位。Ada の優先順位は 0 〜 15。
    VAX プロセッサで作成されるタスクは省略時の設定である優先順位 7 が割り当てられる。ただし,それ以外の優先順位がプラグマ PRIORITY で指定されている場合は,その優先順位が割り当てられる。
    Alpha プロセッサで作成されるタスクは,タイム・スライス機能が使用不能ならば,省略時の設定である優先順位 7 が割り当てられる。タイム・スライス機能が使用可能ならば,プラグマ PRIORITY が指定されていないかぎり,適当な中間の値が優先順位として割り当てられる。

  3. タスクが SET TASK/HOLD コマンドによって保留中かどうかを示す。タスクの保留については, 第 16.5.1 項 を参照。タスクの保留には,プログラムの以降の実行が許可されていれば,タスクの状態遷移の制限が伴う。

  4. タスクの現在の状態 ( 表 16-3 を参照 )。 RUN ( RUNNING ) 状態のタスクがアクティブ・タスク。 表 16-3 には,プログラムの実行中に移る可能性のある状態が示されている。

  5. タスクの現在の副次状態。副次状態は,あるタスク状態を引き起こした原因を推定するのに役立つ。 表 16-5 を参照。

  6. タスク・オブジェクトのデバッガのパス名,またはデバッガがタスク・オブジェクトをシンボル化できない場合はタスク・オブジェクトのアドレス。

表 16-5 Adaタスクの副次状態
タスクの副次状態 説明
Abnormal タスクは強制終了された。
Accept タスクはselect文の外のaccept文で待っている。
Activating タスクはその宣言部分を作成中である。
Activating tasks タスクは自分が作成した各タスクが活動を終了するのを待っている。
Completed [abn] タスクは abort 文のために打ち切られたが,まだ終了していない。Ada でいう打ち切られたタスクとは,その end 文で各依存タスクを待っているタスクである。それらの依存タスクが終了すると,タスクの状態は Terminated に変わる。
Completed [exc] タスクは処理されない例外 1 のために打ち切られたが,まだ終了していない。 Ada でいう打ち切られたタスクとは,その end 文で各依存タスクを待っているタスクである。それらの依存タスクが終了すると,タスクの状態は Terminated に変わる。
Completed タスクは打ち切られている。 abort 文は実行されず,処理されない例外 1 は起こっていない。
Delay タスクは delay 文で待っている。
Dependents タスクは各依存タスクの終了を待っている。
Dependents [exc] タスクは処理されない例外 1 の通知を依存タスクが許すのを待っている。
Entry call タスクはそのエントリ呼び出しが受け付けられるのを待っている。
Invalid state Adaの実行時ライブラリにエラーがある。
I/OまたはAST タスクは入出力 (I/O) の終了かなんらかの AST を待っている。
Not yet activated タスクは,自分を作成したタスクによって起動されるのを待っている。
Select or delay タスクは遅延という代替方法が可能な select 文で待っている。
Select or terminate タスクは終了という代替方法が可能な select 文で待っている。
Select タスクはno else,遅延,終了のいずれも不可能な select 文で待っている。
Shared resource タスクは内部共用リソースを待っている。
Terminated [abn] タスクは abort 文により終了した。
Terminated [exc] タスクは処理されない例外 1 により終了した。
Terminated タスクは正常終了した。
Timed entry call タスクは時限エントリ呼び出しをして待っている。

1処理されない例外とは,現在のフレーム内にそのためのハンドラがない例外,またはハンドラがあって raise 文を実行しその例外を外部有効範囲に通知する例外のことです。

図 16-1 はタスク・スタックを示します。

SHOW TASK/FULL コマンドでは,選択した各タスクについての詳細情報が表示されます。 例 16-7 には,Ada タスク例に対してこのコマンドを実行したときの出力が示されています。

例 16-7 ADAタスクに対してSHOW TASK/FULLを実行したときの表示例
(1)  task id     pri hold state   substate          task object 
  * %TASK 2      7       RUN                    TASK_EXAMPLE.MOTHER+4 
 
(2)       Waiting entry callers: 
           Waiters for entry BOGUS: 
               %TASK 4, type: CHILD 
 
(3)      Task type:      FATHER_TYPE 
        Created at PC:  TASK_EXAMPLE.%LINE 14+22 
        Parent task:    %TASK 1 
        Start PC:       TASK_EXAMPLE.FATHER_TYPE$TASK_BODY 
(4)      Task control block:          (5) Stack storage (bytes): 
          Task value:   490816            RESERVED_BYTES:     10640 
          Entries:      3                 TOP_GUARD_SIZE:      5120 
          Size:         1488              STORAGE_SIZE:       30720 
(6)      Stack addresses:                  Bytes in use:         456 
          Top address:  001EB600 
          Base address: 001F2DFC       (7) Total storage:      47968 
DBG> 

次の番号は, 例 16-7 の番号に対応しています。

  1. タスク情報の種別を示す。

  2. ランデブ情報。呼び出しタスクの場合は,そのタスクが登録されているキューの各エントリが一覧表示される。呼び出されるタスクの場合は,実行されるランデブの種類が表示されるほか,そのタスクを待つキューのどれかのエントリに現在登録されている呼び出しタスクが一覧表示される。

  3. タスクのコンテキスト情報。

  4. タスク制御ブロック情報。「Task value」の右の 16 進数は,タスク制御ブロックのアドレスである。

  5. スタック記憶域の情報。

    • RESERVED_BYTES は,Ada の実行時ライブラリによってスタック・オーバフロー処理のために割り当てられた記憶域サイズである。

    • TOP_GUARD_SIZE は,タスク実行中の記憶域オーバフローを防ぐために用意された記憶保護領域ページのサイズである。
      VAX システムでは,保護領域ページとして割り当てるバイト数は, Ada プラグマの TASK_STORAGEとMAIN_STORAGE に指定できる。デバッガにより表示される値は,割り当てられたバイト数である。プラグマの値は,ページ数が整数になるように,必要に応じて切り上げられる。これらのプラグマと上部記憶保護領域についての詳しい説明は, Ada のマニュアルを参照。
      Alpha システムでは,保護領域ページとして割り当てるバイト数は, Ada プラグマの TASK_STORAGE に指定できる。デバッガにより表示される値は,割り当てられたバイト数である。プラグマの値は,ページ数が整数になるように,必要に応じて切り上げられる。これらのプラグマと上部記憶保護領域についての詳しい説明は, Ada のマニュアルを参照。

    • STORAGE_SIZE は,タスクの起動用に割り当てられた記憶域のサイズである。
      VAX システムでは,割り当てるバイト数は,T'STORAGE_SIZE 表現句か Ada プラグマの MAIN_STORAGE に指定する。デバッガにより表示される値は,割り当てられたバイト数である。指定した値は,ページ数が整数になるように,必要に応じて切上げられる。この表現句とプラグマおよびタスク起動用 ( 作業用 ) 記憶域についての詳しい説明は,Adaのマニュアルを参照。
      AXP システムでは,割り当てるバイト数は,T'STORAGE_SIZE 表現句で指定する。デバッガにより表示される値は,割り当てられたバイト数である。指定した値は,ページ数が整数になるように,必要に応じて切上げられる。この表現句とプラグマおよびタスク起動用 ( 作業用 ) 記憶域についての詳しい説明は,Ada のマニュアルを参照。

    • "Bytes in use:" は,スタックに現在割り当てられているバイト数である。

  6. タスク・スタックのスタック・アドレス。

  7. タスクが使用する記憶域の合計。タスク制御ブロックサイズ,予約領域バイト数,上部保護領域サイズ,および記憶域サイズの合計である。

SHOW TASK/STATISTICS コマンドでは,プログラム内のすべてのタスクについての統計情報が報告されます。 例 16-8 は, VAX プロセッサで Ada タスキング・プログラム例に対して SHOW TASK/STATISTICS/FULL コマンドを実行したときの出力です。この情報により,プログラムの性能を測定できます。スケジューリング ( コンテキスト・スイッチとも呼ぶ ) の総数が多いほど,タスキング・オーバヘッドは大きくなります。

例 16-8 Adaタスクに対してSHOW TASK/STATISTICS/FULLを実行したときの表示例 ( VAX プロセッサの例)
task statistics 
    Entry calls       = 4       Accepts = 1     Selects = 2 
    Tasks activated   = 3       Tasks terminated   = 0 
    ASTs delivered    = 4       Hibernations       = 0 
    Total schedulings = 15 
        Due to readying a higher priority task = 1 
        Due to task activations                = 3 
        Due to suspended entry calls           = 4 
        Due to suspended accepts               = 1 
        Due to suspended selects               = 2 
        Due to waiting for a DELAY             = 0 
        Due to scope exit awaiting dependents  = 0 
        Due to exception awaiting dependents   = 0 
        Due to waiting for I/O to complete     = 0 
        Due to delivery of an AST              = 4 
        Due to task terminations               = 0 
        Due to shared resource lock contention = 0 
DBG> 


目次 索引

© 2012 Hewlett-Packard Development Company, L.P.