Don't keep ldgram.h. Isn't even checked in.
[deliverable/binutils-gdb.git] / gdb / breakpoint.c
CommitLineData
bd5635a1
RP
1/* Everything about breakpoints, for GDB.
2 Copyright (C) 1986, 1987, 1989, 1990 Free Software Foundation, Inc.
3
4This file is part of GDB.
5
6GDB is free software; you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation; either version 1, or (at your option)
9any later version.
10
11GDB is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with GDB; see the file COPYING. If not, write to
18the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
19
20#include <stdio.h>
21#include <ctype.h>
22#include "defs.h"
23#include "param.h"
24#include "symtab.h"
25#include "frame.h"
26#include "breakpoint.h"
27#include "expression.h"
28#include "gdbcore.h"
29#include "gdbcmd.h"
30#include "value.h"
31#include "ctype.h"
32#include "command.h"
33#include "inferior.h"
34#include "target.h"
35#include <string.h>
36
37extern int addressprint; /* Print machine addresses? */
38extern int demangle; /* Print de-mangled symbol names? */
39
40extern int catch_errors ();
41extern void set_next_address (); /* ...for x/ command */
42
43/* Are we executing breakpoint commands? */
44static int executing_breakpoint_commands;
45
46/* States of enablement of breakpoint.
47 `temporary' means disable when hit.
48 `delete' means delete when hit. */
49
50enum enable { disabled, enabled, temporary, delete};
51
52/* Not that the ->silent field is not currently used by any commands
f266e564 53 (though the code is in there if it was to be, and set_raw_breakpoint
bd5635a1
RP
54 does set it to 0). I implemented it because I thought it would be
55 useful for a hack I had to put in; I'm going to leave it in because
56 I can see how there might be times when it would indeed be useful */
57
58/* This is for a breakpoint or a watchpoint. */
59
60struct breakpoint
61{
62 struct breakpoint *next;
63 /* Number assigned to distinguish breakpoints. */
64 int number;
65 /* Address to break at, or NULL if not a breakpoint. */
66 CORE_ADDR address;
67 /* Line number of this address. Redundant. Only matters if address
68 is non-NULL. */
69 int line_number;
70 /* Symtab of file of this address. Redundant. Only matters if address
71 is non-NULL. */
72 struct symtab *symtab;
73 /* Zero means disabled; remember the info but don't break here. */
74 enum enable enable;
75 /* Non-zero means a silent breakpoint (don't print frame info
76 if we stop here). */
77 unsigned char silent;
78 /* Number of stops at this breakpoint that should
79 be continued automatically before really stopping. */
80 int ignore_count;
81 /* "Real" contents of byte where breakpoint has been inserted.
82 Valid only when breakpoints are in the program. Under the complete
83 control of the target insert_breakpoint and remove_breakpoint routines.
84 No other code should assume anything about the value(s) here. */
85 char shadow_contents[BREAKPOINT_MAX];
86 /* Nonzero if this breakpoint is now inserted. Only matters if address
87 is non-NULL. */
88 char inserted;
89 /* Nonzero if this is not the first breakpoint in the list
90 for the given address. Only matters if address is non-NULL. */
91 char duplicate;
92 /* Chain of command lines to execute when this breakpoint is hit. */
93 struct command_line *commands;
94 /* Stack depth (address of frame). If nonzero, break only if fp
95 equals this. */
96 FRAME_ADDR frame;
97 /* Conditional. Break only if this expression's value is nonzero. */
98 struct expression *cond;
99
100 /* String we used to set the breakpoint (malloc'd). Only matters if
101 address is non-NULL. */
102 char *addr_string;
103 /* String form of the breakpoint condition (malloc'd), or NULL if there
104 is no condition. */
105 char *cond_string;
106
107 /* The expression we are watching, or NULL if not a watchpoint. */
108 struct expression *exp;
109 /* The largest block within which it is valid, or NULL if it is
110 valid anywhere (e.g. consists just of global symbols). */
111 struct block *exp_valid_block;
112 /* Value of the watchpoint the last time we checked it. */
113 value val;
114};
115
116#define ALL_BREAKPOINTS(b) for (b = breakpoint_chain; b; b = b->next)
117
118/* Chain of all breakpoints defined. */
119
120struct breakpoint *breakpoint_chain;
121
122/* Number of last breakpoint made. */
123
124static int breakpoint_count;
125
126/* Set breakpoint count to NUM. */
127static void
128set_breakpoint_count (num)
129 int num;
130{
131 breakpoint_count = num;
132 set_internalvar (lookup_internalvar ("bpnum"),
133 value_from_long (builtin_type_int, (LONGEST) num));
134}
135
136/* Default address, symtab and line to put a breakpoint at
137 for "break" command with no arg.
138 if default_breakpoint_valid is zero, the other three are
139 not valid, and "break" with no arg is an error.
140
141 This set by print_stack_frame, which calls set_default_breakpoint. */
142
143int default_breakpoint_valid;
144CORE_ADDR default_breakpoint_address;
145struct symtab *default_breakpoint_symtab;
146int default_breakpoint_line;
147
148static void delete_breakpoint ();
149void breakpoint_auto_delete ();
150
151/* Flag indicating extra verbosity for xgdb. */
152extern int xgdb_verbose;
153\f
154/* *PP is a string denoting a breakpoint. Get the number of the breakpoint.
155 Advance *PP after the string and any trailing whitespace.
156
157 Currently the string can either be a number or "$" followed by the name
158 of a convenience variable. Making it an expression wouldn't work well
159 for map_breakpoint_numbers (e.g. "4 + 5 + 6"). */
160static int
161get_number (pp)
162 char **pp;
163{
164 int retval;
165 char *p = *pp;
166
167 if (p == NULL)
168 /* Empty line means refer to the last breakpoint. */
169 return breakpoint_count;
170 else if (*p == '$')
171 {
172 /* Make a copy of the name, so we can null-terminate it
173 to pass to lookup_internalvar(). */
174 char *varname;
175 char *start = ++p;
176 value val;
177
178 while (isalnum (*p) || *p == '_')
179 p++;
180 varname = (char *) alloca (p - start + 1);
181 strncpy (varname, start, p - start);
182 varname[p - start] = '\0';
183 val = value_of_internalvar (lookup_internalvar (varname));
184 if (TYPE_CODE (VALUE_TYPE (val)) != TYPE_CODE_INT)
185 error (
186"Convenience variables used to specify breakpoints must have integer values."
187 );
188 retval = (int) value_as_long (val);
189 }
190 else
191 {
192 while (*p >= '0' && *p <= '9')
193 ++p;
194 if (p == *pp)
195 /* There is no number here. (e.g. "cond a == b"). */
196 error_no_arg ("breakpoint number");
197 retval = atoi (*pp);
198 }
199 if (!(isspace (*p) || *p == '\0'))
200 error ("breakpoint number expected");
201 while (isspace (*p))
202 p++;
203 *pp = p;
204 return retval;
205}
206\f
207/* condition N EXP -- set break condition of breakpoint N to EXP. */
208
209static void
210condition_command (arg, from_tty)
211 char *arg;
212 int from_tty;
213{
214 register struct breakpoint *b;
215 char *p;
216 register int bnum;
217
218 if (arg == 0)
219 error_no_arg ("breakpoint number");
220
221 p = arg;
222 bnum = get_number (&p);
223
224 ALL_BREAKPOINTS (b)
225 if (b->number == bnum)
226 {
227 if (b->cond)
228 {
229 free (b->cond);
230 b->cond = 0;
231 }
232 if (b->cond_string != NULL)
233 free (b->cond_string);
234
235 if (*p == 0)
236 {
237 b->cond = 0;
238 b->cond_string = NULL;
239 if (from_tty)
240 printf ("Breakpoint %d now unconditional.\n", bnum);
241 }
242 else
243 {
244 arg = p;
245 /* I don't know if it matters whether this is the string the user
246 typed in or the decompiled expression. */
247 b->cond_string = savestring (arg, strlen (arg));
248 b->cond = parse_c_1 (&arg, block_for_pc (b->address), 0);
249 if (*arg)
250 error ("Junk at end of expression");
251 }
252 return;
253 }
254
255 error ("No breakpoint number %d.", bnum);
256}
257
258static void
259commands_command (arg, from_tty)
260 char *arg;
261 int from_tty;
262{
263 register struct breakpoint *b;
264 char *p;
265 register int bnum;
266 struct command_line *l;
267
268 /* If we allowed this, we would have problems with when to
269 free the storage, if we change the commands currently
270 being read from. */
271
272 if (executing_breakpoint_commands)
273 error ("Can't use the \"commands\" command among a breakpoint's commands.");
274
275 p = arg;
276 bnum = get_number (&p);
277 if (p && *p)
278 error ("Unexpected extra arguments following breakpoint number.");
279
280 ALL_BREAKPOINTS (b)
281 if (b->number == bnum)
282 {
283 if (input_from_terminal_p ())
284 {
285 printf ("Type commands for when breakpoint %d is hit, one per line.\n\
286End with a line saying just \"end\".\n", bnum);
287 fflush (stdout);
288 }
289 l = read_command_lines ();
290 free_command_lines (&b->commands);
291 b->commands = l;
292 return;
293 }
294 error ("No breakpoint number %d.", bnum);
295}
296\f
31ef19fc
JK
297extern int memory_breakpoint_size; /* from mem-break.c */
298
299/* Like target_read_memory() but if breakpoints are inserted, return
300 the shadow contents instead of the breakpoints themselves. */
301int
302read_memory_nobpt (memaddr, myaddr, len)
303 CORE_ADDR memaddr;
304 char *myaddr;
305 unsigned len;
306{
307 int status;
308 struct breakpoint *b;
309
310 if (memory_breakpoint_size < 0)
311 /* No breakpoints on this machine. */
312 return target_read_memory (memaddr, myaddr, len);
313
314 ALL_BREAKPOINTS (b)
315 {
316 if (b->address == NULL || !b->inserted)
317 continue;
318 else if (b->address + memory_breakpoint_size <= memaddr)
319 /* The breakpoint is entirely before the chunk of memory
320 we are reading. */
321 continue;
322 else if (b->address >= memaddr + len)
323 /* The breakpoint is entirely after the chunk of memory we
324 are reading. */
325 continue;
326 else
327 {
328 /* Copy the breakpoint from the shadow contents, and recurse
329 for the things before and after. */
330
331 /* Addresses and length of the part of the breakpoint that
332 we need to copy. */
333 CORE_ADDR membpt = b->address;
334 unsigned int bptlen = memory_breakpoint_size;
335 /* Offset within shadow_contents. */
336 int bptoffset = 0;
337
338 if (membpt < memaddr)
339 {
340 /* Only copy the second part of the breakpoint. */
341 bptlen -= memaddr - membpt;
342 bptoffset = memaddr - membpt;
343 membpt = memaddr;
344 }
345
346 if (membpt + bptlen > memaddr + len)
347 {
348 /* Only copy the first part of the breakpoint. */
349 bptlen -= (membpt + bptlen) - (memaddr + len);
350 }
351
352 bcopy (b->shadow_contents + bptoffset,
353 myaddr + membpt - memaddr, bptlen);
354
355 if (membpt > memaddr)
356 {
357 /* Copy the section of memory before the breakpoint. */
358 status = read_memory_nobpt (memaddr, myaddr, membpt - memaddr);
359 if (status != 0)
360 return status;
361 }
362
363 if (membpt + bptlen < memaddr + len)
364 {
365 /* Copy the section of memory after the breakpoint. */
366 status = read_memory_nobpt
367 (membpt + bptlen,
368 myaddr + membpt + bptlen - memaddr,
369 memaddr + len - (membpt + bptlen));
370 if (status != 0)
371 return status;
372 }
373 return 0;
374 }
375 }
376 /* Nothing overlaps. Just call read_memory_noerr. */
377 return target_read_memory (memaddr, myaddr, len);
378}
379\f
bd5635a1
RP
380/* insert_breakpoints is used when starting or continuing the program.
381 remove_breakpoints is used when the program stops.
382 Both return zero if successful,
383 or an `errno' value if could not write the inferior. */
384
385int
386insert_breakpoints ()
387{
388 register struct breakpoint *b;
389 int val = 0;
390 int disabled_breaks = 0;
391
392 ALL_BREAKPOINTS (b)
393 if (b->address != NULL
394 && b->enable != disabled
395 && ! b->inserted
396 && ! b->duplicate)
397 {
398 val = target_insert_breakpoint(b->address, b->shadow_contents);
399 if (val)
400 {
401 /* Can't set the breakpoint. */
402#if defined (DISABLE_UNSETTABLE_BREAK)
403 if (DISABLE_UNSETTABLE_BREAK (b->address))
404 {
405 val = 0;
406 b->enable = disabled;
407 if (!disabled_breaks)
408 {
409 fprintf (stderr,
410 "Cannot insert breakpoint %d:\n", b->number);
411 printf_filtered ("Disabling shared library breakpoints:\n");
412 }
413 disabled_breaks = 1;
414 printf_filtered ("%d ", b->number);
415 }
416 else
417#endif
418 {
419 fprintf (stderr, "Cannot insert breakpoint %d:\n", b->number);
420 memory_error (val, b->address); /* which bombs us out */
421 }
422 }
423 else
424 b->inserted = 1;
425 }
426 if (disabled_breaks)
427 printf_filtered ("\n");
428 return val;
429}
430
431int
432remove_breakpoints ()
433{
434 register struct breakpoint *b;
435 int val;
436
437#ifdef BREAKPOINT_DEBUG
438 printf ("Removing breakpoints.\n");
439#endif /* BREAKPOINT_DEBUG */
440
441 ALL_BREAKPOINTS (b)
442 if (b->address != NULL && b->inserted)
443 {
444 val = target_remove_breakpoint(b->address, b->shadow_contents);
445 if (val)
446 return val;
447 b->inserted = 0;
448#ifdef BREAKPOINT_DEBUG
449 printf ("Removed breakpoint at 0x%x, shadow 0x%x, 0x%x.\n",
450 b->address, b->shadow_contents[0], b->shadow_contents[1]);
451#endif /* BREAKPOINT_DEBUG */
452 }
453
454 return 0;
455}
456
457/* Clear the "inserted" flag in all breakpoints.
458 This is done when the inferior is loaded. */
459
460void
461mark_breakpoints_out ()
462{
463 register struct breakpoint *b;
464
465 ALL_BREAKPOINTS (b)
466 b->inserted = 0;
467}
468
469/* breakpoint_here_p (PC) returns 1 if an enabled breakpoint exists at PC.
470 When continuing from a location with a breakpoint,
471 we actually single step once before calling insert_breakpoints. */
472
473int
474breakpoint_here_p (pc)
475 CORE_ADDR pc;
476{
477 register struct breakpoint *b;
478
479 ALL_BREAKPOINTS (b)
480 if (b->enable != disabled && b->address == pc)
481 return 1;
482
483 return 0;
484}
485\f
486/* bpstat stuff. External routines' interfaces are documented
487 in breakpoint.h. */
488void
489bpstat_clear (bsp)
490 bpstat *bsp;
491{
492 bpstat p;
493 bpstat q;
494
495 if (bsp == 0)
496 return;
497 p = *bsp;
498 while (p != NULL)
499 {
500 q = p->next;
501 if (p->old_val != NULL)
502 value_free (p->old_val);
503 free (p);
504 p = q;
505 }
506 *bsp = NULL;
507}
508
509bpstat
510bpstat_copy (bs)
511 bpstat bs;
512{
513 bpstat p = NULL;
514 bpstat tmp;
515 bpstat retval;
516
517 if (bs == NULL)
518 return bs;
519
520 for (; bs != NULL; bs = bs->next)
521 {
522 tmp = (bpstat) xmalloc (sizeof (*tmp));
523 bcopy (bs, tmp, sizeof (*tmp));
524 if (p == NULL)
525 /* This is the first thing in the chain. */
526 retval = tmp;
527 else
528 p->next = tmp;
529 p = tmp;
530 }
531 p->next = NULL;
532 return retval;
533}
534
535int
536bpstat_num (bsp)
537 bpstat *bsp;
538{
539 struct breakpoint *b;
540
541 if ((*bsp) == NULL)
542 return 0; /* No more breakpoint values */
543 else
544 {
545 b = (*bsp)->breakpoint_at;
546 *bsp = (*bsp)->next;
547 if (b == NULL)
548 return -1; /* breakpoint that's been deleted since */
549 else
550 return b->number; /* We have its number */
551 }
552}
553
554void
555bpstat_clear_actions (bs)
556 bpstat bs;
557{
558 for (; bs != NULL; bs = bs->next)
559 {
560 bs->commands = NULL;
561 if (bs->old_val != NULL)
562 {
563 value_free (bs->old_val);
564 bs->old_val = NULL;
565 }
566 }
567}
568
569/* Execute all the commands associated with all the breakpoints at this
570 location. Any of these commands could cause the process to proceed
571 beyond this point, etc. We look out for such changes by checking
572 the global "breakpoint_proceeded" after each command. */
573void
574bpstat_do_actions (bsp)
575 bpstat *bsp;
576{
577 bpstat bs;
578
579top:
580 bs = *bsp;
581
582 executing_breakpoint_commands = 1;
583 breakpoint_proceeded = 0;
584 for (; bs != NULL; bs = bs->next)
585 {
586 while (bs->commands)
587 {
588 char *line = bs->commands->line;
589 bs->commands = bs->commands->next;
590 execute_command (line, 0);
591 /* If the inferior is proceeded by the command, bomb out now.
592 The bpstat chain has been blown away by wait_for_inferior.
593 But since execution has stopped again, there is a new bpstat
594 to look at, so start over. */
595 if (breakpoint_proceeded)
596 goto top;
597 }
598 }
599 clear_momentary_breakpoints ();
600
601 executing_breakpoint_commands = 0;
602}
603
604int
605bpstat_print (bs)
606 bpstat bs;
607{
608 /* bs->breakpoint_at can be NULL if it was a momentary breakpoint
609 which has since been deleted. */
610 if (bs == NULL || bs->breakpoint_at == NULL)
611 return 0;
612
613 /* If bpstat_stop_status says don't print, OK, we won't. An example
614 circumstance is when we single-stepped for both a watchpoint and
615 for a "stepi" instruction. The bpstat says that the watchpoint
616 explains the stop, but we shouldn't print because the watchpoint's
617 value didn't change -- and the real reason we are stopping here
618 rather than continuing to step (as the watchpoint would've had us do)
619 is because of the "stepi". */
620 if (!bs->print)
621 return 0;
622
623 if (bs->breakpoint_at->address != NULL)
624 {
625 /* I think the user probably only wants to see one breakpoint
626 number, not all of them. */
627 printf_filtered ("\nBreakpoint %d, ", bs->breakpoint_at->number);
628 return 0;
629 }
630
631 if (bs->old_val != NULL)
632 {
633 printf_filtered ("\nWatchpoint %d, ", bs->breakpoint_at->number);
634 print_expression (bs->breakpoint_at->exp, stdout);
635 printf_filtered ("\nOld value = ");
636 value_print (bs->old_val, stdout, 0, Val_pretty_default);
637 printf_filtered ("\nNew value = ");
638 value_print (bs->breakpoint_at->val, stdout, 0,
639 Val_pretty_default);
640 printf_filtered ("\n");
641 value_free (bs->old_val);
642 bs->old_val = NULL;
643 return 1;
644 }
645
fcb887ff
JK
646 /* Maybe another breakpoint in the chain caused us to stop.
647 (Currently all watchpoints go on the bpstat whether hit or
648 not. That probably could (should) be changed, provided care is taken
649 with respect to bpstat_explains_signal). */
650 if (bs->next)
651 return bpstat_print (bs->next);
652
bd5635a1
RP
653 fprintf_filtered (stderr, "gdb internal error: in bpstat_print\n");
654 return 0;
655}
656
657/* Evaluate the expression EXP and return 1 if value is zero.
658 This is used inside a catch_errors to evaluate the breakpoint condition.
659 The argument is a "struct expression *" that has been cast to int to
660 make it pass through catch_errors. */
661
662static int
663breakpoint_cond_eval (exp)
664 int exp;
665{
666 return value_zerop (evaluate_expression ((struct expression *)exp));
667}
668
669/* Allocate a new bpstat and chain it to the current one. */
670
671static bpstat
672bpstat_alloc (b, cbs)
673 register struct breakpoint *b;
674 bpstat cbs; /* Current "bs" value */
675{
676 bpstat bs;
677
678 bs = (bpstat) xmalloc (sizeof (*bs));
679 cbs->next = bs;
680 bs->breakpoint_at = b;
681 /* If the condition is false, etc., don't do the commands. */
682 bs->commands = NULL;
683 bs->momentary = b->number == -3;
684 bs->old_val = NULL;
685 return bs;
686}
687
688/* Determine whether we stopped at a breakpoint, etc, or whether we
689 don't understand this stop. Result is a chain of bpstat's such that:
690
691 if we don't understand the stop, the result is a null pointer.
692
693 if we understand why we stopped, the result is not null, and
694 the first element of the chain contains summary "stop" and
695 "print" flags for the whole chain.
696
697 Each element of the chain refers to a particular breakpoint or
698 watchpoint at which we have stopped. (We may have stopped for
699 several reasons.)
700
701 Each element of the chain has valid next, breakpoint_at,
702 commands, FIXME??? fields.
703
704 */
705
706
707bpstat
708bpstat_stop_status (pc, frame_address)
709 CORE_ADDR *pc;
710 FRAME_ADDR frame_address;
711{
712 register struct breakpoint *b;
713 int stop = 0;
714 int print = 0;
715 CORE_ADDR bp_addr;
716 /* True if we've hit a breakpoint (as opposed to a watchpoint). */
717 int real_breakpoint = 0;
718 /* Root of the chain of bpstat's */
719 struct bpstat__struct root_bs[1];
720 /* Pointer to the last thing in the chain currently. */
721 bpstat bs = root_bs;
722
723 /* Get the address where the breakpoint would have been. */
724 bp_addr = *pc - DECR_PC_AFTER_BREAK;
725
726 ALL_BREAKPOINTS (b)
727 {
728 int this_bp_stop;
729 int this_bp_print;
730
731 if (b->enable == disabled)
732 continue;
733 if (b->address != NULL && b->address != bp_addr)
734 continue;
735
736 bs = bpstat_alloc (b, bs); /* Alloc a bpstat to explain stop */
737
738 this_bp_stop = 1;
739 this_bp_print = 1;
740
741 if (b->exp != NULL) /* Watchpoint */
742 {
743 int within_current_scope;
744 if (b->exp_valid_block != NULL)
745 within_current_scope =
746 contained_in (get_selected_block (), b->exp_valid_block);
747 else
748 within_current_scope = 1;
749
750 if (within_current_scope)
751 {
fcb887ff
JK
752 /* We use value_{,free_to_}mark because it could be a
753 *long* time before we return to the command level and
754 call free_all_values. */
755
756 value mark = value_mark ();
bd5635a1 757 value new_val = evaluate_expression (b->exp);
bd5635a1
RP
758 if (!value_equal (b->val, new_val))
759 {
fcb887ff
JK
760 release_value (new_val);
761 value_free_to_mark (mark);
bd5635a1
RP
762 bs->old_val = b->val;
763 b->val = new_val;
764 /* We will stop here */
765 }
766 else
767 {
768 /* Nothing changed, don't do anything. */
fcb887ff 769 value_free_to_mark (mark);
bd5635a1
RP
770 continue;
771 /* We won't stop here */
772 }
773 }
774 else
775 {
776 /* This seems like the only logical thing to do because
777 if we temporarily ignored the watchpoint, then when
778 we reenter the block in which it is valid it contains
779 garbage (in the case of a function, it may have two
780 garbage values, one before and one after the prologue).
781 So we can't even detect the first assignment to it and
782 watch after that (since the garbage may or may not equal
783 the first value assigned). */
784 b->enable = disabled;
785 printf_filtered ("\
786Watchpoint %d disabled because the program has left the block in\n\
787which its expression is valid.\n", b->number);
788 /* We won't stop here */
789 /* FIXME, maybe we should stop here!!! */
790 continue;
791 }
792 }
793 else
794 real_breakpoint = 1;
795
796 if (b->frame && b->frame != frame_address)
797 this_bp_stop = 0;
798 else
799 {
800 int value_zero;
801
802 if (b->cond)
803 {
804 /* Need to select the frame, with all that implies
805 so that the conditions will have the right context. */
806 select_frame (get_current_frame (), 0);
807 value_zero
808 = catch_errors (breakpoint_cond_eval, (int)(b->cond),
809 "Error occurred in testing breakpoint condition.");
810 free_all_values ();
811 }
812 if (b->cond && value_zero)
813 {
814 this_bp_stop = 0;
815 }
816 else if (b->ignore_count > 0)
817 {
818 b->ignore_count--;
819 this_bp_stop = 0;
820 }
821 else
822 {
823 /* We will stop here */
824 if (b->enable == temporary)
825 b->enable = disabled;
826 bs->commands = b->commands;
827 if (b->silent)
828 this_bp_print = 0;
829 if (bs->commands && !strcmp ("silent", bs->commands->line))
830 {
831 bs->commands = bs->commands->next;
832 this_bp_print = 0;
833 }
834 }
835 }
836 if (this_bp_stop)
837 stop = 1;
838 if (this_bp_print)
839 print = 1;
840 }
841
842 bs->next = NULL; /* Terminate the chain */
843 bs = root_bs->next; /* Re-grab the head of the chain */
844 if (bs)
845 {
846 bs->stop = stop;
847 bs->print = print;
848#if DECR_PC_AFTER_BREAK != 0 || defined (SHIFT_INST_REGS)
849 if (real_breakpoint)
850 {
851 *pc = bp_addr;
852#if defined (SHIFT_INST_REGS)
853 {
854 CORE_ADDR pc = read_register (PC_REGNUM);
855 CORE_ADDR npc = read_register (NPC_REGNUM);
856 if (pc != npc)
857 {
858 write_register (NNPC_REGNUM, npc);
859 write_register (NPC_REGNUM, pc);
860 }
861 }
862#else /* No SHIFT_INST_REGS. */
863 write_pc (bp_addr);
864#endif /* No SHIFT_INST_REGS. */
865 }
866#endif /* DECR_PC_AFTER_BREAK != 0. */
867 }
868 return bs;
869}
870
871int
872bpstat_should_step ()
873{
874 struct breakpoint *b;
875 ALL_BREAKPOINTS (b)
876 if (b->enable != disabled && b->exp != NULL)
877 return 1;
878 return 0;
879}
880\f
881/* Print information on breakpoint number BNUM, or -1 if all.
882 If WATCHPOINTS is zero, process only breakpoints; if WATCHPOINTS
883 is nonzero, process only watchpoints. */
884
885static void
886breakpoint_1 (bnum, watchpoints)
887 int bnum;
888 int watchpoints;
889{
890 register struct breakpoint *b;
891 register struct command_line *l;
892 register struct symbol *sym;
893 CORE_ADDR last_addr = (CORE_ADDR)-1;
894 int header_printed = 0;
895
896 ALL_BREAKPOINTS (b)
897 if (bnum == -1 || bnum == b->number)
898 {
899 if (b->address == NULL && !watchpoints)
900 {
901 if (bnum == -1)
902 continue;
903 error ("That is a watchpoint, not a breakpoint.");
904 }
905 if (b->address != NULL && watchpoints)
906 {
907 if (bnum == -1)
908 continue;
909 error ("That is a breakpoint, not a watchpoint.");
910 }
911
912 if (!header_printed)
913 {
914 if (watchpoints)
915 printf_filtered (" Enb Expression\n");
916 else if (addressprint)
917 printf_filtered (" Enb Address Where\n");
918 else
919 printf_filtered (" Enb Where\n");
920 header_printed = 1;
921 }
922
923 printf_filtered ("#%-3d %c ", b->number, "nyod"[(int) b->enable]);
f266e564
JK
924 if (b->address == NULL) {
925 printf_filtered (" ");
bd5635a1 926 print_expression (b->exp, stdout);
f266e564 927 } else {
bd5635a1
RP
928 if (addressprint)
929 printf_filtered (" 0x%08x ", b->address);
930
931 last_addr = b->address;
932 if (b->symtab)
933 {
934 sym = find_pc_function (b->address);
935 if (sym)
936 {
937 fputs_filtered (" in ", stdout);
938 fputs_demangled (SYMBOL_NAME (sym), stdout, 1);
939 fputs_filtered (" at ", stdout);
940 }
941 fputs_filtered (b->symtab->filename, stdout);
942 printf_filtered (":%d", b->line_number);
943 }
944 else
945 print_address_symbolic (b->address, stdout, demangle);
946 }
947
948 printf_filtered ("\n");
949
950 if (b->frame)
951 printf_filtered ("\tstop only in stack frame at 0x%x\n", b->frame);
952 if (b->cond)
953 {
954 printf_filtered ("\tstop only if ");
955 print_expression (b->cond, stdout);
956 printf_filtered ("\n");
957 }
958 if (b->ignore_count)
959 printf_filtered ("\tignore next %d hits\n", b->ignore_count);
960 if ((l = b->commands))
961 while (l)
962 {
963 fputs_filtered ("\t", stdout);
964 fputs_filtered (l->line, stdout);
965 fputs_filtered ("\n", stdout);
966 l = l->next;
967 }
968 }
969
970 if (!header_printed)
971 {
972 char *which = watchpoints ? "watch" : "break";
973 if (bnum == -1)
974 printf_filtered ("No %spoints.\n", which);
975 else
976 printf_filtered ("No %spoint numbered %d.\n", which, bnum);
977 }
978
979 /* Compare against (CORE_ADDR)-1 in case some compiler decides
980 that a comparison of an unsigned with -1 is always false. */
981 if (last_addr != (CORE_ADDR)-1)
982 set_next_address (last_addr);
983}
984
985static void
986breakpoints_info (bnum_exp, from_tty)
987 char *bnum_exp;
988 int from_tty;
989{
990 int bnum = -1;
991
992 if (bnum_exp)
993 bnum = parse_and_eval_address (bnum_exp);
994
995 breakpoint_1 (bnum, 0);
996}
997
998static void
999watchpoints_info (bnum_exp, from_tty)
1000 char *bnum_exp;
1001 int from_tty;
1002{
1003 int bnum = -1;
1004
1005 if (bnum_exp)
1006 bnum = parse_and_eval_address (bnum_exp);
1007
1008 breakpoint_1 (bnum, 1);
1009}
1010
1011/* Print a message describing any breakpoints set at PC. */
1012
1013static void
1014describe_other_breakpoints (pc)
1015 register CORE_ADDR pc;
1016{
1017 register int others = 0;
1018 register struct breakpoint *b;
1019
1020 ALL_BREAKPOINTS (b)
1021 if (b->address == pc)
1022 others++;
1023 if (others > 0)
1024 {
1025 printf ("Note: breakpoint%s ", (others > 1) ? "s" : "");
1026 ALL_BREAKPOINTS (b)
1027 if (b->address == pc)
1028 {
1029 others--;
1030 printf ("%d%s%s ",
1031 b->number,
1032 (b->enable == disabled) ? " (disabled)" : "",
1033 (others > 1) ? "," : ((others == 1) ? " and" : ""));
1034 }
1035 printf ("also set at pc 0x%x.\n", pc);
1036 }
1037}
1038\f
1039/* Set the default place to put a breakpoint
1040 for the `break' command with no arguments. */
1041
1042void
1043set_default_breakpoint (valid, addr, symtab, line)
1044 int valid;
1045 CORE_ADDR addr;
1046 struct symtab *symtab;
1047 int line;
1048{
1049 default_breakpoint_valid = valid;
1050 default_breakpoint_address = addr;
1051 default_breakpoint_symtab = symtab;
1052 default_breakpoint_line = line;
1053}
1054
1055/* Rescan breakpoints at address ADDRESS,
1056 marking the first one as "first" and any others as "duplicates".
1057 This is so that the bpt instruction is only inserted once. */
1058
1059static void
1060check_duplicates (address)
1061 CORE_ADDR address;
1062{
1063 register struct breakpoint *b;
1064 register int count = 0;
1065
f266e564
JK
1066 if (address == NULL) /* Watchpoints are uninteresting */
1067 return;
1068
bd5635a1
RP
1069 ALL_BREAKPOINTS (b)
1070 if (b->enable != disabled && b->address == address)
1071 {
1072 count++;
1073 b->duplicate = count > 1;
1074 }
1075}
1076
1077/* Low level routine to set a breakpoint.
1078 Takes as args the three things that every breakpoint must have.
1079 Returns the breakpoint object so caller can set other things.
1080 Does not set the breakpoint number!
f266e564
JK
1081 Does not print anything.
1082
1083 ==> This routine should not be called if there is a chance of later
1084 error(); otherwise it leaves a bogus breakpoint on the chain. Validate
1085 your arguments BEFORE calling this routine! */
bd5635a1
RP
1086
1087static struct breakpoint *
1088set_raw_breakpoint (sal)
1089 struct symtab_and_line sal;
1090{
1091 register struct breakpoint *b, *b1;
1092
1093 b = (struct breakpoint *) xmalloc (sizeof (struct breakpoint));
1094 bzero (b, sizeof *b);
1095 b->address = sal.pc;
1096 b->symtab = sal.symtab;
1097 b->line_number = sal.line;
1098 b->enable = enabled;
1099 b->next = 0;
1100 b->silent = 0;
1101 b->ignore_count = 0;
1102 b->commands = NULL;
1103 b->frame = NULL;
1104
1105 /* Add this breakpoint to the end of the chain
1106 so that a list of breakpoints will come out in order
1107 of increasing numbers. */
1108
1109 b1 = breakpoint_chain;
1110 if (b1 == 0)
1111 breakpoint_chain = b;
1112 else
1113 {
1114 while (b1->next)
1115 b1 = b1->next;
1116 b1->next = b;
1117 }
1118
1119 check_duplicates (sal.pc);
1120
1121 return b;
1122}
1123
1124/* Set a breakpoint that will evaporate an end of command
1125 at address specified by SAL.
1126 Restrict it to frame FRAME if FRAME is nonzero. */
1127
1128void
1129set_momentary_breakpoint (sal, frame)
1130 struct symtab_and_line sal;
1131 FRAME frame;
1132{
1133 register struct breakpoint *b;
1134 b = set_raw_breakpoint (sal);
1135 b->number = -3;
1136 b->enable = delete;
1137 b->frame = (frame ? FRAME_FP (frame) : 0);
1138}
1139
1140void
1141clear_momentary_breakpoints ()
1142{
1143 register struct breakpoint *b;
1144 ALL_BREAKPOINTS (b)
1145 if (b->number == -3)
1146 {
1147 delete_breakpoint (b);
1148 break;
1149 }
1150}
1151\f
1152/* Tell the user we have just set a breakpoint B. */
1153static void
1154mention (b)
1155 struct breakpoint *b;
1156{
1157 if (b->exp)
1158 {
1159 printf_filtered ("Watchpoint %d: ", b->number);
1160 print_expression (b->exp, stdout);
1161 }
1162 else
1163 {
1164 printf_filtered ("Breakpoint %d at 0x%x", b->number, b->address);
1165 if (b->symtab)
1166 printf_filtered (": file %s, line %d.",
1167 b->symtab->filename, b->line_number);
1168 }
1169 printf_filtered ("\n");
1170}
1171
1172#if 0
1173/* Nobody calls this currently. */
1174/* Set a breakpoint from a symtab and line.
1175 If TEMPFLAG is nonzero, it is a temporary breakpoint.
1176 ADDR_STRING is a malloc'd string holding the name of where we are
1177 setting the breakpoint. This is used later to re-set it after the
1178 program is relinked and symbols are reloaded.
1179 Print the same confirmation messages that the breakpoint command prints. */
1180
1181void
1182set_breakpoint (s, line, tempflag, addr_string)
1183 struct symtab *s;
1184 int line;
1185 int tempflag;
1186 char *addr_string;
1187{
1188 register struct breakpoint *b;
1189 struct symtab_and_line sal;
1190
1191 sal.symtab = s;
1192 sal.line = line;
1193 sal.pc = find_line_pc (sal.symtab, sal.line);
1194 if (sal.pc == 0)
1195 error ("No line %d in file \"%s\".\n", sal.line, sal.symtab->filename);
1196 else
1197 {
1198 describe_other_breakpoints (sal.pc);
1199
1200 b = set_raw_breakpoint (sal);
1201 set_breakpoint_count (breakpoint_count + 1);
1202 b->number = breakpoint_count;
1203 b->cond = 0;
1204 b->addr_string = addr_string;
1205 if (tempflag)
1206 b->enable = temporary;
1207
1208 mention (b);
1209 }
1210}
1211#endif
1212\f
1213/* Set a breakpoint according to ARG (function, linenum or *address)
1214 and make it temporary if TEMPFLAG is nonzero. */
1215
1216static void
1217break_command_1 (arg, tempflag, from_tty)
1218 char *arg;
1219 int tempflag, from_tty;
1220{
1221 struct symtabs_and_lines sals;
1222 struct symtab_and_line sal;
1223 register struct expression *cond = 0;
1224 register struct breakpoint *b;
1225
1226 /* Pointers in arg to the start, and one past the end, of the condition. */
1227 char *cond_start = NULL;
1228 char *cond_end;
1229 /* Pointers in arg to the start, and one past the end,
1230 of the address part. */
1231 char *addr_start = NULL;
1232 char *addr_end;
1233
1234 int i;
1235 CORE_ADDR pc;
1236
1237 sals.sals = NULL;
1238 sals.nelts = 0;
1239
1240 sal.line = sal.pc = sal.end = 0;
1241 sal.symtab = 0;
1242
1243 /* If no arg given, or if first arg is 'if ', use the default breakpoint. */
1244
1245 if (!arg || (arg[0] == 'i' && arg[1] == 'f'
1246 && (arg[2] == ' ' || arg[2] == '\t')))
1247 {
1248 if (default_breakpoint_valid)
1249 {
1250 sals.sals = (struct symtab_and_line *)
1251 xmalloc (sizeof (struct symtab_and_line));
1252 sal.pc = default_breakpoint_address;
1253 sal.line = default_breakpoint_line;
1254 sal.symtab = default_breakpoint_symtab;
1255 sals.sals[0] = sal;
1256 sals.nelts = 1;
1257 }
1258 else
1259 error ("No default breakpoint address now.");
1260 }
1261 else
1262 {
1263 addr_start = arg;
1264
1265 /* Force almost all breakpoints to be in terms of the
1266 current_source_symtab (which is decode_line_1's default). This
1267 should produce the results we want almost all of the time while
1268 leaving default_breakpoint_* alone. */
1269 if (default_breakpoint_valid
1270 && (!current_source_symtab
1271 || (arg && (*arg == '+' || *arg == '-'))))
1272 sals = decode_line_1 (&arg, 1, default_breakpoint_symtab,
1273 default_breakpoint_line);
1274 else
1275 sals = decode_line_1 (&arg, 1, (struct symtab *)NULL, 0);
1276
1277 addr_end = arg;
1278 }
1279
1280 if (! sals.nelts)
1281 return;
1282
1283 for (i = 0; i < sals.nelts; i++)
1284 {
1285 sal = sals.sals[i];
1286 if (sal.pc == 0 && sal.symtab != 0)
1287 {
1288 pc = find_line_pc (sal.symtab, sal.line);
1289 if (pc == 0)
1290 error ("No line %d in file \"%s\".",
1291 sal.line, sal.symtab->filename);
1292 }
1293 else
1294 pc = sal.pc;
1295
1296 while (arg && *arg)
1297 {
1298 if (arg[0] == 'i' && arg[1] == 'f'
1299 && (arg[2] == ' ' || arg[2] == '\t'))
1300 {
1301 arg += 2;
1302 cond_start = arg;
1303 cond = parse_c_1 (&arg, block_for_pc (pc), 0);
1304 cond_end = arg;
1305 }
1306 else
1307 error ("Junk at end of arguments.");
1308 }
1309 sals.sals[i].pc = pc;
1310 }
1311
1312 for (i = 0; i < sals.nelts; i++)
1313 {
1314 sal = sals.sals[i];
1315
1316 if (from_tty)
1317 describe_other_breakpoints (sal.pc);
1318
1319 b = set_raw_breakpoint (sal);
1320 set_breakpoint_count (breakpoint_count + 1);
1321 b->number = breakpoint_count;
1322 b->cond = cond;
1323
1324 if (addr_start)
1325 b->addr_string = savestring (addr_start, addr_end - addr_start);
1326 if (cond_start)
1327 b->cond_string = savestring (cond_start, cond_end - cond_start);
1328
1329 if (tempflag)
1330 b->enable = temporary;
1331
1332 mention (b);
1333 }
1334
1335 if (sals.nelts > 1)
1336 {
1337 printf ("Multiple breakpoints were set.\n");
1338 printf ("Use the \"delete\" command to delete unwanted breakpoints.\n");
1339 }
1340 free (sals.sals);
1341}
1342
1343void
1344break_command (arg, from_tty)
1345 char *arg;
1346 int from_tty;
1347{
1348 break_command_1 (arg, 0, from_tty);
1349}
1350
1351static void
1352tbreak_command (arg, from_tty)
1353 char *arg;
1354 int from_tty;
1355{
1356 break_command_1 (arg, 1, from_tty);
1357}
1358
1359static void
1360watch_command (arg, from_tty)
1361 char *arg;
1362 int from_tty;
1363{
1364 struct breakpoint *b;
1365 struct symtab_and_line sal;
f266e564
JK
1366 struct expression *exp;
1367 struct block *exp_valid_block;
1368 struct value *val;
bd5635a1
RP
1369
1370 sal.pc = NULL;
1371 sal.symtab = NULL;
1372 sal.line = 0;
1373
f266e564
JK
1374 /* Parse arguments. */
1375 innermost_block = NULL;
1376 exp = parse_c_expression (arg);
1377 exp_valid_block = innermost_block;
1378 val = evaluate_expression (exp);
1379 release_value (val);
1380
1381 /* Now set up the breakpoint. */
bd5635a1
RP
1382 b = set_raw_breakpoint (sal);
1383 set_breakpoint_count (breakpoint_count + 1);
1384 b->number = breakpoint_count;
f266e564
JK
1385 b->exp = exp;
1386 b->exp_valid_block = exp_valid_block;
1387 b->val = val;
bd5635a1
RP
1388 b->cond = 0;
1389 b->cond_string = NULL;
1390 mention (b);
1391}
1392\f
1393/*
1394 * Helper routine for the until_command routine in infcmd.c. Here
1395 * because it uses the mechanisms of breakpoints.
1396 */
1397void
1398until_break_command (arg, from_tty)
1399 char *arg;
1400 int from_tty;
1401{
1402 struct symtabs_and_lines sals;
1403 struct symtab_and_line sal;
1404 FRAME prev_frame = get_prev_frame (selected_frame);
1405
1406 clear_proceed_status ();
1407
1408 /* Set a breakpoint where the user wants it and at return from
1409 this function */
1410
1411 if (default_breakpoint_valid)
1412 sals = decode_line_1 (&arg, 1, default_breakpoint_symtab,
1413 default_breakpoint_line);
1414 else
1415 sals = decode_line_1 (&arg, 1, (struct symtab *)NULL, 0);
1416
1417 if (sals.nelts != 1)
1418 error ("Couldn't get information on specified line.");
1419
1420 sal = sals.sals[0];
1421 free (sals.sals); /* malloc'd, so freed */
1422
1423 if (*arg)
1424 error ("Junk at end of arguments.");
1425
1426 if (sal.pc == 0 && sal.symtab != 0)
1427 sal.pc = find_line_pc (sal.symtab, sal.line);
1428
1429 if (sal.pc == 0)
1430 error ("No line %d in file \"%s\".", sal.line, sal.symtab->filename);
1431
1432 set_momentary_breakpoint (sal, selected_frame);
1433
1434 /* Keep within the current frame */
1435
1436 if (prev_frame)
1437 {
1438 struct frame_info *fi;
1439
1440 fi = get_frame_info (prev_frame);
1441 sal = find_pc_line (fi->pc, 0);
1442 sal.pc = fi->pc;
1443 set_momentary_breakpoint (sal, prev_frame);
1444 }
1445
1446 proceed (-1, -1, 0);
1447}
1448\f
1449/* Set a breakpoint at the catch clause for NAME. */
1450static int
1451catch_breakpoint (name)
1452 char *name;
1453{
1454}
1455
1456static int
1457disable_catch_breakpoint ()
1458{
1459}
1460
1461static int
1462delete_catch_breakpoint ()
1463{
1464}
1465
1466static int
1467enable_catch_breakpoint ()
1468{
1469}
1470
1471struct sal_chain
1472{
1473 struct sal_chain *next;
1474 struct symtab_and_line sal;
1475};
1476
1477/* For each catch clause identified in ARGS, run FUNCTION
1478 with that clause as an argument. */
1479static struct symtabs_and_lines
1480map_catch_names (args, function)
1481 char *args;
1482 int (*function)();
1483{
1484 register char *p = args;
1485 register char *p1;
1486 struct symtabs_and_lines sals;
1487 struct sal_chain *sal_chain = 0;
1488
1489 if (p == 0)
1490 error_no_arg ("one or more catch names");
1491
1492 sals.nelts = 0;
1493 sals.sals = NULL;
1494
1495 while (*p)
1496 {
1497 p1 = p;
1498 /* Don't swallow conditional part. */
1499 if (p1[0] == 'i' && p1[1] == 'f'
1500 && (p1[2] == ' ' || p1[2] == '\t'))
1501 break;
1502
1503 if (isalpha (*p1))
1504 {
1505 p1++;
1506 while (isalnum (*p1) || *p1 == '_' || *p1 == '$')
1507 p1++;
1508 }
1509
1510 if (*p1 && *p1 != ' ' && *p1 != '\t')
1511 error ("Arguments must be catch names.");
1512
1513 *p1 = 0;
1514#if 0
1515 if (function (p))
1516 {
1517 struct sal_chain *next
1518 = (struct sal_chain *)alloca (sizeof (struct sal_chain));
1519 next->next = sal_chain;
1520 next->sal = get_catch_sal (p);
1521 sal_chain = next;
1522 goto win;
1523 }
1524#endif
1525 printf ("No catch clause for exception %s.\n", p);
1526 win:
1527 p = p1;
1528 while (*p == ' ' || *p == '\t') p++;
1529 }
1530}
1531
1532/* This shares a lot of code with `print_frame_label_vars' from stack.c. */
1533
1534static struct symtabs_and_lines
1535get_catch_sals (this_level_only)
1536 int this_level_only;
1537{
1538 extern struct blockvector *blockvector_for_pc ();
1539 register struct blockvector *bl;
777bef06 1540 register struct block *block;
bd5635a1 1541 int index, have_default = 0;
777bef06
JK
1542 struct frame_info *fi;
1543 CORE_ADDR pc;
bd5635a1
RP
1544 struct symtabs_and_lines sals;
1545 struct sal_chain *sal_chain = 0;
1546 char *blocks_searched;
1547
777bef06
JK
1548 /* Not sure whether an error message is always the correct response,
1549 but it's better than a core dump. */
1550 if (selected_frame == NULL)
1551 error ("No selected frame.");
1552 block = get_frame_block (selected_frame);
1553 fi = get_frame_info (selected_frame);
1554 pc = fi->pc;
1555
bd5635a1
RP
1556 sals.nelts = 0;
1557 sals.sals = NULL;
1558
1559 if (block == 0)
1560 error ("No symbol table info available.\n");
1561
1562 bl = blockvector_for_pc (BLOCK_END (block) - 4, &index);
1563 blocks_searched = (char *) alloca (BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
1564 bzero (blocks_searched, BLOCKVECTOR_NBLOCKS (bl) * sizeof (char));
1565
1566 while (block != 0)
1567 {
1568 CORE_ADDR end = BLOCK_END (block) - 4;
1569 int last_index;
1570
1571 if (bl != blockvector_for_pc (end, &index))
1572 error ("blockvector blotch");
1573 if (BLOCKVECTOR_BLOCK (bl, index) != block)
1574 error ("blockvector botch");
1575 last_index = BLOCKVECTOR_NBLOCKS (bl);
1576 index += 1;
1577
1578 /* Don't print out blocks that have gone by. */
1579 while (index < last_index
1580 && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < pc)
1581 index++;
1582
1583 while (index < last_index
1584 && BLOCK_END (BLOCKVECTOR_BLOCK (bl, index)) < end)
1585 {
1586 if (blocks_searched[index] == 0)
1587 {
1588 struct block *b = BLOCKVECTOR_BLOCK (bl, index);
1589 int nsyms;
1590 register int i;
1591 register struct symbol *sym;
1592
1593 nsyms = BLOCK_NSYMS (b);
1594
1595 for (i = 0; i < nsyms; i++)
1596 {
1597 sym = BLOCK_SYM (b, i);
1598 if (! strcmp (SYMBOL_NAME (sym), "default"))
1599 {
1600 if (have_default)
1601 continue;
1602 have_default = 1;
1603 }
1604 if (SYMBOL_CLASS (sym) == LOC_LABEL)
1605 {
1606 struct sal_chain *next = (struct sal_chain *)
1607 alloca (sizeof (struct sal_chain));
1608 next->next = sal_chain;
1609 next->sal = find_pc_line (SYMBOL_VALUE_ADDRESS (sym), 0);
1610 sal_chain = next;
1611 }
1612 }
1613 blocks_searched[index] = 1;
1614 }
1615 index++;
1616 }
1617 if (have_default)
1618 break;
1619 if (sal_chain && this_level_only)
1620 break;
1621
1622 /* After handling the function's top-level block, stop.
1623 Don't continue to its superblock, the block of
1624 per-file symbols. */
1625 if (BLOCK_FUNCTION (block))
1626 break;
1627 block = BLOCK_SUPERBLOCK (block);
1628 }
1629
1630 if (sal_chain)
1631 {
1632 struct sal_chain *tmp_chain;
1633
1634 /* Count the number of entries. */
1635 for (index = 0, tmp_chain = sal_chain; tmp_chain;
1636 tmp_chain = tmp_chain->next)
1637 index++;
1638
1639 sals.nelts = index;
1640 sals.sals = (struct symtab_and_line *)
1641 xmalloc (index * sizeof (struct symtab_and_line));
1642 for (index = 0; sal_chain; sal_chain = sal_chain->next, index++)
1643 sals.sals[index] = sal_chain->sal;
1644 }
1645
1646 return sals;
1647}
1648
1649/* Commands to deal with catching exceptions. */
1650
1651void
1652catch_command_1 (arg, tempflag, from_tty)
1653 char *arg;
1654 int tempflag;
1655 int from_tty;
1656{
1657 /* First, translate ARG into something we can deal with in terms
1658 of breakpoints. */
1659
1660 struct symtabs_and_lines sals;
1661 struct symtab_and_line sal;
1662 register struct expression *cond = 0;
1663 register struct breakpoint *b;
1664 char *save_arg;
1665 int i;
1666 CORE_ADDR pc;
1667
1668 sal.line = sal.pc = sal.end = 0;
1669 sal.symtab = 0;
1670
1671 /* If no arg given, or if first arg is 'if ', all active catch clauses
1672 are breakpointed. */
1673
1674 if (!arg || (arg[0] == 'i' && arg[1] == 'f'
1675 && (arg[2] == ' ' || arg[2] == '\t')))
1676 {
1677 /* Grab all active catch clauses. */
1678 sals = get_catch_sals (0);
1679 }
1680 else
1681 {
1682 /* Grab selected catch clauses. */
1683 error ("catch NAME not implemeneted");
1684 sals = map_catch_names (arg, catch_breakpoint);
1685 }
1686
1687 if (! sals.nelts)
1688 return;
1689
1690 save_arg = arg;
1691 for (i = 0; i < sals.nelts; i++)
1692 {
1693 sal = sals.sals[i];
1694 if (sal.pc == 0 && sal.symtab != 0)
1695 {
1696 pc = find_line_pc (sal.symtab, sal.line);
1697 if (pc == 0)
1698 error ("No line %d in file \"%s\".",
1699 sal.line, sal.symtab->filename);
1700 }
1701 else
1702 pc = sal.pc;
1703
1704 while (arg && *arg)
1705 {
1706 if (arg[0] == 'i' && arg[1] == 'f'
1707 && (arg[2] == ' ' || arg[2] == '\t'))
1708 cond = (struct expression *) parse_c_1 ((arg += 2, &arg),
1709 block_for_pc (pc), 0);
1710 else
1711 error ("Junk at end of arguments.");
1712 }
1713 arg = save_arg;
1714 sals.sals[i].pc = pc;
1715 }
1716
1717 for (i = 0; i < sals.nelts; i++)
1718 {
1719 sal = sals.sals[i];
1720
1721 if (from_tty)
1722 describe_other_breakpoints (sal.pc);
1723
1724 b = set_raw_breakpoint (sal);
1725 b->number = ++breakpoint_count;
1726 b->cond = cond;
1727 if (tempflag)
1728 b->enable = temporary;
1729
1730 printf ("Breakpoint %d at 0x%x", b->number, b->address);
1731 if (b->symtab)
1732 printf (": file %s, line %d.", b->symtab->filename, b->line_number);
1733 printf ("\n");
1734 }
1735
1736 if (sals.nelts > 1)
1737 {
1738 printf ("Multiple breakpoints were set.\n");
1739 printf ("Use the \"delete\" command to delete unwanted breakpoints.\n");
1740 }
1741 free (sals.sals);
1742}
1743
1744/* Disable breakpoints on all catch clauses described in ARGS. */
1745static void
1746disable_catch (args)
1747 char *args;
1748{
1749 /* Map the disable command to catch clauses described in ARGS. */
1750}
1751
1752/* Enable breakpoints on all catch clauses described in ARGS. */
1753static void
1754enable_catch (args)
1755 char *args;
1756{
1757 /* Map the disable command to catch clauses described in ARGS. */
1758}
1759
1760/* Delete breakpoints on all catch clauses in the active scope. */
1761static void
1762delete_catch (args)
1763 char *args;
1764{
1765 /* Map the delete command to catch clauses described in ARGS. */
1766}
1767
1768static void
1769catch_command (arg, from_tty)
1770 char *arg;
1771 int from_tty;
1772{
1773 catch_command_1 (arg, 0, from_tty);
1774}
1775\f
1776static void
1777clear_command (arg, from_tty)
1778 char *arg;
1779 int from_tty;
1780{
1781 register struct breakpoint *b, *b1;
1782 struct symtabs_and_lines sals;
1783 struct symtab_and_line sal;
1784 register struct breakpoint *found;
1785 int i;
1786
1787 if (arg)
1788 {
1789 sals = decode_line_spec (arg, 1);
1790 }
1791 else
1792 {
1793 sals.sals = (struct symtab_and_line *) xmalloc (sizeof (struct symtab_and_line));
1794 sal.line = default_breakpoint_line;
1795 sal.symtab = default_breakpoint_symtab;
1796 sal.pc = 0;
1797 if (sal.symtab == 0)
1798 error ("No source file specified.");
1799
1800 sals.sals[0] = sal;
1801 sals.nelts = 1;
1802 }
1803
1804 for (i = 0; i < sals.nelts; i++)
1805 {
1806 /* If exact pc given, clear bpts at that pc.
1807 But if sal.pc is zero, clear all bpts on specified line. */
1808 sal = sals.sals[i];
1809 found = (struct breakpoint *) 0;
1810 while (breakpoint_chain
1811 && (sal.pc ? breakpoint_chain->address == sal.pc
1812 : (breakpoint_chain->symtab == sal.symtab
1813 && breakpoint_chain->line_number == sal.line)))
1814 {
1815 b1 = breakpoint_chain;
1816 breakpoint_chain = b1->next;
1817 b1->next = found;
1818 found = b1;
1819 }
1820
1821 ALL_BREAKPOINTS (b)
1822 while (b->next
1823 && b->next->address != NULL
1824 && (sal.pc ? b->next->address == sal.pc
1825 : (b->next->symtab == sal.symtab
1826 && b->next->line_number == sal.line)))
1827 {
1828 b1 = b->next;
1829 b->next = b1->next;
1830 b1->next = found;
1831 found = b1;
1832 }
1833
1834 if (found == 0)
1835 {
1836 if (arg)
1837 error ("No breakpoint at %s.", arg);
1838 else
1839 error ("No breakpoint at this line.");
1840 }
1841
1842 if (found->next) from_tty = 1; /* Always report if deleted more than one */
1843 if (from_tty) printf ("Deleted breakpoint%s ", found->next ? "s" : "");
1844 while (found)
1845 {
1846 if (from_tty) printf ("%d ", found->number);
1847 b1 = found->next;
1848 delete_breakpoint (found);
1849 found = b1;
1850 }
1851 if (from_tty) putchar ('\n');
1852 }
1853 free (sals.sals);
1854}
1855\f
1856/* Delete breakpoint in BS if they are `delete' breakpoints.
1857 This is called after any breakpoint is hit, or after errors. */
1858
1859void
1860breakpoint_auto_delete (bs)
1861 bpstat bs;
1862{
1863 for (; bs; bs = bs->next)
1864 if (bs->breakpoint_at && bs->breakpoint_at->enable == delete)
1865 delete_breakpoint (bs->breakpoint_at);
1866}
1867
1868/* Delete a breakpoint and clean up all traces of it in the data structures. */
1869
1870static void
1871delete_breakpoint (bpt)
1872 struct breakpoint *bpt;
1873{
1874 register struct breakpoint *b;
1875 register bpstat bs;
1876
1877 if (bpt->inserted)
1878 target_remove_breakpoint(bpt->address, bpt->shadow_contents);
1879
1880 if (breakpoint_chain == bpt)
1881 breakpoint_chain = bpt->next;
1882
1883 ALL_BREAKPOINTS (b)
1884 if (b->next == bpt)
1885 {
1886 b->next = bpt->next;
1887 break;
1888 }
1889
1890 check_duplicates (bpt->address);
1891
1892 free_command_lines (&bpt->commands);
1893 if (bpt->cond)
1894 free (bpt->cond);
1895 if (bpt->cond_string != NULL)
1896 free (bpt->cond_string);
1897 if (bpt->addr_string != NULL)
1898 free (bpt->addr_string);
1899
1900 if (xgdb_verbose && bpt->number >=0)
1901 printf ("breakpoint #%d deleted\n", bpt->number);
1902
1903 /* Be sure no bpstat's are pointing at it after it's been freed. */
1904 /* FIXME, how can we find all bpstat's? We just check stop_bpstat for now. */
1905 for (bs = stop_bpstat; bs; bs = bs->next)
1906 if (bs->breakpoint_at == bpt)
1907 bs->breakpoint_at = NULL;
1908 free (bpt);
1909}
1910
1911static void map_breakpoint_numbers ();
1912
1913static void
1914delete_command (arg, from_tty)
1915 char *arg;
1916 int from_tty;
1917{
1918
1919 if (arg == 0)
1920 {
1921 /* Ask user only if there are some breakpoints to delete. */
1922 if (!from_tty
1923 || (breakpoint_chain && query ("Delete all breakpoints? ", 0, 0)))
1924 {
1925 /* No arg; clear all breakpoints. */
1926 while (breakpoint_chain)
1927 delete_breakpoint (breakpoint_chain);
1928 }
1929 }
1930 else
1931 map_breakpoint_numbers (arg, delete_breakpoint);
1932}
1933
1934static void
1935breakpoint_re_set_one (bint)
1936 int bint;
1937{
1938 struct breakpoint *b = (struct breakpoint *)bint; /* get past catch_errs */
1939 int i;
1940 struct symtabs_and_lines sals;
1941 struct symtab_and_line sal;
1942 char *s;
1943
1944 if (b->address != NULL && b->addr_string != NULL)
1945 {
1946 s = b->addr_string;
1947 sals = decode_line_1 (&s, 1, (struct symtab *)NULL, 0);
1948 for (i = 0; i < sals.nelts; i++)
1949 {
1950 sal = sals.sals[i];
1951
1952 b->symtab = sal.symtab;
1953 b->line_number = sal.line;
1954 if (sal.pc == 0 && sal.symtab != 0)
1955 {
1956 sal.pc = find_line_pc (sal.symtab, sal.line);
1957 if (sal.pc == 0)
1958 error ("No line %d in file \"%s\".",
1959 sal.line, sal.symtab->filename);
1960 }
1961 b->address = sal.pc;
1962
1963 if (b->cond_string != NULL)
1964 {
1965 s = b->cond_string;
1966 b->cond = parse_c_1 (&s, block_for_pc (sal.pc), 0);
1967 }
1968
1969 check_duplicates (b->address);
1970
1971 mention (b);
1972 }
1973 free (sals.sals);
1974 }
1975 else
1976 {
1977 /* Anything without a string can't be re-set. */
1978 delete_breakpoint (b);
1979 }
1980}
1981
1982/* Re-set all breakpoints after symbols have been re-loaded. */
1983void
1984breakpoint_re_set ()
1985{
1986 struct breakpoint *b;
1987
1988 ALL_BREAKPOINTS (b)
1989 {
1990 b->symtab = 0; /* Be sure we don't point to old dead symtab */
1991 (void) catch_errors (breakpoint_re_set_one, (int) b,
1992 "Error in re-setting breakpoint");
1993 }
1994
1995 /* Blank line to finish off all those mention() messages we just printed. */
1996 printf_filtered ("\n");
1997}
1998\f
1999/* Set ignore-count of breakpoint number BPTNUM to COUNT.
2000 If from_tty is nonzero, it prints a message to that effect,
2001 which ends with a period (no newline). */
2002
2003void
2004set_ignore_count (bptnum, count, from_tty)
2005 int bptnum, count, from_tty;
2006{
2007 register struct breakpoint *b;
2008
2009 if (count < 0)
2010 count = 0;
2011
2012 ALL_BREAKPOINTS (b)
2013 if (b->number == bptnum)
2014 {
2015 b->ignore_count = count;
2016 if (!from_tty)
2017 return;
2018 else if (count == 0)
2019 printf ("Will stop next time breakpoint %d is reached.", bptnum);
2020 else if (count == 1)
2021 printf ("Will ignore next crossing of breakpoint %d.", bptnum);
2022 else
2023 printf ("Will ignore next %d crossings of breakpoint %d.",
2024 count, bptnum);
2025 return;
2026 }
2027
2028 error ("No breakpoint number %d.", bptnum);
2029}
2030
2031/* Clear the ignore counts of all breakpoints. */
2032void
2033breakpoint_clear_ignore_counts ()
2034{
2035 struct breakpoint *b;
2036
2037 ALL_BREAKPOINTS (b)
2038 b->ignore_count = 0;
2039}
2040
2041/* Command to set ignore-count of breakpoint N to COUNT. */
2042
2043static void
2044ignore_command (args, from_tty)
2045 char *args;
2046 int from_tty;
2047{
2048 char *p = args;
2049 register int num;
2050
2051 if (p == 0)
2052 error_no_arg ("a breakpoint number");
2053
2054 num = get_number (&p);
2055
2056 if (*p == 0)
2057 error ("Second argument (specified ignore-count) is missing.");
2058
2059 set_ignore_count (num, parse_and_eval_address (p), from_tty);
2060 printf ("\n");
2061}
2062\f
2063/* Call FUNCTION on each of the breakpoints
2064 whose numbers are given in ARGS. */
2065
2066static void
2067map_breakpoint_numbers (args, function)
2068 char *args;
2069 void (*function) ();
2070{
2071 register char *p = args;
2072 char *p1;
2073 register int num;
2074 register struct breakpoint *b;
2075
2076 if (p == 0)
2077 error_no_arg ("one or more breakpoint numbers");
2078
2079 while (*p)
2080 {
2081 p1 = p;
2082
2083 num = get_number (&p1);
2084
2085 ALL_BREAKPOINTS (b)
2086 if (b->number == num)
2087 {
2088 function (b);
2089 goto win;
2090 }
2091 printf ("No breakpoint number %d.\n", num);
2092 win:
2093 p = p1;
2094 }
2095}
2096
2097static void
2098enable_breakpoint (bpt)
2099 struct breakpoint *bpt;
2100{
2101 bpt->enable = enabled;
2102
2103 if (xgdb_verbose && bpt->number >= 0)
2104 printf ("breakpoint #%d enabled\n", bpt->number);
2105
2106 check_duplicates (bpt->address);
2107 if (bpt->val != NULL)
2108 {
f266e564
JK
2109 if (bpt->exp_valid_block != NULL
2110 && !contained_in (get_selected_block (), bpt->exp_valid_block))
2111 {
2112 printf_filtered ("\
2113Cannot enable watchpoint %d because the block in which its expression\n\
2114is valid is not currently in scope.\n", bpt->number);
2115 return;
2116 }
2117
bd5635a1
RP
2118 value_free (bpt->val);
2119
2120 bpt->val = evaluate_expression (bpt->exp);
2121 release_value (bpt->val);
2122 }
2123}
2124
2125static void
2126enable_command (args, from_tty)
2127 char *args;
2128 int from_tty;
2129{
2130 struct breakpoint *bpt;
2131 if (args == 0)
2132 ALL_BREAKPOINTS (bpt)
2133 enable_breakpoint (bpt);
2134 else
2135 map_breakpoint_numbers (args, enable_breakpoint);
2136}
2137
2138static void
2139disable_breakpoint (bpt)
2140 struct breakpoint *bpt;
2141{
2142 bpt->enable = disabled;
2143
2144 if (xgdb_verbose && bpt->number >= 0)
2145 printf ("breakpoint #%d disabled\n", bpt->number);
2146
2147 check_duplicates (bpt->address);
2148}
2149
2150static void
2151disable_command (args, from_tty)
2152 char *args;
2153 int from_tty;
2154{
2155 register struct breakpoint *bpt;
2156 if (args == 0)
2157 ALL_BREAKPOINTS (bpt)
2158 disable_breakpoint (bpt);
2159 else
2160 map_breakpoint_numbers (args, disable_breakpoint);
2161}
2162
2163static void
2164enable_once_breakpoint (bpt)
2165 struct breakpoint *bpt;
2166{
2167 bpt->enable = temporary;
2168
2169 check_duplicates (bpt->address);
2170}
2171
2172static void
2173enable_once_command (args, from_tty)
2174 char *args;
2175 int from_tty;
2176{
2177 map_breakpoint_numbers (args, enable_once_breakpoint);
2178}
2179
2180static void
2181enable_delete_breakpoint (bpt)
2182 struct breakpoint *bpt;
2183{
2184 bpt->enable = delete;
2185
2186 check_duplicates (bpt->address);
2187}
2188
2189static void
2190enable_delete_command (args, from_tty)
2191 char *args;
2192 int from_tty;
2193{
2194 map_breakpoint_numbers (args, enable_delete_breakpoint);
2195}
2196\f
2197/*
2198 * Use default_breakpoint_'s, or nothing if they aren't valid.
2199 */
2200struct symtabs_and_lines
2201decode_line_spec_1 (string, funfirstline)
2202 char *string;
2203 int funfirstline;
2204{
2205 struct symtabs_and_lines sals;
2206 if (string == 0)
2207 error ("Empty line specification.");
2208 if (default_breakpoint_valid)
2209 sals = decode_line_1 (&string, funfirstline,
2210 default_breakpoint_symtab, default_breakpoint_line);
2211 else
2212 sals = decode_line_1 (&string, funfirstline, (struct symtab *)NULL, 0);
2213 if (*string)
2214 error ("Junk at end of line specification: %s", string);
2215 return sals;
2216}
2217\f
2218
2219/* Chain containing all defined enable commands. */
2220
2221extern struct cmd_list_element
2222 *enablelist, *disablelist,
2223 *deletelist, *enablebreaklist;
2224
2225extern struct cmd_list_element *cmdlist;
2226
2227void
2228_initialize_breakpoint ()
2229{
2230 breakpoint_chain = 0;
2231 /* Don't bother to call set_breakpoint_count. $bpnum isn't useful
2232 before a breakpoint is set. */
2233 breakpoint_count = 0;
2234
2235 add_com ("ignore", class_breakpoint, ignore_command,
2236 "Set ignore-count of breakpoint number N to COUNT.");
2237
2238 add_com ("commands", class_breakpoint, commands_command,
2239 "Set commands to be executed when a breakpoint is hit.\n\
2240Give breakpoint number as argument after \"commands\".\n\
2241With no argument, the targeted breakpoint is the last one set.\n\
2242The commands themselves follow starting on the next line.\n\
2243Type a line containing \"end\" to indicate the end of them.\n\
2244Give \"silent\" as the first line to make the breakpoint silent;\n\
2245then no output is printed when it is hit, except what the commands print.");
2246
2247 add_com ("condition", class_breakpoint, condition_command,
2248 "Specify breakpoint number N to break only if COND is true.\n\
2249N is an integer; COND is a C expression to be evaluated whenever\n\
2250breakpoint N is reached. Actually break only when COND is nonzero.");
2251
2252 add_com ("tbreak", class_breakpoint, tbreak_command,
2253 "Set a temporary breakpoint. Args like \"break\" command.\n\
2254Like \"break\" except the breakpoint is only enabled temporarily,\n\
2255so it will be disabled when hit. Equivalent to \"break\" followed\n\
2256by using \"enable once\" on the breakpoint number.");
2257
2258 add_prefix_cmd ("enable", class_breakpoint, enable_command,
2259 "Enable some breakpoints.\n\
2260Give breakpoint numbers (separated by spaces) as arguments.\n\
2261With no subcommand, breakpoints are enabled until you command otherwise.\n\
2262This is used to cancel the effect of the \"disable\" command.\n\
2263With a subcommand you can enable temporarily.",
2264 &enablelist, "enable ", 1, &cmdlist);
2265
2266 add_abbrev_prefix_cmd ("breakpoints", class_breakpoint, enable_command,
2267 "Enable some breakpoints.\n\
2268Give breakpoint numbers (separated by spaces) as arguments.\n\
2269This is used to cancel the effect of the \"disable\" command.\n\
2270May be abbreviated to simply \"enable\".\n",
2271 &enablebreaklist, "enable breakpoints ", 1, &enablelist);
2272
2273 add_cmd ("once", no_class, enable_once_command,
2274 "Enable breakpoints for one hit. Give breakpoint numbers.\n\
2275If a breakpoint is hit while enabled in this fashion, it becomes disabled.\n\
2276See the \"tbreak\" command which sets a breakpoint and enables it once.",
2277 &enablebreaklist);
2278
2279 add_cmd ("delete", no_class, enable_delete_command,
2280 "Enable breakpoints and delete when hit. Give breakpoint numbers.\n\
2281If a breakpoint is hit while enabled in this fashion, it is deleted.",
2282 &enablebreaklist);
2283
2284 add_cmd ("delete", no_class, enable_delete_command,
2285 "Enable breakpoints and delete when hit. Give breakpoint numbers.\n\
2286If a breakpoint is hit while enabled in this fashion, it is deleted.",
2287 &enablelist);
2288
2289 add_cmd ("once", no_class, enable_once_command,
2290 "Enable breakpoints for one hit. Give breakpoint numbers.\n\
2291If a breakpoint is hit while enabled in this fashion, it becomes disabled.\n\
2292See the \"tbreak\" command which sets a breakpoint and enables it once.",
2293 &enablelist);
2294
2295 add_prefix_cmd ("disable", class_breakpoint, disable_command,
2296 "Disable some breakpoints.\n\
2297Arguments are breakpoint numbers with spaces in between.\n\
2298To disable all breakpoints, give no argument.\n\
2299A disabled breakpoint is not forgotten, but has no effect until reenabled.",
2300 &disablelist, "disable ", 1, &cmdlist);
2301 add_com_alias ("dis", "disable", class_breakpoint, 1);
2302 add_com_alias ("disa", "disable", class_breakpoint, 1);
2303
2304 add_cmd ("breakpoints", class_alias, disable_command,
2305 "Disable some breakpoints.\n\
2306Arguments are breakpoint numbers with spaces in between.\n\
2307To disable all breakpoints, give no argument.\n\
2308A disabled breakpoint is not forgotten, but has no effect until reenabled.\n\
2309This command may be abbreviated \"disable\".",
2310 &disablelist);
2311
2312 add_prefix_cmd ("delete", class_breakpoint, delete_command,
2313 "Delete some breakpoints or auto-display expressions.\n\
2314Arguments are breakpoint numbers with spaces in between.\n\
2315To delete all breakpoints, give no argument.\n\
2316\n\
2317Also a prefix command for deletion of other GDB objects.\n\
2318The \"unset\" command is also an alias for \"delete\".",
2319 &deletelist, "delete ", 1, &cmdlist);
2320 add_com_alias ("d", "delete", class_breakpoint, 1);
bd5635a1
RP
2321
2322 add_cmd ("breakpoints", class_alias, delete_command,
2323 "Delete some breakpoints or auto-display expressions.\n\
2324Arguments are breakpoint numbers with spaces in between.\n\
2325To delete all breakpoints, give no argument.\n\
2326This command may be abbreviated \"delete\".",
2327 &deletelist);
2328
2329 add_com ("clear", class_breakpoint, clear_command,
2330 "Clear breakpoint at specified line or function.\n\
2331Argument may be line number, function name, or \"*\" and an address.\n\
2332If line number is specified, all breakpoints in that line are cleared.\n\
2333If function is specified, breakpoints at beginning of function are cleared.\n\
2334If an address is specified, breakpoints at that address are cleared.\n\n\
2335With no argument, clears all breakpoints in the line that the selected frame\n\
2336is executing in.\n\
2337\n\
2338See also the \"delete\" command which clears breakpoints by number.");
2339
2340 add_com ("break", class_breakpoint, break_command,
2341 "Set breakpoint at specified line or function.\n\
2342Argument may be line number, function name, or \"*\" and an address.\n\
2343If line number is specified, break at start of code for that line.\n\
2344If function is specified, break at start of code for that function.\n\
2345If an address is specified, break at that exact address.\n\
2346With no arg, uses current execution address of selected stack frame.\n\
2347This is useful for breaking on return to a stack frame.\n\
2348\n\
2349Multiple breakpoints at one place are permitted, and useful if conditional.\n\
2350\n\
2351Do \"help breakpoints\" for info on other commands dealing with breakpoints.");
2352 add_com_alias ("b", "break", class_run, 1);
2353 add_com_alias ("br", "break", class_run, 1);
2354 add_com_alias ("bre", "break", class_run, 1);
2355 add_com_alias ("brea", "break", class_run, 1);
2356
2357 add_info ("breakpoints", breakpoints_info,
2358 "Status of all breakpoints, or breakpoint number NUMBER.\n\
2359Second column is \"y\" for enabled breakpoint, \"n\" for disabled,\n\
2360\"o\" for enabled once (disable when hit), \"d\" for enable but delete when hit.\n\
2361Then come the address and the file/line number.\n\n\
2362Convenience variable \"$_\" and default examine address for \"x\"\n\
2363are set to the address of the last breakpoint listed.\n\n\
2364Convenience variable \"$bpnum\" contains the number of the last\n\
2365breakpoint set.");
2366
2367 add_com ("catch", class_breakpoint, catch_command,
2368 "Set breakpoints to catch exceptions that are raised.\n\
2369Argument may be a single exception to catch, multiple exceptions\n\
2370to catch, or the default exception \"default\". If no arguments\n\
2371are given, breakpoints are set at all exception handlers catch clauses\n\
2372within the current scope.\n\
2373\n\
2374A condition specified for the catch applies to all breakpoints set\n\
2375with this command\n\
2376\n\
2377Do \"help breakpoints\" for info on other commands dealing with breakpoints.");
2378
2379 add_com ("watch", class_breakpoint, watch_command,
2380 "Set a watchpoint for an expression.\n\
2381A watchpoint stops execution of your program whenever the value of\n\
2382an expression changes.");
2383
2384 add_info ("watchpoints", watchpoints_info,
2385 "Status of all watchpoints, or watchpoint number NUMBER.\n\
2386Second column is \"y\" for enabled watchpoints, \"n\" for disabled.");
2387}
This page took 0.11549 seconds and 4 git commands to generate.