62 </table> |
62 </table> |
63 <h3>Methods</h3> |
63 <h3>Methods</h3> |
64 <table> |
64 <table> |
65 <tr> |
65 <tr> |
66 <td><a href="#DebugBase.__init__">DebugBase</a></td> |
66 <td><a href="#DebugBase.__init__">DebugBase</a></td> |
67 <td>Constructor</td> |
67 <td>Constructor</td> |
68 </tr><tr> |
68 </tr><tr> |
69 <td><a href="#DebugBase.__do_clear">__do_clear</a></td> |
69 <td><a href="#DebugBase.__do_clear">__do_clear</a></td> |
70 <td>Private method called to clear a temporary breakpoint.</td> |
70 <td>Private method called to clear a temporary breakpoint.</td> |
71 </tr><tr> |
71 </tr><tr> |
72 <td><a href="#DebugBase.__do_clearWatch">__do_clearWatch</a></td> |
72 <td><a href="#DebugBase.__do_clearWatch">__do_clearWatch</a></td> |
73 <td>Private method called to clear a temporary watch expression.</td> |
73 <td>Private method called to clear a temporary watch expression.</td> |
74 </tr><tr> |
74 </tr><tr> |
75 <td><a href="#DebugBase.__effective">__effective</a></td> |
75 <td><a href="#DebugBase.__effective">__effective</a></td> |
76 <td>Private method to determine, if a watch expression is effective.</td> |
76 <td>Private method to determine, if a watch expression is effective.</td> |
77 </tr><tr> |
77 </tr><tr> |
78 <td><a href="#DebugBase.__extract_stack">__extract_stack</a></td> |
78 <td><a href="#DebugBase.__extract_stack">__extract_stack</a></td> |
79 <td>Private member to return a list of stack frames.</td> |
79 <td>Private member to return a list of stack frames.</td> |
80 </tr><tr> |
80 </tr><tr> |
81 <td><a href="#DebugBase.__skip_it">__skip_it</a></td> |
81 <td><a href="#DebugBase.__skip_it">__skip_it</a></td> |
82 <td>Private method to filter out debugger files.</td> |
82 <td>Private method to filter out debugger files.</td> |
83 </tr><tr> |
83 </tr><tr> |
84 <td><a href="#DebugBase.break_anywhere">break_anywhere</a></td> |
84 <td><a href="#DebugBase.break_anywhere">break_anywhere</a></td> |
85 <td>Reimplemented from bdb.py to do some special things.</td> |
85 <td>Reimplemented from bdb.py to do some special things.</td> |
86 </tr><tr> |
86 </tr><tr> |
87 <td><a href="#DebugBase.break_here">break_here</a></td> |
87 <td><a href="#DebugBase.break_here">break_here</a></td> |
88 <td>Reimplemented from bdb.py to fix the filename from the frame.</td> |
88 <td>Reimplemented from bdb.py to fix the filename from the frame.</td> |
89 </tr><tr> |
89 </tr><tr> |
90 <td><a href="#DebugBase.clear_watch">clear_watch</a></td> |
90 <td><a href="#DebugBase.clear_watch">clear_watch</a></td> |
91 <td>Public method to clear a watch expression.</td> |
91 <td>Public method to clear a watch expression.</td> |
92 </tr><tr> |
92 </tr><tr> |
93 <td><a href="#DebugBase.dispatch_exception">dispatch_exception</a></td> |
93 <td><a href="#DebugBase.dispatch_exception">dispatch_exception</a></td> |
94 <td>Reimplemented from bdb.py to always call user_exception.</td> |
94 <td>Reimplemented from bdb.py to always call user_exception.</td> |
95 </tr><tr> |
95 </tr><tr> |
96 <td><a href="#DebugBase.dispatch_line">dispatch_line</a></td> |
96 <td><a href="#DebugBase.dispatch_line">dispatch_line</a></td> |
97 <td>Reimplemented from bdb.py to do some special things.</td> |
97 <td>Reimplemented from bdb.py to do some special things.</td> |
98 </tr><tr> |
98 </tr><tr> |
99 <td><a href="#DebugBase.dispatch_return">dispatch_return</a></td> |
99 <td><a href="#DebugBase.dispatch_return">dispatch_return</a></td> |
100 <td>Reimplemented from bdb.py to handle passive mode cleanly.</td> |
100 <td>Reimplemented from bdb.py to handle passive mode cleanly.</td> |
101 </tr><tr> |
101 </tr><tr> |
102 <td><a href="#DebugBase.fix_frame_filename">fix_frame_filename</a></td> |
102 <td><a href="#DebugBase.fix_frame_filename">fix_frame_filename</a></td> |
103 <td>Public method used to fixup the filename for a given frame.</td> |
103 <td>Public method used to fixup the filename for a given frame.</td> |
104 </tr><tr> |
104 </tr><tr> |
105 <td><a href="#DebugBase.getCurrentFrame">getCurrentFrame</a></td> |
105 <td><a href="#DebugBase.getCurrentFrame">getCurrentFrame</a></td> |
106 <td>Public method to return the current frame.</td> |
106 <td>Public method to return the current frame.</td> |
107 </tr><tr> |
107 </tr><tr> |
108 <td><a href="#DebugBase.getEvent">getEvent</a></td> |
108 <td><a href="#DebugBase.getEvent">getEvent</a></td> |
109 <td>Public method to return the last debugger event.</td> |
109 <td>Public method to return the last debugger event.</td> |
110 </tr><tr> |
110 </tr><tr> |
111 <td><a href="#DebugBase.getStack">getStack</a></td> |
111 <td><a href="#DebugBase.getStack">getStack</a></td> |
112 <td>Public method to get the stack.</td> |
112 <td>Public method to get the stack.</td> |
113 </tr><tr> |
113 </tr><tr> |
114 <td><a href="#DebugBase.get_break">get_break</a></td> |
114 <td><a href="#DebugBase.get_break">get_break</a></td> |
115 <td>Reimplemented from bdb.py to get the first breakpoint of a particular line.</td> |
115 <td>Reimplemented from bdb.py to get the first breakpoint of a particular line.</td> |
116 </tr><tr> |
116 </tr><tr> |
117 <td><a href="#DebugBase.get_watch">get_watch</a></td> |
117 <td><a href="#DebugBase.get_watch">get_watch</a></td> |
118 <td>Public method to get a watch expression.</td> |
118 <td>Public method to get a watch expression.</td> |
119 </tr><tr> |
119 </tr><tr> |
120 <td><a href="#DebugBase.go">go</a></td> |
120 <td><a href="#DebugBase.go">go</a></td> |
121 <td>Public method to resume the thread.</td> |
121 <td>Public method to resume the thread.</td> |
122 </tr><tr> |
122 </tr><tr> |
123 <td><a href="#DebugBase.isBroken">isBroken</a></td> |
123 <td><a href="#DebugBase.isBroken">isBroken</a></td> |
124 <td>Public method to return the broken state of the debugger.</td> |
124 <td>Public method to return the broken state of the debugger.</td> |
125 </tr><tr> |
125 </tr><tr> |
126 <td><a href="#DebugBase.profile">profile</a></td> |
126 <td><a href="#DebugBase.profile">profile</a></td> |
127 <td>Public method used to trace some stuff independant of the debugger trace function.</td> |
127 <td>Public method used to trace some stuff independant of the debugger trace function.</td> |
128 </tr><tr> |
128 </tr><tr> |
129 <td><a href="#DebugBase.setRecursionDepth">setRecursionDepth</a></td> |
129 <td><a href="#DebugBase.setRecursionDepth">setRecursionDepth</a></td> |
130 <td>Public method to determine the current recursion depth.</td> |
130 <td>Public method to determine the current recursion depth.</td> |
131 </tr><tr> |
131 </tr><tr> |
132 <td><a href="#DebugBase.set_continue">set_continue</a></td> |
132 <td><a href="#DebugBase.set_continue">set_continue</a></td> |
133 <td>Reimplemented from bdb.py to always get informed of exceptions.</td> |
133 <td>Reimplemented from bdb.py to always get informed of exceptions.</td> |
134 </tr><tr> |
134 </tr><tr> |
135 <td><a href="#DebugBase.set_quit">set_quit</a></td> |
135 <td><a href="#DebugBase.set_quit">set_quit</a></td> |
136 <td>Public method to quit.</td> |
136 <td>Public method to quit.</td> |
137 </tr><tr> |
137 </tr><tr> |
138 <td><a href="#DebugBase.set_trace">set_trace</a></td> |
138 <td><a href="#DebugBase.set_trace">set_trace</a></td> |
139 <td>Overridden method of bdb.py to do some special setup.</td> |
139 <td>Overridden method of bdb.py to do some special setup.</td> |
140 </tr><tr> |
140 </tr><tr> |
141 <td><a href="#DebugBase.set_watch">set_watch</a></td> |
141 <td><a href="#DebugBase.set_watch">set_watch</a></td> |
142 <td>Public method to set a watch expression.</td> |
142 <td>Public method to set a watch expression.</td> |
143 </tr><tr> |
143 </tr><tr> |
144 <td><a href="#DebugBase.step">step</a></td> |
144 <td><a href="#DebugBase.step">step</a></td> |
145 <td>Public method to perform a step operation in this thread.</td> |
145 <td>Public method to perform a step operation in this thread.</td> |
146 </tr><tr> |
146 </tr><tr> |
147 <td><a href="#DebugBase.stepOut">stepOut</a></td> |
147 <td><a href="#DebugBase.stepOut">stepOut</a></td> |
148 <td>Public method to perform a step out of the current call.</td> |
148 <td>Public method to perform a step out of the current call.</td> |
149 </tr><tr> |
149 </tr><tr> |
150 <td><a href="#DebugBase.stop_here">stop_here</a></td> |
150 <td><a href="#DebugBase.stop_here">stop_here</a></td> |
151 <td>Reimplemented to filter out debugger files.</td> |
151 <td>Reimplemented to filter out debugger files.</td> |
152 </tr><tr> |
152 </tr><tr> |
153 <td><a href="#DebugBase.trace_dispatch">trace_dispatch</a></td> |
153 <td><a href="#DebugBase.trace_dispatch">trace_dispatch</a></td> |
154 <td>Reimplemented from bdb.py to do some special things.</td> |
154 <td>Reimplemented from bdb.py to do some special things.</td> |
155 </tr><tr> |
155 </tr><tr> |
156 <td><a href="#DebugBase.user_exception">user_exception</a></td> |
156 <td><a href="#DebugBase.user_exception">user_exception</a></td> |
157 <td>Reimplemented to report an exception to the debug server.</td> |
157 <td>Reimplemented to report an exception to the debug server.</td> |
158 </tr><tr> |
158 </tr><tr> |
159 <td><a href="#DebugBase.user_line">user_line</a></td> |
159 <td><a href="#DebugBase.user_line">user_line</a></td> |
160 <td>Reimplemented to handle the program about to execute a particular line.</td> |
160 <td>Reimplemented to handle the program about to execute a particular line.</td> |
161 </tr><tr> |
161 </tr><tr> |
162 <td><a href="#DebugBase.user_return">user_return</a></td> |
162 <td><a href="#DebugBase.user_return">user_return</a></td> |
163 <td>Reimplemented to report program termination to the debug server.</td> |
163 <td>Reimplemented to report program termination to the debug server.</td> |
164 </tr> |
164 </tr> |
165 </table> |
165 </table> |
166 <a NAME="DebugBase.__init__" ID="DebugBase.__init__"></a> |
166 <a NAME="DebugBase.__init__" ID="DebugBase.__init__"></a> |
167 <h4>DebugBase (Constructor)</h4> |
167 <h4>DebugBase (Constructor)</h4> |
168 <b>DebugBase</b>(<i>dbgClient</i>) |
168 <b>DebugBase</b>(<i>dbgClient</i>) |
169 <p> |
169 <p> |
170 Constructor |
170 Constructor |
171 </p><dl> |
171 </p><dl> |
172 <dt><i>dbgClient</i></dt> |
172 <dt><i>dbgClient</i></dt> |
173 <dd> |
173 <dd> |
174 the owning client |
174 the owning client |
175 </dd> |
175 </dd> |
176 </dl><a NAME="DebugBase.__do_clear" ID="DebugBase.__do_clear"></a> |
176 </dl><a NAME="DebugBase.__do_clear" ID="DebugBase.__do_clear"></a> |
177 <h4>DebugBase.__do_clear</h4> |
177 <h4>DebugBase.__do_clear</h4> |
178 <b>__do_clear</b>(<i>filename, lineno</i>) |
178 <b>__do_clear</b>(<i>filename, lineno</i>) |
179 <p> |
179 <p> |
180 Private method called to clear a temporary breakpoint. |
180 Private method called to clear a temporary breakpoint. |
181 </p><dl> |
181 </p><dl> |
182 <dt><i>filename</i></dt> |
182 <dt><i>filename</i></dt> |
183 <dd> |
183 <dd> |
184 name of the file the bp belongs to |
184 name of the file the bp belongs to |
185 </dd><dt><i>lineno</i></dt> |
185 </dd><dt><i>lineno</i></dt> |
186 <dd> |
186 <dd> |
187 linenumber of the bp |
187 linenumber of the bp |
188 </dd> |
188 </dd> |
189 </dl><a NAME="DebugBase.__do_clearWatch" ID="DebugBase.__do_clearWatch"></a> |
189 </dl><a NAME="DebugBase.__do_clearWatch" ID="DebugBase.__do_clearWatch"></a> |
190 <h4>DebugBase.__do_clearWatch</h4> |
190 <h4>DebugBase.__do_clearWatch</h4> |
191 <b>__do_clearWatch</b>(<i>cond</i>) |
191 <b>__do_clearWatch</b>(<i>cond</i>) |
192 <p> |
192 <p> |
193 Private method called to clear a temporary watch expression. |
193 Private method called to clear a temporary watch expression. |
194 </p><dl> |
194 </p><dl> |
195 <dt><i>cond</i></dt> |
195 <dt><i>cond</i></dt> |
196 <dd> |
196 <dd> |
197 expression of the watch expression to be cleared (string) |
197 expression of the watch expression to be cleared (string) |
198 </dd> |
198 </dd> |
199 </dl><a NAME="DebugBase.__effective" ID="DebugBase.__effective"></a> |
199 </dl><a NAME="DebugBase.__effective" ID="DebugBase.__effective"></a> |
200 <h4>DebugBase.__effective</h4> |
200 <h4>DebugBase.__effective</h4> |
201 <b>__effective</b>(<i>frame</i>) |
201 <b>__effective</b>(<i>frame</i>) |
202 <p> |
202 <p> |
203 Private method to determine, if a watch expression is effective. |
203 Private method to determine, if a watch expression is effective. |
204 </p><dl> |
204 </p><dl> |
205 <dt><i>frame</i></dt> |
205 <dt><i>frame</i></dt> |
206 <dd> |
206 <dd> |
207 the current execution frame |
207 the current execution frame |
208 </dd> |
208 </dd> |
209 </dl><dl> |
209 </dl><dl> |
210 <dt>Returns:</dt> |
210 <dt>Returns:</dt> |
211 <dd> |
211 <dd> |
212 tuple of watch expression and a flag to indicate, that a temporary |
212 tuple of watch expression and a flag to indicate, that a temporary |
213 watch expression may be deleted (bdb.Breakpoint, boolean) |
213 watch expression may be deleted (bdb.Breakpoint, boolean) |
214 </dd> |
214 </dd> |
215 </dl><a NAME="DebugBase.__extract_stack" ID="DebugBase.__extract_stack"></a> |
215 </dl><a NAME="DebugBase.__extract_stack" ID="DebugBase.__extract_stack"></a> |
216 <h4>DebugBase.__extract_stack</h4> |
216 <h4>DebugBase.__extract_stack</h4> |
217 <b>__extract_stack</b>(<i>exctb</i>) |
217 <b>__extract_stack</b>(<i>exctb</i>) |
218 <p> |
218 <p> |
219 Private member to return a list of stack frames. |
219 Private member to return a list of stack frames. |
220 </p><dl> |
220 </p><dl> |
221 <dt><i>exctb</i></dt> |
221 <dt><i>exctb</i></dt> |
222 <dd> |
222 <dd> |
223 exception traceback |
223 exception traceback |
224 </dd> |
224 </dd> |
225 </dl><dl> |
225 </dl><dl> |
226 <dt>Returns:</dt> |
226 <dt>Returns:</dt> |
227 <dd> |
227 <dd> |
228 list of stack frames |
228 list of stack frames |
229 </dd> |
229 </dd> |
230 </dl><a NAME="DebugBase.__skip_it" ID="DebugBase.__skip_it"></a> |
230 </dl><a NAME="DebugBase.__skip_it" ID="DebugBase.__skip_it"></a> |
231 <h4>DebugBase.__skip_it</h4> |
231 <h4>DebugBase.__skip_it</h4> |
232 <b>__skip_it</b>(<i>frame</i>) |
232 <b>__skip_it</b>(<i>frame</i>) |
233 <p> |
233 <p> |
234 Private method to filter out debugger files. |
234 Private method to filter out debugger files. |
235 </p><p> |
235 </p><p> |
236 Tracing is turned off for files that are part of the |
236 Tracing is turned off for files that are part of the |
237 debugger that are called from the application being debugged. |
237 debugger that are called from the application being debugged. |
238 </p><dl> |
238 </p><dl> |
239 <dt><i>frame</i></dt> |
239 <dt><i>frame</i></dt> |
240 <dd> |
240 <dd> |
241 the frame object |
241 the frame object |
242 </dd> |
242 </dd> |
243 </dl><dl> |
243 </dl><dl> |
244 <dt>Returns:</dt> |
244 <dt>Returns:</dt> |
245 <dd> |
245 <dd> |
246 flag indicating whether the debugger should skip this frame |
246 flag indicating whether the debugger should skip this frame |
247 </dd> |
247 </dd> |
248 </dl><a NAME="DebugBase.break_anywhere" ID="DebugBase.break_anywhere"></a> |
248 </dl><a NAME="DebugBase.break_anywhere" ID="DebugBase.break_anywhere"></a> |
249 <h4>DebugBase.break_anywhere</h4> |
249 <h4>DebugBase.break_anywhere</h4> |
250 <b>break_anywhere</b>(<i>frame</i>) |
250 <b>break_anywhere</b>(<i>frame</i>) |
251 <p> |
251 <p> |
252 Reimplemented from bdb.py to do some special things. |
252 Reimplemented from bdb.py to do some special things. |
253 </p><p> |
253 </p><p> |
254 These speciality is to fix the filename from the frame |
254 These speciality is to fix the filename from the frame |
255 (see fix_frame_filename for more info). |
255 (see fix_frame_filename for more info). |
256 </p><dl> |
256 </p><dl> |
257 <dt><i>frame</i></dt> |
257 <dt><i>frame</i></dt> |
258 <dd> |
258 <dd> |
259 the frame object |
259 the frame object |
260 </dd> |
260 </dd> |
261 </dl><dl> |
261 </dl><dl> |
262 <dt>Returns:</dt> |
262 <dt>Returns:</dt> |
263 <dd> |
263 <dd> |
264 flag indicating the break status (boolean) |
264 flag indicating the break status (boolean) |
265 </dd> |
265 </dd> |
266 </dl><a NAME="DebugBase.break_here" ID="DebugBase.break_here"></a> |
266 </dl><a NAME="DebugBase.break_here" ID="DebugBase.break_here"></a> |
267 <h4>DebugBase.break_here</h4> |
267 <h4>DebugBase.break_here</h4> |
268 <b>break_here</b>(<i>frame</i>) |
268 <b>break_here</b>(<i>frame</i>) |
269 <p> |
269 <p> |
270 Reimplemented from bdb.py to fix the filename from the frame. |
270 Reimplemented from bdb.py to fix the filename from the frame. |
271 </p><p> |
271 </p><p> |
272 See fix_frame_filename for more info. |
272 See fix_frame_filename for more info. |
273 </p><dl> |
273 </p><dl> |
274 <dt><i>frame</i></dt> |
274 <dt><i>frame</i></dt> |
275 <dd> |
275 <dd> |
276 the frame object |
276 the frame object |
277 </dd> |
277 </dd> |
278 </dl><dl> |
278 </dl><dl> |
279 <dt>Returns:</dt> |
279 <dt>Returns:</dt> |
280 <dd> |
280 <dd> |
281 flag indicating the break status (boolean) |
281 flag indicating the break status (boolean) |
282 </dd> |
282 </dd> |
283 </dl><a NAME="DebugBase.clear_watch" ID="DebugBase.clear_watch"></a> |
283 </dl><a NAME="DebugBase.clear_watch" ID="DebugBase.clear_watch"></a> |
284 <h4>DebugBase.clear_watch</h4> |
284 <h4>DebugBase.clear_watch</h4> |
285 <b>clear_watch</b>(<i>cond</i>) |
285 <b>clear_watch</b>(<i>cond</i>) |
286 <p> |
286 <p> |
287 Public method to clear a watch expression. |
287 Public method to clear a watch expression. |
288 </p><dl> |
288 </p><dl> |
289 <dt><i>cond</i></dt> |
289 <dt><i>cond</i></dt> |
290 <dd> |
290 <dd> |
291 expression of the watch expression to be cleared (string) |
291 expression of the watch expression to be cleared (string) |
292 </dd> |
292 </dd> |
293 </dl><a NAME="DebugBase.dispatch_exception" ID="DebugBase.dispatch_exception"></a> |
293 </dl><a NAME="DebugBase.dispatch_exception" ID="DebugBase.dispatch_exception"></a> |
294 <h4>DebugBase.dispatch_exception</h4> |
294 <h4>DebugBase.dispatch_exception</h4> |
295 <b>dispatch_exception</b>(<i>frame, arg</i>) |
295 <b>dispatch_exception</b>(<i>frame, arg</i>) |
296 <p> |
296 <p> |
297 Reimplemented from bdb.py to always call user_exception. |
297 Reimplemented from bdb.py to always call user_exception. |
298 </p><dl> |
298 </p><dl> |
299 <dt><i>frame</i></dt> |
299 <dt><i>frame</i></dt> |
300 <dd> |
300 <dd> |
301 The current stack frame. |
301 The current stack frame. |
302 </dd><dt><i>arg</i></dt> |
302 </dd><dt><i>arg</i></dt> |
303 <dd> |
303 <dd> |
304 The arguments |
304 The arguments |
305 </dd> |
305 </dd> |
306 </dl><dl> |
306 </dl><dl> |
307 <dt>Returns:</dt> |
307 <dt>Returns:</dt> |
308 <dd> |
308 <dd> |
309 local trace function |
309 local trace function |
310 </dd> |
310 </dd> |
311 </dl><a NAME="DebugBase.dispatch_line" ID="DebugBase.dispatch_line"></a> |
311 </dl><a NAME="DebugBase.dispatch_line" ID="DebugBase.dispatch_line"></a> |
312 <h4>DebugBase.dispatch_line</h4> |
312 <h4>DebugBase.dispatch_line</h4> |
313 <b>dispatch_line</b>(<i>frame</i>) |
313 <b>dispatch_line</b>(<i>frame</i>) |
314 <p> |
314 <p> |
315 Reimplemented from bdb.py to do some special things. |
315 Reimplemented from bdb.py to do some special things. |
316 </p><p> |
316 </p><p> |
317 This speciality is to check the connection to the debug server |
317 This speciality is to check the connection to the debug server |
318 for new events (i.e. new breakpoints) while we are going through |
318 for new events (i.e. new breakpoints) while we are going through |
319 the code. |
319 the code. |
320 </p><dl> |
320 </p><dl> |
321 <dt><i>frame</i></dt> |
321 <dt><i>frame</i></dt> |
322 <dd> |
322 <dd> |
323 The current stack frame. |
323 The current stack frame. |
324 </dd> |
324 </dd> |
325 </dl><dl> |
325 </dl><dl> |
326 <dt>Returns:</dt> |
326 <dt>Returns:</dt> |
327 <dd> |
327 <dd> |
328 local trace function |
328 local trace function |
329 </dd> |
329 </dd> |
330 </dl><a NAME="DebugBase.dispatch_return" ID="DebugBase.dispatch_return"></a> |
330 </dl><a NAME="DebugBase.dispatch_return" ID="DebugBase.dispatch_return"></a> |
331 <h4>DebugBase.dispatch_return</h4> |
331 <h4>DebugBase.dispatch_return</h4> |
332 <b>dispatch_return</b>(<i>frame, arg</i>) |
332 <b>dispatch_return</b>(<i>frame, arg</i>) |
333 <p> |
333 <p> |
334 Reimplemented from bdb.py to handle passive mode cleanly. |
334 Reimplemented from bdb.py to handle passive mode cleanly. |
335 </p><dl> |
335 </p><dl> |
336 <dt><i>frame</i></dt> |
336 <dt><i>frame</i></dt> |
337 <dd> |
337 <dd> |
338 The current stack frame. |
338 The current stack frame. |
339 </dd><dt><i>arg</i></dt> |
339 </dd><dt><i>arg</i></dt> |
340 <dd> |
340 <dd> |
341 The arguments |
341 The arguments |
342 </dd> |
342 </dd> |
343 </dl><dl> |
343 </dl><dl> |
344 <dt>Returns:</dt> |
344 <dt>Returns:</dt> |
345 <dd> |
345 <dd> |
346 local trace function |
346 local trace function |
347 </dd> |
347 </dd> |
348 </dl><a NAME="DebugBase.fix_frame_filename" ID="DebugBase.fix_frame_filename"></a> |
348 </dl><a NAME="DebugBase.fix_frame_filename" ID="DebugBase.fix_frame_filename"></a> |
349 <h4>DebugBase.fix_frame_filename</h4> |
349 <h4>DebugBase.fix_frame_filename</h4> |
350 <b>fix_frame_filename</b>(<i>frame</i>) |
350 <b>fix_frame_filename</b>(<i>frame</i>) |
351 <p> |
351 <p> |
352 Public method used to fixup the filename for a given frame. |
352 Public method used to fixup the filename for a given frame. |
353 </p><p> |
353 </p><p> |
354 The logic employed here is that if a module was loaded |
354 The logic employed here is that if a module was loaded |
355 from a .pyc file, then the correct .py to operate with |
355 from a .pyc file, then the correct .py to operate with |
356 should be in the same path as the .pyc. The reason this |
356 should be in the same path as the .pyc. The reason this |
357 logic is needed is that when a .pyc file is generated, the |
357 logic is needed is that when a .pyc file is generated, the |
358 filename embedded and thus what is readable in the code object |
358 filename embedded and thus what is readable in the code object |
359 of the frame object is the fully qualified filepath when the |
359 of the frame object is the fully qualified filepath when the |
360 pyc is generated. If files are moved from machine to machine |
360 pyc is generated. If files are moved from machine to machine |
361 this can break debugging as the .pyc will refer to the .py |
361 this can break debugging as the .pyc will refer to the .py |
362 on the original machine. Another case might be sharing |
362 on the original machine. Another case might be sharing |
363 code over a network... This logic deals with that. |
363 code over a network... This logic deals with that. |
364 </p><dl> |
364 </p><dl> |
365 <dt><i>frame</i></dt> |
365 <dt><i>frame</i></dt> |
366 <dd> |
366 <dd> |
367 the frame object |
367 the frame object |
368 </dd> |
368 </dd> |
369 </dl><a NAME="DebugBase.getCurrentFrame" ID="DebugBase.getCurrentFrame"></a> |
369 </dl><a NAME="DebugBase.getCurrentFrame" ID="DebugBase.getCurrentFrame"></a> |
370 <h4>DebugBase.getCurrentFrame</h4> |
370 <h4>DebugBase.getCurrentFrame</h4> |
371 <b>getCurrentFrame</b>(<i></i>) |
371 <b>getCurrentFrame</b>(<i></i>) |
372 <p> |
372 <p> |
373 Public method to return the current frame. |
373 Public method to return the current frame. |
374 </p><dl> |
374 </p><dl> |
375 <dt>Returns:</dt> |
375 <dt>Returns:</dt> |
376 <dd> |
376 <dd> |
377 the current frame |
377 the current frame |
378 </dd> |
378 </dd> |
379 </dl><a NAME="DebugBase.getEvent" ID="DebugBase.getEvent"></a> |
379 </dl><a NAME="DebugBase.getEvent" ID="DebugBase.getEvent"></a> |
380 <h4>DebugBase.getEvent</h4> |
380 <h4>DebugBase.getEvent</h4> |
381 <b>getEvent</b>(<i></i>) |
381 <b>getEvent</b>(<i></i>) |
382 <p> |
382 <p> |
383 Public method to return the last debugger event. |
383 Public method to return the last debugger event. |
384 </p><dl> |
384 </p><dl> |
385 <dt>Returns:</dt> |
385 <dt>Returns:</dt> |
386 <dd> |
386 <dd> |
387 last debugger event (string) |
387 last debugger event (string) |
388 </dd> |
388 </dd> |
389 </dl><a NAME="DebugBase.getStack" ID="DebugBase.getStack"></a> |
389 </dl><a NAME="DebugBase.getStack" ID="DebugBase.getStack"></a> |
390 <h4>DebugBase.getStack</h4> |
390 <h4>DebugBase.getStack</h4> |
391 <b>getStack</b>(<i></i>) |
391 <b>getStack</b>(<i></i>) |
392 <p> |
392 <p> |
393 Public method to get the stack. |
393 Public method to get the stack. |
394 </p><dl> |
394 </p><dl> |
395 <dt>Returns:</dt> |
395 <dt>Returns:</dt> |
396 <dd> |
396 <dd> |
397 list of lists with file name (string), line number (integer) |
397 list of lists with file name (string), line number (integer) |
398 and function name (string) |
398 and function name (string) |
399 </dd> |
399 </dd> |
400 </dl><a NAME="DebugBase.get_break" ID="DebugBase.get_break"></a> |
400 </dl><a NAME="DebugBase.get_break" ID="DebugBase.get_break"></a> |
401 <h4>DebugBase.get_break</h4> |
401 <h4>DebugBase.get_break</h4> |
402 <b>get_break</b>(<i>filename, lineno</i>) |
402 <b>get_break</b>(<i>filename, lineno</i>) |
403 <p> |
403 <p> |
404 Reimplemented from bdb.py to get the first breakpoint of a particular line. |
404 Reimplemented from bdb.py to get the first breakpoint of a particular line. |
405 </p><p> |
405 </p><p> |
406 Because eric5 supports only one breakpoint per line, this overwritten |
406 Because eric5 supports only one breakpoint per line, this overwritten |
407 method will return this one and only breakpoint. |
407 method will return this one and only breakpoint. |
408 </p><dl> |
408 </p><dl> |
409 <dt><i>filename</i></dt> |
409 <dt><i>filename</i></dt> |
410 <dd> |
410 <dd> |
411 the filename of the bp to retrieve (string) |
411 the filename of the bp to retrieve (string) |
412 </dd><dt><i>ineno</i></dt> |
412 </dd><dt><i>ineno</i></dt> |
413 <dd> |
413 <dd> |
414 the linenumber of the bp to retrieve (integer) |
414 the linenumber of the bp to retrieve (integer) |
415 </dd> |
415 </dd> |
416 </dl><dl> |
416 </dl><dl> |
417 <dt>Returns:</dt> |
417 <dt>Returns:</dt> |
418 <dd> |
418 <dd> |
419 breakpoint or None, if there is no bp |
419 breakpoint or None, if there is no bp |
420 </dd> |
420 </dd> |
421 </dl><a NAME="DebugBase.get_watch" ID="DebugBase.get_watch"></a> |
421 </dl><a NAME="DebugBase.get_watch" ID="DebugBase.get_watch"></a> |
422 <h4>DebugBase.get_watch</h4> |
422 <h4>DebugBase.get_watch</h4> |
423 <b>get_watch</b>(<i>cond</i>) |
423 <b>get_watch</b>(<i>cond</i>) |
424 <p> |
424 <p> |
425 Public method to get a watch expression. |
425 Public method to get a watch expression. |
426 </p><dl> |
426 </p><dl> |
427 <dt><i>cond</i></dt> |
427 <dt><i>cond</i></dt> |
428 <dd> |
428 <dd> |
429 expression of the watch expression to be cleared (string) |
429 expression of the watch expression to be cleared (string) |
430 </dd> |
430 </dd> |
431 </dl><a NAME="DebugBase.go" ID="DebugBase.go"></a> |
431 </dl><a NAME="DebugBase.go" ID="DebugBase.go"></a> |
432 <h4>DebugBase.go</h4> |
432 <h4>DebugBase.go</h4> |
433 <b>go</b>(<i>special</i>) |
433 <b>go</b>(<i>special</i>) |
434 <p> |
434 <p> |
435 Public method to resume the thread. |
435 Public method to resume the thread. |
436 </p><p> |
436 </p><p> |
437 It resumes the thread stopping only at breakpoints or exceptions. |
437 It resumes the thread stopping only at breakpoints or exceptions. |
438 </p><dl> |
438 </p><dl> |
439 <dt><i>special</i></dt> |
439 <dt><i>special</i></dt> |
440 <dd> |
440 <dd> |
441 flag indicating a special continue operation |
441 flag indicating a special continue operation |
442 </dd> |
442 </dd> |
443 </dl><a NAME="DebugBase.isBroken" ID="DebugBase.isBroken"></a> |
443 </dl><a NAME="DebugBase.isBroken" ID="DebugBase.isBroken"></a> |
444 <h4>DebugBase.isBroken</h4> |
444 <h4>DebugBase.isBroken</h4> |
445 <b>isBroken</b>(<i></i>) |
445 <b>isBroken</b>(<i></i>) |
446 <p> |
446 <p> |
447 Public method to return the broken state of the debugger. |
447 Public method to return the broken state of the debugger. |
448 </p><dl> |
448 </p><dl> |
449 <dt>Returns:</dt> |
449 <dt>Returns:</dt> |
450 <dd> |
450 <dd> |
451 flag indicating the broken state (boolean) |
451 flag indicating the broken state (boolean) |
452 </dd> |
452 </dd> |
453 </dl><a NAME="DebugBase.profile" ID="DebugBase.profile"></a> |
453 </dl><a NAME="DebugBase.profile" ID="DebugBase.profile"></a> |
454 <h4>DebugBase.profile</h4> |
454 <h4>DebugBase.profile</h4> |
455 <b>profile</b>(<i>frame, event, arg</i>) |
455 <b>profile</b>(<i>frame, event, arg</i>) |
456 <p> |
456 <p> |
457 Public method used to trace some stuff independant of the debugger |
457 Public method used to trace some stuff independant of the debugger |
458 trace function. |
458 trace function. |
459 </p><dl> |
459 </p><dl> |
460 <dt><i>frame</i></dt> |
460 <dt><i>frame</i></dt> |
461 <dd> |
461 <dd> |
462 The current stack frame. |
462 The current stack frame. |
463 </dd><dt><i>event</i></dt> |
463 </dd><dt><i>event</i></dt> |
464 <dd> |
464 <dd> |
465 The trace event (string) |
465 The trace event (string) |
466 </dd><dt><i>arg</i></dt> |
466 </dd><dt><i>arg</i></dt> |
467 <dd> |
467 <dd> |
468 The arguments |
468 The arguments |
469 </dd> |
469 </dd> |
470 </dl><a NAME="DebugBase.setRecursionDepth" ID="DebugBase.setRecursionDepth"></a> |
470 </dl><a NAME="DebugBase.setRecursionDepth" ID="DebugBase.setRecursionDepth"></a> |
471 <h4>DebugBase.setRecursionDepth</h4> |
471 <h4>DebugBase.setRecursionDepth</h4> |
472 <b>setRecursionDepth</b>(<i>frame</i>) |
472 <b>setRecursionDepth</b>(<i>frame</i>) |
473 <p> |
473 <p> |
474 Public method to determine the current recursion depth. |
474 Public method to determine the current recursion depth. |
475 </p><dl> |
475 </p><dl> |
476 <dt><i>frame</i></dt> |
476 <dt><i>frame</i></dt> |
477 <dd> |
477 <dd> |
478 The current stack frame. |
478 The current stack frame. |
479 </dd> |
479 </dd> |
480 </dl><a NAME="DebugBase.set_continue" ID="DebugBase.set_continue"></a> |
480 </dl><a NAME="DebugBase.set_continue" ID="DebugBase.set_continue"></a> |
481 <h4>DebugBase.set_continue</h4> |
481 <h4>DebugBase.set_continue</h4> |
482 <b>set_continue</b>(<i>special</i>) |
482 <b>set_continue</b>(<i>special</i>) |
483 <p> |
483 <p> |
484 Reimplemented from bdb.py to always get informed of exceptions. |
484 Reimplemented from bdb.py to always get informed of exceptions. |
485 </p><dl> |
485 </p><dl> |
486 <dt><i>special</i></dt> |
486 <dt><i>special</i></dt> |
487 <dd> |
487 <dd> |
488 flag indicating a special continue operation |
488 flag indicating a special continue operation |
489 </dd> |
489 </dd> |
490 </dl><a NAME="DebugBase.set_quit" ID="DebugBase.set_quit"></a> |
490 </dl><a NAME="DebugBase.set_quit" ID="DebugBase.set_quit"></a> |
491 <h4>DebugBase.set_quit</h4> |
491 <h4>DebugBase.set_quit</h4> |
492 <b>set_quit</b>(<i></i>) |
492 <b>set_quit</b>(<i></i>) |
493 <p> |
493 <p> |
494 Public method to quit. |
494 Public method to quit. |
495 </p><p> |
495 </p><p> |
496 It wraps call to bdb to clear the current frame properly. |
496 It wraps call to bdb to clear the current frame properly. |
497 </p><a NAME="DebugBase.set_trace" ID="DebugBase.set_trace"></a> |
497 </p><a NAME="DebugBase.set_trace" ID="DebugBase.set_trace"></a> |
498 <h4>DebugBase.set_trace</h4> |
498 <h4>DebugBase.set_trace</h4> |
499 <b>set_trace</b>(<i>frame = None</i>) |
499 <b>set_trace</b>(<i>frame = None</i>) |
500 <p> |
500 <p> |
501 Overridden method of bdb.py to do some special setup. |
501 Overridden method of bdb.py to do some special setup. |
502 </p><dl> |
502 </p><dl> |
503 <dt><i>frame</i></dt> |
503 <dt><i>frame</i></dt> |
504 <dd> |
504 <dd> |
505 frame to start debugging from |
505 frame to start debugging from |
506 </dd> |
506 </dd> |
507 </dl><a NAME="DebugBase.set_watch" ID="DebugBase.set_watch"></a> |
507 </dl><a NAME="DebugBase.set_watch" ID="DebugBase.set_watch"></a> |
508 <h4>DebugBase.set_watch</h4> |
508 <h4>DebugBase.set_watch</h4> |
509 <b>set_watch</b>(<i>cond, temporary=0</i>) |
509 <b>set_watch</b>(<i>cond, temporary=0</i>) |
510 <p> |
510 <p> |
511 Public method to set a watch expression. |
511 Public method to set a watch expression. |
512 </p><dl> |
512 </p><dl> |
513 <dt><i>cond</i></dt> |
513 <dt><i>cond</i></dt> |
514 <dd> |
514 <dd> |
515 expression of the watch expression (string) |
515 expression of the watch expression (string) |
516 </dd><dt><i>temporary</i></dt> |
516 </dd><dt><i>temporary</i></dt> |
517 <dd> |
517 <dd> |
518 flag indicating a temporary watch expression (boolean) |
518 flag indicating a temporary watch expression (boolean) |
519 </dd> |
519 </dd> |
520 </dl><a NAME="DebugBase.step" ID="DebugBase.step"></a> |
520 </dl><a NAME="DebugBase.step" ID="DebugBase.step"></a> |
521 <h4>DebugBase.step</h4> |
521 <h4>DebugBase.step</h4> |
522 <b>step</b>(<i>traceMode</i>) |
522 <b>step</b>(<i>traceMode</i>) |
523 <p> |
523 <p> |
524 Public method to perform a step operation in this thread. |
524 Public method to perform a step operation in this thread. |
525 </p><dl> |
525 </p><dl> |
526 <dt><i>traceMode</i></dt> |
526 <dt><i>traceMode</i></dt> |
527 <dd> |
527 <dd> |
528 If it is non-zero, then the step is a step into, |
528 If it is non-zero, then the step is a step into, |
529 otherwise it is a step over. |
529 otherwise it is a step over. |
530 </dd> |
530 </dd> |
531 </dl><a NAME="DebugBase.stepOut" ID="DebugBase.stepOut"></a> |
531 </dl><a NAME="DebugBase.stepOut" ID="DebugBase.stepOut"></a> |
532 <h4>DebugBase.stepOut</h4> |
532 <h4>DebugBase.stepOut</h4> |
533 <b>stepOut</b>(<i></i>) |
533 <b>stepOut</b>(<i></i>) |
534 <p> |
534 <p> |
535 Public method to perform a step out of the current call. |
535 Public method to perform a step out of the current call. |
536 </p><a NAME="DebugBase.stop_here" ID="DebugBase.stop_here"></a> |
536 </p><a NAME="DebugBase.stop_here" ID="DebugBase.stop_here"></a> |
537 <h4>DebugBase.stop_here</h4> |
537 <h4>DebugBase.stop_here</h4> |
538 <b>stop_here</b>(<i>frame</i>) |
538 <b>stop_here</b>(<i>frame</i>) |
539 <p> |
539 <p> |
540 Reimplemented to filter out debugger files. |
540 Reimplemented to filter out debugger files. |
541 </p><p> |
541 </p><p> |
542 Tracing is turned off for files that are part of the |
542 Tracing is turned off for files that are part of the |
543 debugger that are called from the application being debugged. |
543 debugger that are called from the application being debugged. |
544 </p><dl> |
544 </p><dl> |
545 <dt><i>frame</i></dt> |
545 <dt><i>frame</i></dt> |
546 <dd> |
546 <dd> |
547 the frame object |
547 the frame object |
548 </dd> |
548 </dd> |
549 </dl><dl> |
549 </dl><dl> |
550 <dt>Returns:</dt> |
550 <dt>Returns:</dt> |
551 <dd> |
551 <dd> |
552 flag indicating whether the debugger should stop here |
552 flag indicating whether the debugger should stop here |
553 </dd> |
553 </dd> |
554 </dl><a NAME="DebugBase.trace_dispatch" ID="DebugBase.trace_dispatch"></a> |
554 </dl><a NAME="DebugBase.trace_dispatch" ID="DebugBase.trace_dispatch"></a> |
555 <h4>DebugBase.trace_dispatch</h4> |
555 <h4>DebugBase.trace_dispatch</h4> |
556 <b>trace_dispatch</b>(<i>frame, event, arg</i>) |
556 <b>trace_dispatch</b>(<i>frame, event, arg</i>) |
557 <p> |
557 <p> |
558 Reimplemented from bdb.py to do some special things. |
558 Reimplemented from bdb.py to do some special things. |
559 </p><p> |
559 </p><p> |
560 This specialty is to check the connection to the debug server |
560 This specialty is to check the connection to the debug server |
561 for new events (i.e. new breakpoints) while we are going through |
561 for new events (i.e. new breakpoints) while we are going through |
562 the code. |
562 the code. |
563 </p><dl> |
563 </p><dl> |
564 <dt><i>frame</i></dt> |
564 <dt><i>frame</i></dt> |
565 <dd> |
565 <dd> |
566 The current stack frame. |
566 The current stack frame. |
567 </dd><dt><i>event</i></dt> |
567 </dd><dt><i>event</i></dt> |
568 <dd> |
568 <dd> |
569 The trace event (string) |
569 The trace event (string) |
570 </dd><dt><i>arg</i></dt> |
570 </dd><dt><i>arg</i></dt> |
571 <dd> |
571 <dd> |
572 The arguments |
572 The arguments |
573 </dd> |
573 </dd> |
574 </dl><dl> |
574 </dl><dl> |
575 <dt>Returns:</dt> |
575 <dt>Returns:</dt> |
576 <dd> |
576 <dd> |
577 local trace function |
577 local trace function |
578 </dd> |
578 </dd> |
579 </dl><a NAME="DebugBase.user_exception" ID="DebugBase.user_exception"></a> |
579 </dl><a NAME="DebugBase.user_exception" ID="DebugBase.user_exception"></a> |
580 <h4>DebugBase.user_exception</h4> |
580 <h4>DebugBase.user_exception</h4> |
581 <b>user_exception</b>(<i>frame, (exctype, excval, exctb), unhandled=0</i>) |
581 <b>user_exception</b>(<i>frame, (exctype, excval, exctb), unhandled=0</i>) |
582 <p> |
582 <p> |
583 Reimplemented to report an exception to the debug server. |
583 Reimplemented to report an exception to the debug server. |
584 </p><dl> |
584 </p><dl> |
585 <dt><i>frame</i></dt> |
585 <dt><i>frame</i></dt> |
586 <dd> |
586 <dd> |
587 the frame object |
587 the frame object |
588 </dd><dt><i>exctype</i></dt> |
588 </dd><dt><i>exctype</i></dt> |
589 <dd> |
589 <dd> |
590 the type of the exception |
590 the type of the exception |
591 </dd><dt><i>excval</i></dt> |
591 </dd><dt><i>excval</i></dt> |
592 <dd> |
592 <dd> |
593 data about the exception |
593 data about the exception |
594 </dd><dt><i>exctb</i></dt> |
594 </dd><dt><i>exctb</i></dt> |
595 <dd> |
595 <dd> |
596 traceback for the exception |
596 traceback for the exception |
597 </dd><dt><i>unhandled</i></dt> |
597 </dd><dt><i>unhandled</i></dt> |
598 <dd> |
598 <dd> |
599 flag indicating an uncaught exception |
599 flag indicating an uncaught exception |
600 </dd> |
600 </dd> |
601 </dl><a NAME="DebugBase.user_line" ID="DebugBase.user_line"></a> |
601 </dl><a NAME="DebugBase.user_line" ID="DebugBase.user_line"></a> |
602 <h4>DebugBase.user_line</h4> |
602 <h4>DebugBase.user_line</h4> |
603 <b>user_line</b>(<i>frame</i>) |
603 <b>user_line</b>(<i>frame</i>) |
604 <p> |
604 <p> |
605 Reimplemented to handle the program about to execute a particular line. |
605 Reimplemented to handle the program about to execute a particular line. |
606 </p><dl> |
606 </p><dl> |
607 <dt><i>frame</i></dt> |
607 <dt><i>frame</i></dt> |
608 <dd> |
608 <dd> |
609 the frame object |
609 the frame object |
610 </dd> |
610 </dd> |
611 </dl><a NAME="DebugBase.user_return" ID="DebugBase.user_return"></a> |
611 </dl><a NAME="DebugBase.user_return" ID="DebugBase.user_return"></a> |
612 <h4>DebugBase.user_return</h4> |
612 <h4>DebugBase.user_return</h4> |
613 <b>user_return</b>(<i>frame, retval</i>) |
613 <b>user_return</b>(<i>frame, retval</i>) |
614 <p> |
614 <p> |
615 Reimplemented to report program termination to the debug server. |
615 Reimplemented to report program termination to the debug server. |
616 </p><dl> |
616 </p><dl> |
617 <dt><i>frame</i></dt> |
617 <dt><i>frame</i></dt> |
618 <dd> |
618 <dd> |
619 the frame object |
619 the frame object |
620 </dd><dt><i>retval</i></dt> |
620 </dd><dt><i>retval</i></dt> |
621 <dd> |
621 <dd> |
622 the return value of the program |
622 the return value of the program |
623 </dd> |
623 </dd> |
624 </dl> |
624 </dl> |
625 <div align="right"><a href="#top">Up</a></div> |
625 <div align="right"><a href="#top">Up</a></div> |
626 <hr /><hr /> |
626 <hr /><hr /> |
627 <a NAME="printerr" ID="printerr"></a> |
627 <a NAME="printerr" ID="printerr"></a> |
628 <h2>printerr</h2> |
628 <h2>printerr</h2> |
629 <b>printerr</b>(<i>s</i>) |
629 <b>printerr</b>(<i>s</i>) |
630 <p> |
630 <p> |
631 Module function used for debugging the debug client. |
631 Module function used for debugging the debug client. |
632 </p><dl> |
632 </p><dl> |
633 <dt><i>s</i></dt> |
633 <dt><i>s</i></dt> |
634 <dd> |
634 <dd> |
635 data to be printed |
635 data to be printed |
636 </dd> |
636 </dd> |
637 </dl> |
637 </dl> |
638 <div align="right"><a href="#top">Up</a></div> |
638 <div align="right"><a href="#top">Up</a></div> |
639 <hr /><hr /> |
639 <hr /><hr /> |
640 <a NAME="setRecursionLimit" ID="setRecursionLimit"></a> |
640 <a NAME="setRecursionLimit" ID="setRecursionLimit"></a> |
641 <h2>setRecursionLimit</h2> |
641 <h2>setRecursionLimit</h2> |
642 <b>setRecursionLimit</b>(<i>limit</i>) |
642 <b>setRecursionLimit</b>(<i>limit</i>) |
643 <p> |
643 <p> |
644 Module function to set the recursion limit. |
644 Module function to set the recursion limit. |
645 </p><dl> |
645 </p><dl> |
646 <dt><i>limit</i></dt> |
646 <dt><i>limit</i></dt> |
647 <dd> |
647 <dd> |
648 recursion limit (integer) |
648 recursion limit (integer) |
649 </dd> |
649 </dd> |
650 </dl> |
650 </dl> |
651 <div align="right"><a href="#top">Up</a></div> |
651 <div align="right"><a href="#top">Up</a></div> |
652 <hr /> |
652 <hr /> |
653 </body></html> |
653 </body></html> |