forked from Imagelibrary/binutils-gdb
gdb
PR c++/9593: * thread.c (clear_thread_inferior_resources): Call delete_longjmp_breakpoint. * infrun.c (handle_inferior_event): Handle exception breakpoints. (handle_inferior_event): Likewise. (insert_exception_resume_breakpoint): New function. (check_exception_resume): Likewise. * inferior.h (delete_longjmp_breakpoint_cleanup): Declare. * infcmd.c (delete_longjmp_breakpoint_cleanup): No longer static. (step_1): Set thread's initiating frame. (until_next_continuation): New function. (until_next_command): Support exception breakpoints. (finish_command_continuation): Delete longjmp breakpoint. (finish_forward): Support exception breakpoints. * gdbthread.h (struct thread_info) <initiating_frame>: New field. * breakpoint.h (enum bptype) <bp_exception, bp_exception_resume, bp_exception_master>: New constants. (struct bpstat_what) <is_longjmp>: New field. (set_longjmp_breakpoint): Update. * breakpoint.c (create_exception_master_breakpoint): New function. (update_breakpoints_after_exec): Handle bp_exception_master. Call create_exception_master_breakpoint. (print_it_typical): Handle bp_exception_master, bp_exception. (bpstat_stop_status): Handle bp_exception_master. (bpstat_what): Handle bp_exception_master, bp_exception, bp_exception_resume. (bptype_string): Likewise. (print_one_breakpoint_location): Likewise. (allocate_bp_location): Likewise. (set_longjmp_breakpoint): Handle exception breakpoints. Change interface. (delete_longjmp_breakpoint): Handle exception breakpoints. (mention): Likewise. (struct until_break_command_continuation_args) <thread_num>: New field. (until_break_command_continuation): Call delete_longjmp_breakpoint. (until_break_command): Support exception breakpoints. (delete_command): Likewise. (breakpoint_re_set_one): Likewise. (breakpoint_re_set): Likewise. gdb/testuite * gdb.java/jnpe.java: New file. * gdb.java/jnpe.exp: New file. * gdb.cp/nextoverthrow.exp: New file. * gdb.cp/nextoverthrow.cc: New file.
This commit is contained in:
@@ -40,6 +40,9 @@ struct thread_control_state
|
||||
/* Step-resume or longjmp-resume breakpoint. */
|
||||
struct breakpoint *step_resume_breakpoint;
|
||||
|
||||
/* Exception-resume breakpoint. */
|
||||
struct breakpoint *exception_resume_breakpoint;
|
||||
|
||||
/* Range to single step within.
|
||||
|
||||
If this is nonzero, respond to a single-step signal by continuing
|
||||
@@ -207,6 +210,10 @@ struct thread_info
|
||||
/* True if this thread has been explicitly requested to stop. */
|
||||
int stop_requested;
|
||||
|
||||
/* The initiating frame of a nexting operation, used for deciding
|
||||
which exceptions to intercept. */
|
||||
struct frame_id initiating_frame;
|
||||
|
||||
/* Private data used by the target vector implementation. */
|
||||
struct private_thread_info *private;
|
||||
|
||||
@@ -243,6 +250,9 @@ extern void delete_thread_silent (ptid_t);
|
||||
/* Delete a step_resume_breakpoint from the thread database. */
|
||||
extern void delete_step_resume_breakpoint (struct thread_info *);
|
||||
|
||||
/* Delete an exception_resume_breakpoint from the thread database. */
|
||||
extern void delete_exception_resume_breakpoint (struct thread_info *);
|
||||
|
||||
/* Translate the integer thread id (GDB's homegrown id, not the system's)
|
||||
into a "pid" (which may be overloaded with extra thread information). */
|
||||
extern ptid_t thread_id_to_pid (int);
|
||||
|
||||
Reference in New Issue
Block a user