This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
This patch add target attributes $break_count_on, $break_count_select and $break_count_val. They make gdbserver support a function that count how many times the breakpoint is passed.
$break_count_on is the switch of the breakpoint count function. The default value of it is 0, the breakpoint count function is closed. The default value of it is 1, function is opened and when inferior stop and continue again. The count value of all the breakpoints will reset to 0. If it is set to 2, function is opened and the count value will not be reset.
$break_count_val can access to the value of a breakpoint count if you use GDB access it. And you can use it inside the condition of the breakpoint, its value is the value of current breakpoint count.
For example: (gdb) target remote :1234 Remote debugging using :1234 Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done. Loaded symbols for /lib64/ld-linux-x86-64.so.2 0x00007ffff7ddb6b0 in ?? () from /lib64/ld-linux-x86-64.so.2 (gdb) list 1 int 2 main() 3 { 4 while (1) 5 printf("123\n"); 6 } (gdb) set $break_count_on=1 (gdb) b 5 Breakpoint 1 at 0x4004f8: file w.c, line 5. (gdb) condition 1 ($break_count_val == 10) (gdb) c Continuing.
Breakpoint 1, main () at w.c:5 5 printf("123\n");
In gdbserver part, you can see that: 123 123 123 123 123 123 123 123 123
And you can use this function to count how many times the a address passed, for example: (gdb) set non-stop on (gdb) set target-async on (gdb) target remote :1234 Remote debugging using :1234 [New Thread 9363] (gdb) [Thread 9363] #1 stopped. 0x00007ffff7ddb6b0 in ?? () set $break_count_on=2 (gdb) list 1 int 2 main() 3 { 4 while (1) 5 printf("123\n"); 6 } (gdb) b 5 Breakpoint 1 at 0x4004f8: file w.c, line 5. (gdb) condition 1 ($break_count_val == 0) (gdb) c& Continuing. (gdb) p $break_count_val $1 = 122472 (gdb) p $break_count_val $2 = 136000
Thanks, Hui
* config.in (BREAK_COUNT): New macro. * configure (--enable-break-count): New argument. * configure.ac (--enable-break-count): New argument. * inferiors.c (remove_process): Call break_count_list_remove_all. * linux-low.c (linux_wait_1): Call break_count_increase. * mem-break.c (break_count_s): New struct. (raw_breakpoint): Add count. (break_count_list_create, break_count_list_remove): New function. (current_break_count): New static variable. (gdb_condition_true_at_breakpoint): Set current_break_count. (break_count_list_remove_all): New function. (break_count_list_reset_s): New struct. (break_count_list_reset_1, break_count_list_reset, break_count_val, break_count_increase, get_target_attribute, set_target_attribute): New function. * mem-break.h (break_count_list_remove_all, break_count_list_reset, break_count_val, break_count_increase, get_target_attribute, set_target_attribute): New function. * server.c (start_inferior): Call break_count_list_reset. (handle_general_set): Call set_target_attribute. (handle_qxfer_target_attributes): New function. (qxfer_packets): Add "target-attributes". (handle_query): Add ";qXfer:target-attributes:read+". (handle_query): Call get_target_attribute. (handle_v_cont): Call break_count_list_reset. (myresume): Ditto. (process_serial_event): Ditto. (handle_target_event): Ditto. * server.h (break_count_s): New struct. (process_info): Add break_count_on, break_count_list and break_count_select. * tracepoint.c (get_trace_state_variable_value): Call break_count_val.
Attachment:
target_attribute_server_count.txt
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |