1 | @echo off
|
---|
2 | :: PDumpCtl - ProcDump control front-end
|
---|
3 | :: Dump named process/pid or run interactive
|
---|
4 | :: OK to exit to shell and update options
|
---|
5 |
|
---|
6 | :: Copyright (c) 2001, 2006 Steven Levine and Associates, Inc.
|
---|
7 | :: All rights reserved.
|
---|
8 |
|
---|
9 | rem $TLIB$: $ &(#) %n - Ver %v, %f $
|
---|
10 | rem TLIB: $ $
|
---|
11 |
|
---|
12 | :: 27 Jun 01 SHL Baseline
|
---|
13 | :: 21 Jan 04 SHL Add -f -x options
|
---|
14 | :: 14 Jun 05 SHL Add -a option
|
---|
15 | :: 05 Jul 05 SHL Update usage
|
---|
16 | :: 08 Jul 05 SHL Support dec/hex pid and quoted name
|
---|
17 | :: 09 Dec 06 SHL Add sysvm to full mode to allow .m commands
|
---|
18 |
|
---|
19 | on errormsg pause
|
---|
20 | setlocal
|
---|
21 |
|
---|
22 | :: Scan args, I=num A=value X=scratch
|
---|
23 |
|
---|
24 | set D= %+ :: Dump directory
|
---|
25 | set M=a %+ :: Auto/Interactive (a/i)
|
---|
26 | set N= %+ :: Process name
|
---|
27 | set P= %+ :: Pid
|
---|
28 | set T=n %+ :: Normal/Full/eXtended
|
---|
29 |
|
---|
30 | :: N and P mutually exclusive
|
---|
31 |
|
---|
32 | do I = 1 to %[#]
|
---|
33 | set A=%[%I]
|
---|
34 | set X=%@substr[%A,0,1]
|
---|
35 | iff "%X" eq "/" .or. "%X" eq "-" then
|
---|
36 | :: Got switch
|
---|
37 | set X=%@lower[%@substr[%A,1,1]]
|
---|
38 | iff "%X" == "h" .or. "%X" == "?" then
|
---|
39 | goto Help
|
---|
40 | elseiff "%X" == "a" then
|
---|
41 | set T=a
|
---|
42 | elseiff "%X" == "f" then
|
---|
43 | set T=f
|
---|
44 | elseiff "%X" == "i" then
|
---|
45 | set M=i
|
---|
46 | elseiff "%X" == "x" then
|
---|
47 | set T=x
|
---|
48 | else
|
---|
49 | echo Switch %X unexpected
|
---|
50 | goto Usage
|
---|
51 | endiff
|
---|
52 | else
|
---|
53 | :: Got proc/pid - detect/convert decimal to hex
|
---|
54 | set P=%A
|
---|
55 | iff '%@left[1,%P]' == '%="' then
|
---|
56 | set N=%@strip[%=",%P]
|
---|
57 | set P=
|
---|
58 | elseiff "%@left[2,%A]" == "0x" then
|
---|
59 | set P=%@substr[%P,2,100]
|
---|
60 | set X=%@convert[16,16,%P]
|
---|
61 | if "%P" != "%X" ( echo Bad PID %+ goto usage )
|
---|
62 | elseiff "%@left[2, %P]" == "0n" then
|
---|
63 | set P=%@substr[%P,2,100]
|
---|
64 | set X=%@convert[10,10,%P]
|
---|
65 | if "%P" != "%X" ( echo Bad PID %+ goto usage )
|
---|
66 | set P=%@convert[10,16,%P]
|
---|
67 | else
|
---|
68 | :: Try for hext PID
|
---|
69 | set X=%@convert[16,16,%P]
|
---|
70 | if "%P" != "%X" ( set N=%P %+ set P= )
|
---|
71 | endiff
|
---|
72 | endiff
|
---|
73 | enddo
|
---|
74 |
|
---|
75 | if %M == a if "%P %N" == " " ( echo No process/pid selected %+ goto usage )
|
---|
76 |
|
---|
77 | :: Set defaults
|
---|
78 |
|
---|
79 | echo on
|
---|
80 | pdumpusr reset
|
---|
81 | @echo off
|
---|
82 |
|
---|
83 | iff isdir c:\ then
|
---|
84 | set D=c:\
|
---|
85 | elseiff isdir c:\ then
|
---|
86 | set D=c:\
|
---|
87 | elseiff isdir c:\ then
|
---|
88 | set D=c:\
|
---|
89 | else
|
---|
90 | echo Dump directory not found - checked i:\Dumps d:\tmp\Dumps and j:\tmp\Dumps
|
---|
91 | cancel
|
---|
92 | endiff
|
---|
93 |
|
---|
94 | echo.
|
---|
95 | echo on
|
---|
96 | procdump on /l:%D
|
---|
97 | @echo off
|
---|
98 |
|
---|
99 | :: instance Instance data referenced by the process.
|
---|
100 | :: krheaps Kernel Resident Heaps
|
---|
101 | :: ksheaps Kernel Swappable Heaps
|
---|
102 | :: idt Interrupt descriptor table
|
---|
103 | :: laddr Linear address range(s)
|
---|
104 | :: mvdm MVDM instance data for process
|
---|
105 | :: paddr(all) Add physical memory
|
---|
106 | :: private Private code and data referenced by process
|
---|
107 | :: sem Semaphore information for all blocked threads in process
|
---|
108 | :: shared Shared code and data referenced by process
|
---|
109 | :: summ Summary for dumped threads
|
---|
110 | :: sysfs File System data for all processes
|
---|
111 | :: sysio IO subsystem structures (AIRQI, DIRQ, PDD eps, PDD chain)
|
---|
112 | :: sysldr Loader data for all processes
|
---|
113 | :: sysmvdm MVDM data for all VDM and the kernel resident heap
|
---|
114 | :: syspg Physical and Page Memory management records (PF, VP, PTE, PDE)
|
---|
115 | :: syssem SEM data for all blocked threads in system
|
---|
116 | :: syssumm Summary for all threads
|
---|
117 | :: systk Task Management related data for all processes
|
---|
118 | :: sysvm Virtual Memory data for all processes
|
---|
119 |
|
---|
120 | iff "%T" == "a" then
|
---|
121 | :: All physical memory
|
---|
122 | echo on
|
---|
123 | pdumpusr paddr(all)
|
---|
124 | @echo off
|
---|
125 | endiff
|
---|
126 |
|
---|
127 | iff "%T" == "f" then
|
---|
128 | :: Full
|
---|
129 | echo on
|
---|
130 | pdumpusr summ,sysfs,sysldr,private,instance,syssem,sysio
|
---|
131 | @echo off
|
---|
132 | endiff
|
---|
133 |
|
---|
134 | iff "%T" == "x" then
|
---|
135 | :: Extended
|
---|
136 | echo on
|
---|
137 | pdumpusr summ,sysfs,sysldr,private,instance,syssem,sysio
|
---|
138 | pdumpusr shared,update
|
---|
139 | @echo off
|
---|
140 | endiff
|
---|
141 |
|
---|
142 | echo on
|
---|
143 | procdump query
|
---|
144 | @echo off
|
---|
145 |
|
---|
146 | :: Check forced dump request using current settings
|
---|
147 | iff %M=a then
|
---|
148 | procdump query
|
---|
149 | iff "%P" != "" then
|
---|
150 | echo Dumping PID %P
|
---|
151 | procdump force /pid:%P
|
---|
152 | else
|
---|
153 | echo Dumping process %N
|
---|
154 | procdump force /proc:%N
|
---|
155 | endiff
|
---|
156 | procdump off
|
---|
157 | procdump query
|
---|
158 | quit
|
---|
159 | endiff
|
---|
160 |
|
---|
161 | :: Interactive
|
---|
162 |
|
---|
163 | do forever
|
---|
164 | iff "%P" != "" then
|
---|
165 | :: echo.
|
---|
166 | echo PID %P selected
|
---|
167 | echo.
|
---|
168 | elseiff "%N" != "" then
|
---|
169 | :: echo.
|
---|
170 | echo Process %N selected
|
---|
171 | echo.
|
---|
172 | endiff
|
---|
173 | inkey /k"adfhorsvq!?[Esc][Enter]" `D)ump F)ull S)hared A)ll R)eset V)iew O)ff H)elp Q)uit ? ` %%Z
|
---|
174 | echo.
|
---|
175 | iff "%Z" == "q" .or. "%Z" == "" then
|
---|
176 | leave
|
---|
177 | elseiff "%Z" == "@28" then
|
---|
178 | iterate
|
---|
179 | elseiff %Z == a then
|
---|
180 | :: All physical memory
|
---|
181 | echo on
|
---|
182 | pdumpusr reset
|
---|
183 | pdumpusr paddr(all)
|
---|
184 | pdumpusr query
|
---|
185 | @echo off
|
---|
186 | elseiff %Z == d then
|
---|
187 | :: Force dump now
|
---|
188 | iff "%P" != "" then
|
---|
189 | echo Dumping PID %P
|
---|
190 | echo on
|
---|
191 | procdump force /pid:%P
|
---|
192 | @echo off
|
---|
193 | elseiff "%N" != "" then
|
---|
194 | echo Dumping process %N
|
---|
195 | echo on
|
---|
196 | procdump force /proc:%N
|
---|
197 | @echo off
|
---|
198 | else
|
---|
199 | echo No process/pid selected
|
---|
200 | endiff
|
---|
201 | elseiff %Z == f then
|
---|
202 | :: Full
|
---|
203 | echo on
|
---|
204 | :: pdumpusr reset
|
---|
205 | pdumpusr summ,sysfs,private,instance,syssem,sysio,sysldr,sysvm,update
|
---|
206 | pdumpusr query
|
---|
207 | @echo off
|
---|
208 | elseiff %Z == o then
|
---|
209 | :: Off
|
---|
210 | echo on
|
---|
211 | procdump off
|
---|
212 | @echo off
|
---|
213 | elseiff %Z == r then
|
---|
214 | :: Reset to default
|
---|
215 | echo on
|
---|
216 | procdump reset /pid:all
|
---|
217 | procdump on /l:%D
|
---|
218 | pdumpusr reset
|
---|
219 | procdump query
|
---|
220 | @echo off
|
---|
221 | elseiff %Z == v then
|
---|
222 | :: Status
|
---|
223 | echo on
|
---|
224 | procdump query
|
---|
225 | @echo off
|
---|
226 | elseiff %Z == s then
|
---|
227 | :: Add shared
|
---|
228 | echo on
|
---|
229 | pdumpusr shared,update
|
---|
230 | pdumpusr query
|
---|
231 | @echo off
|
---|
232 | elseiff "%Z" == "!" then
|
---|
233 | :: Shell
|
---|
234 | echo.
|
---|
235 | %comspec
|
---|
236 | elseiff "%Z" == "h" .or. "%Z" == "?" then
|
---|
237 | :: Help
|
---|
238 | echo D - Force dump using current settings
|
---|
239 | echo F - Set up for full dump - adds summ,sysfs,sysldr,private,instance,syssem,sysio
|
---|
240 | echo S - Add shared code/data to current settings
|
---|
241 | echo A - Set up to dump all physical memory with paddr(all) - resets other settings
|
---|
242 | echo V - View current settings
|
---|
243 | echo O - Turn off dump facility
|
---|
244 | echo R - Reset to default settings
|
---|
245 | echo H - Display this screen
|
---|
246 | echo Q - Quit
|
---|
247 | echo ? - Display this screen
|
---|
248 | echo ! - Shell
|
---|
249 | else
|
---|
250 | pause Unexpected %Z
|
---|
251 | cancel
|
---|
252 | endiff
|
---|
253 | enddo
|
---|
254 |
|
---|
255 | :: Show exit state
|
---|
256 | echo on
|
---|
257 | procdump query
|
---|
258 | @echo off
|
---|
259 |
|
---|
260 | quit
|
---|
261 |
|
---|
262 | ::=== Usage: Report usage error ===
|
---|
263 |
|
---|
264 | :Usage
|
---|
265 | beep
|
---|
266 | echo Usage: %@lower[%0] `[-?] [-f] [-i] [-x] [procname|hex-pid|dec-pid]`
|
---|
267 | cancel
|
---|
268 |
|
---|
269 | ::=== Help: Show usage help ===
|
---|
270 |
|
---|
271 | :Help
|
---|
272 | echo.
|
---|
273 | echo Usage: %@lower[%0] `[-?] [-f] [-i] [-x] [procname|hex-pid|dec-pid]`
|
---|
274 | echo.
|
---|
275 | echo ` -? This message`
|
---|
276 | echo ` -f Full (default=normal)`
|
---|
277 | echo ` -i Interactive (default=force dump and exit)`
|
---|
278 | echo ` -x Extended, full plus shared (default=normal)`
|
---|
279 | echo.
|
---|
280 | echo ` hex-pid hex pid, optionally prefix 0x`
|
---|
281 | echo ` dec-pid decimal pid, prefix with 0n`
|
---|
282 | echo ` procname Process name, quote if name lots like number`
|
---|
283 | cancel
|
---|
284 |
|
---|
285 | :end
|
---|