PDB (PTL Debugger) の使い方
===========================

1) 環境変数 PTL_DEBUG_PORT にポート番号を設定してからプログラムを起動す
   る. 

      env PTL_DEBUG_PORT=nnnn ./a.out
   
   nnnn は10進数で, デバッグに使用するポート番号である.
   ポート番号は適当に空いている番号を指定すれば良い.

   なお，nnnn の後に :wait をつけると，プログラムの実行は 2) の telnet 
   コネクションを受け付けるまで停止する．

2) デバッグプログラムと接続する

   telnet localhost nnnn  として, デバッグ対象プログラムの PDB と接続
   する. プロンプト PDB> が表示されるはず.

   注意1:  PDB は同時に複数の telnet connection は受け付けられない.
   注意2:  Authentification を全くしていないので, 注意する事

3) PDB のコマンドを telnet を通じて投入する.

4) PDB コマンド一覧

* help   
        help を表示する

* ps
* thread
        スレッドの情報を表示する

        Usage: ps [-stack|-signal|-sched] [thread-id...]

         -stack  --- スレッドスタックの情報を表示する
         -signal --- 各スレッドのシグナルマスクとペンディングシグナル
                     を表示する
         -sched  --- 各スレッドのデタッチ状態, スケジューリング情報, 
                     キャンセル状態を表示する

     <引数なしの場合の表示>

     TID Name             Arg(hex) State      Detail
      |  |                 |         |           |
      |  スレッド名      引数   待ちイベント  詳細情報
     スレッドID

     State に ! (あるいは #) がついているスレッドは 
     pthread_suspend_np() で (あるいは PDB から) サスペンドされているこ
     とを示す．

     (例)

	 TID Name             Arg(hex) State     Detail
	   2 INITIAL                 0 exit      
	   4 [I/O]                   0 sigwait    (called from io_dispatch_thread(), io.c, line 593)
	   6 [IDLE]                  0 run       
	   8 [PDB]                270f run       
	   9 noname(0x2790)          0 sleep     5.000 sec (eat(), philosopher.c, line 84)
	  10 noname(0x2790)          1 sleep     4.000 sec (think(), philosopher.c, line 76)
	  11 noname(0x2790)          2 sleep     5.000 sec (think(), philosopher.c, line 76)
	  12 noname(0x2790)          3 sleep     4.000 sec (think(), philosopher.c, line 76)
	  13 noname(0x2790)          4 sleep     9.000 sec (think(), philosopher.c, line 76)


     <-stack オプション付きの場合の表示>

     TID STK   STKSZ    BASE  SIGSTKSZ  BASE    NAME
      |   |       |       |        |       |      |
      |   |       |       |        |       |      スレッド名
      |   |       |       |        |       | 
      |   |       |       |        |    シグナルスタックのベースアドレス
      |   |       |       |        |
      |   |       |       |        シグナルスタックサイズ(固定値)
      |   |       |       |             
      |   |       |       スタックのベースアドレス(hex)
      |   |       |  
      |   |       スタックサイズ (hex)
      |   | 
      |   スタックの種類
      |   (shm--共有メモリ, redz--レッドゾーン,
      |    heap--ヒープ, init--初期スレッドのスタック)
      |
     スレッドID


     <-signal オプション付きの場合の表示>

          H I Q I T I E F K B S S P A T U S T C C T T I X X V P W I U U
          U N U L R O M P I U E Y I L E R T S O H T T O C F T R I N S S
          P T I L A T T E L S G S P R R G O T N L I O   P S A O N F R R
              T   P       L   V   E M M   P P T D N U   U Z L F C O 1 2
                                                            R   H      
     TID                                                    M           NAME
      |   \____________________________________________________________/ | 
      |                               |                                  |
      |                               |                             スレッド名
      |                               シグナル状態
      |                                (x--マスク中
      |                                 !--ペンディングシグナル)
     スレッドID


     <-sched オプション付きの場合の表示>


     TID Policy Pri Detach   CancelStat CancelType   CancelReq NAME
      |    |     |    |           |         |             |      |        
      |    |     |    |           |         |             |   スレッド名
      |    |     |    |           |         |             |             
      |    |     |    |           |         |        pthread_cancel()
      |    |     |    |           |         |        されたかどうか
      |    |     |    |           |         |
      |    |     |    |           |     キャンセルタイプ
      |    |     |    |           |     (ASYNCHRONOUS, DEFERRED)
      |    |     |    |           |
      |    |     |    |           キャンセルステート(ENABLE, DISABLE)
      |    |     |    |
      |    |     |    デタッチステート(DETACHED, JOINABLE)
      |    |     | 
      |    |    プライオリティ
      |    |   
      |  スケジューリングポリシー(FIFO, RR, OTHER)
      |
     スレッドID

     (例)

	 TID Policy Pri Detach   CancelStat CancelType   CancelReq NAME
	   2 OTHER    8 JOINABLE ENABLE     DEFERRED               INITIAL
	   4 FIFO    32 JOINABLE ENABLE     DEFERRED               [I/O]
	   6 IDLE     0 JOINABLE ENABLE     DEFERRED               [IDLE]
	   8 FIFO    32 JOINABLE ENABLE     DEFERRED               [PDB]
	   9 OTHER    8 JOINABLE ENABLE     DEFERRED               noname(0x2790)
	  10 OTHER    8 JOINABLE ENABLE     DEFERRED               noname(0x2790)
	  11 OTHER    8 JOINABLE ENABLE     DEFERRED               noname(0x2790)
	  12 OTHER    8 JOINABLE ENABLE     DEFERRED               noname(0x2790)
	  13 OTHER    8 JOINABLE ENABLE     DEFERRED               noname(0x2790)



* cond  
        Condition Variable を表示する

        Usage: cond cond-id...

* mutex 
        Mutex を表示する

        Usage: mutex

* signal    
        各シグナルのシグナル捕捉状況を表示する

        Usage: signal

* suspend   
        スレッドをサスペンド(停止)する．このサスペンドは 
	pthread_suspend_np() によるサスペンドとは独立である．

        Usage: suspend thread-id... 
               suspend all


* resume    
        スレッドをリジューム(再開)する

        Usage: resume thread-id...
               resume all

* cancel
* kill
	スレッドをキャンセルする.
	注意して用いること!

	Usage: cancel thread-id...

* broadcast 
        Condition Variable に対して broadcast する. (Mutex のロックな
        しで)

        Usage: broadcast cond-id...
               broadcast all

* descriptor

        未実装

* timer 
        インターバルタイマの状態を表示する (PTLデバッグ用)

        Usage: timer

* timeq
        PTL 内部のタイマキューの状態を表示する (PTLデバッグ用)

        Usage: timeq

* iostat
        ファイルデスクリプタの状況を表示する (PTLデバッグ用)

        Usage: iostat

* quit
        PDB を終了する. プロセスの実行は継続される. 

        Usage: quit


