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]

Re: [rfc, rfa/doc] Multi-threaded watchpoint improvements


Hi Daniel,

This is what i get while trying to use a hardware watchpoint to monitor
an int variable "i" that changes during a for statement (attached). Upon
further investigation, it seems GDB is only calling
"breakpoint_delete_event". I don't see GDB calling
"breakpoint_create_event" anywhere except in the momment i created the
watchpoint up there, so i presume that's the reason it's not triggering.

This is the event log:

(gdb) set debug event 1
(gdb) start
breakpoint_create_event (CREATED!)
Breakpoint 1 at 0x10000738: file testsuite/gdb.base/watch-thread_num.c,
line 39.
Starting program: /home/luis/src/gdb/gdb-head/git/gdb/test
[Thread debugging using libthread_db enabled]
[New Thread 0x400000257c0 (LWP 3287)]
[Switching to Thread 0x400000257c0 (LWP 3287)]
breakpoint_delete_event (DELETED!)
main () at testsuite/gdb.base/watch-thread_num.c:39
39          for (i = 0; i < NUM; i++)
(gdb) watch i
During symbol reading, incomplete CFI data; unspecified registers (e.g.,
r0) at 0x10000738.
breakpoint_create_event (CREATED!)
Hardware watchpoint 2: i
(gdb) n
41              res = pthread_create(&threads[i],
(gdb)
[New Thread 0x40000a26240 (LWP 3290)]
breakpoint_delete_event (DELETED! After this point, no more creations.)
39          for (i = 0; i < NUM; i++)
(gdb)
41              res = pthread_create(&threads[i],
(gdb)
[New Thread 0x40001226240 (LWP 3291)]
breakpoint_delete_event
39          for (i = 0; i < NUM; i++)
(gdb)
41              res = pthread_create(&threads[i],
(gdb)
[New Thread 0x40001a26240 (LWP 3292)]
breakpoint_delete_event
39          for (i = 0; i < NUM; i++)
(gdb)                                           

Notice that after i create the watchpoint, gdb doesn't bring them back
during execution, only deletes them.

Regards

-- 
Luis Machado
IBM Linux Technology Center
e-mail: luisgpm@linux.vnet.ibm.com
(gdb) watch i
During symbol reading, incomplete CFI data; unspecified registers (e.g., r0) at 0x10000738.
Hardware watchpoint 10: i
(gdb) set debug infrun 1
(gdb) n
infrun: proceed (addr=0xffffffffffffffff, signal=144, step=1)
infrun: resume (step=1, signal=0)
infrun: wait_for_inferior
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x1000073c
infrun: stepping inside range [0x10000738-0x10000744]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000740
infrun: stepping inside range [0x10000738-0x10000744]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000788
infrun: keep going
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x1000078c
infrun: stepping inside range [0x1000077c-0x10000794]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000790
infrun: stepping inside range [0x1000077c-0x10000794]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000744
infrun: stepped to a different line
infrun: stop_stepping
41              res = pthread_create(&threads[i],
(gdb)
infrun: proceed (addr=0xffffffffffffffff, signal=144, step=1)
infrun: resume (step=1, signal=0)
infrun: wait_for_inferior
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000748
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x1000074c
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000750
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000754
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000758
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x1000075c
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000760
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000764
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000768
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x1000076c
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000510
infrun: stepped into subroutine
infrun: inserting step-resume breakpoint at 0x10000770
infrun: resume (step=0, signal=0)
infrun: prepare_to_wait
[New Thread 0x40000a26240 (LWP 1646)]
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x40000066ef0
infrun: BPSTAT_WHAT_SINGLE
infrun: step-resume breakpoint is inserted
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x4000006885c
infrun: trap expected
infrun: step-resume breakpoint is inserted
infrun: resume (step=0, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000770
infrun: BPSTAT_WHAT_STEP_RESUME
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000774
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000778
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x1000077c
infrun: stepped to a different line
infrun: stop_stepping
39          for (i = 0; i < NUM; i++)
(gdb)
infrun: proceed (addr=0xffffffffffffffff, signal=144, step=1)
infrun: resume (step=1, signal=0)
infrun: wait_for_inferior
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000780
infrun: stepping inside range [0x1000077c-0x10000794]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000784
infrun: stepping inside range [0x1000077c-0x10000794]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000788
infrun: stepping inside range [0x1000077c-0x10000794]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x1000078c
infrun: stepping inside range [0x1000077c-0x10000794]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000790
infrun: stepping inside range [0x1000077c-0x10000794]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000744
infrun: stepped to a different line
infrun: stop_stepping
41              res = pthread_create(&threads[i],
(gdb)
infrun: proceed (addr=0xffffffffffffffff, signal=144, step=1)
infrun: resume (step=1, signal=0)
infrun: wait_for_inferior
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000748
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x1000074c
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000750
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000754
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000758
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x1000075c
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000760
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000764
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000768
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x1000076c
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000510
infrun: stepped into subroutine
infrun: inserting step-resume breakpoint at 0x10000770
infrun: resume (step=0, signal=0)
infrun: prepare_to_wait
[New Thread 0x40001226240 (LWP 1647)]
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x40000066ef0
infrun: BPSTAT_WHAT_SINGLE
infrun: step-resume breakpoint is inserted
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x4000006885c
infrun: trap expected
infrun: step-resume breakpoint is inserted
infrun: resume (step=0, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000770
infrun: BPSTAT_WHAT_STEP_RESUME
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000774
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000778
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x1000077c
infrun: stepped to a different line
infrun: stop_stepping
39          for (i = 0; i < NUM; i++)
(gdb)
infrun: proceed (addr=0xffffffffffffffff, signal=144, step=1)
infrun: resume (step=1, signal=0)
infrun: wait_for_inferior
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000780
infrun: stepping inside range [0x1000077c-0x10000794]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000784
infrun: stepping inside range [0x1000077c-0x10000794]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000788
infrun: stepping inside range [0x1000077c-0x10000794]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x1000078c
infrun: stepping inside range [0x1000077c-0x10000794]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000790
infrun: stepping inside range [0x1000077c-0x10000794]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000744
infrun: stepped to a different line
infrun: stop_stepping
41              res = pthread_create(&threads[i],
(gdb)
infrun: proceed (addr=0xffffffffffffffff, signal=144, step=1)
infrun: resume (step=1, signal=0)
infrun: wait_for_inferior
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000748
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x1000074c
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000750
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000754
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000758
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x1000075c
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000760
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000764
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000768
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x1000076c
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000510
infrun: stepped into subroutine
infrun: inserting step-resume breakpoint at 0x10000770
infrun: resume (step=0, signal=0)
infrun: prepare_to_wait
[New Thread 0x40001a26240 (LWP 1648)]
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x40000066ef0
infrun: BPSTAT_WHAT_SINGLE
infrun: step-resume breakpoint is inserted
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x4000006885c
infrun: trap expected
infrun: step-resume breakpoint is inserted
infrun: resume (step=0, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000770
infrun: BPSTAT_WHAT_STEP_RESUME
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000774
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000778
infrun: stepping inside range [0x10000744-0x1000077c]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x1000077c
infrun: stepped to a different line
infrun: stop_stepping
39          for (i = 0; i < NUM; i++)
(gdb)
infrun: proceed (addr=0xffffffffffffffff, signal=144, step=1)
infrun: resume (step=1, signal=0)
infrun: wait_for_inferior
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000780
infrun: stepping inside range [0x1000077c-0x10000794]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000784
infrun: stepping inside range [0x1000077c-0x10000794]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000788
infrun: stepping inside range [0x1000077c-0x10000794]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x1000078c
infrun: stepping inside range [0x1000077c-0x10000794]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000790
infrun: stepping inside range [0x1000077c-0x10000794]
infrun: resume (step=1, signal=0)
infrun: prepare_to_wait
infrun: infwait_normal_state
infrun: TARGET_WAITKIND_STOPPED
infrun: stop_pc = 0x10000744
infrun: stepped to a different line
infrun: stop_stepping
41              res = pthread_create(&threads[i],
(gdb) 

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]