|
Note: All information in this page is out-of-date. Modern operating systems have multi-threading function so PTL is no longer useful.
|
PDB (PTL Internal Debugger) |
PTL has a builtin debugger PDB. You can connect to PDB with
telnet command and examine thread related objects such as
threads, mutexes, condition variables, etc.
To invoke PDB, you have to set environment variable PTL_DEBUG_PORT to
a TCP port number before executing your program.
% env PTL_DEBUG_PORT=9999 ./philosopher
|
Then, you can connect to PDB with telnet command.Probably you want to do this in another window.
% telnet localhost 9999
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
PTL Debugger (thread 8, file descriptor 3)
Copyright (C) 1995-1999 Kota ABE
pdb>
|
If you add :wait to $PTL_DEBUG_PORT (i.e. PTL_DEBUG_PORT=9999:wait),the program does not start until the connection is established.
help |
displays the help message.
|
ps [-stack|-signal|-sched] [thread-id...] |
displays thread information.
If no option is given, display basic information.
pdb> ps
TID Name Arg(hex) State Detail
4 [I/O] 0 sigwait (io_dispatch_thread(), io.c, line 650)
6 [IDLE] 0 run
8 [PDB] 0 run
9 noname(0x1c30) e380 cond CV 0xd400 (take_forks(), philosopher.c, line 104)
10 noname(0x1c30) e390 sleep 8.000 sec (eat(), philosopher.c, line 94)
11 noname(0x1c30) e3a0 cond CV 0xd400 (take_forks(), philosopher.c, line 104)
12 noname(0x1c30) e3b0 sleep 1.000 sec (think(), philosopher.c, line 86)
13 noname(0x1c30) e3c0 sleep 8.000 sec (eat(), philosopher.c, line 94)
|
Note that the threads whose name is surrounded by [] are PTL
internal threads.
-stack option displays thread's stack
information.
pdb> ps -stack
TID STK STKSZ BASE NAME
4 heap 4000 f320 [I/O]
6 heap 4000 21320 [IDLE]
8 heap 4000 26320 [PDB]
9 heap 4000 2b320 noname(0x1c30)
10 heap 4000 30320 noname(0x1c30)
11 heap 4000 35320 noname(0x1c30)
12 heap 4000 3a320 noname(0x1c30)
13 heap 4000 3f320 noname(0x1c30)
|
-signal displays signal mask information.
pdb> ps -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 P
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 W
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 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
4 x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x [I/O]
6 x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x [IDLE]
8 x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x [PDB]
9 noname(0x1c30)
10 noname(0x1c30)
11 noname(0x1c30)
12 noname(0x1c30)
13 noname(0x1c30)
ProcLevel
|
Note: x means the signal is
masked. ! means the signal is suspended.
-sched option displays scheduling
information.
pdb> ps -sched
TID Policy Pri Detach CancelStat CancelType CancelReq NAME
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(0x1c30)
10 OTHER 8 JOINABLE ENABLE DEFERRED noname(0x1c30)
11 OTHER 8 JOINABLE ENABLE DEFERRED noname(0x1c30)
12 OTHER 8 JOINABLE ENABLE DEFERRED noname(0x1c30)
13 OTHER 8 JOINABLE ENABLE DEFERRED noname(0x1c30)
|
|
thread |
same as ps command.
|
cond |
displays condition variables.
pdb> cond
ID NAME #WAITER WAITING THREADS ID
d480 noname 0
d400 noname 1 11
d340 [BG TTY] 0
|
|
mutex |
displays mutexes.
pdb> mutex
ID PROTO CEIL BOOST NAME OWNER #WAITER WAITING THREADS ID
14460 NO 32 0 noname 0 0
14420 NO 32 0 noname 0 0
143e0 NO 32 0 [stdio_global] 0 0
143a0 NO 32 0 [pthread_first] 0 0
14360 NO 32 0 [IO] 0 0
|
|
signal |
displays signal status.
pdb> signal
SIG NAME HANDLER
1 HUP SIG_DFL
2 INT SIG_DFL
3 QUIT SIG_DFL
4 ILL SIG_DFL
5 TRAP SIG_DFL
6 IOT SIG_DFL
7 EMT SIG_DFL
8 FPE SIG_DFL
9 KILL SIG_DFL
10 BUS SIG_DFL
11 SEGV SIG_DFL
12 SYS SIG_DFL
13 PIPE SIG_DFL
14 ALRM SIG_DFL
15 TERM SIG_DFL
16 URG SIG_DFL
17 STOP SIG_DFL
18 TSTP SIG_SIGWAIT_NP
19 CONT SIG_SIGWAIT_NP
20 CHLD SIG_DFL
21 TTIN SIG_DFL
22 TTOU SIG_DFL
23 IO SIG_DFL
24 XCPU SIG_DFL
25 XFSZ SIG_DFL
26 VTALRM SIG_DFL
27 PROF SIG_DFL
28 WINCH SIG_DFL
29 INFO SIG_DFL
30 USR1 SIG_DFL
31 USR2 SIG_DFL
32 PWR SIG_DFL
|
|
suspend thread-id...
suspend all |
suspend the specified (or all) threads. Note that thread suspension from
PDB is distinct from that by pthread_suspend_np().
|
resume thread-id...
resume all |
resume the specified (or all) threads.
|
cancel thread-id... |
perform pthread_cancel() to the specified threads.
|
broadcast cond-id... |
perform pthread_cond_broadcast() to the specified condition variables.
|
dmesg |
displays PTL's internal ring queue message buffer contents. You
can use pthread_debug_pdb_np() to put messages to the buffer.
|
timeq |
displays PTL internal timeout queue.
|
iostat (since PTL-2.1) |
displays file descriptor status.
|
timer |
not implemented.
|
quit |
quit PDB. Program execution continues.
|
|
|
|