Re: GDB Remote debug: Why several "$Z0,address,length" msg when only set one breakpoint?
Peng Fan <[email protected]>
| Newsgroups | gmane.comp.gdb.devel |
|---|---|
| Message-ID | <[email protected]> |
On 08/27/2014 08:32 AM, Yao Qi wrote: > Peng Fan <[email protected]> writes: > > It is a typical step-over-breakpoint process in GDB, > >> Sending packet: $m87809580,4#7a...Ack >> Packet received: f0452de9 >> Sending packet: $m87809580,4#7a...Ack >> Packet received: f0452de9 > > Looks like the program hits the breakpoint on 0x87809580, and 'c' > command is being executed. Before GDB resume the inferior, it will > execute the instruction in a single-step fashion on the address > where the breakpoint is set, because it isn't executed yet. Yeah. the program hits the breakpoint at 0x87809580. then 'c'. > > GDB read the instruction on address 0x87809580, decode it and know what > is the address of next instruction, > >> Sending packet: $Z0,87809584,4#c7...Ack >> Packet received: OK > > and insert the breakpoint on next instruction for software single step, > >> Sending packet: $Hc0#db...Ack >> Packet received: >> Sending packet: $c#63...Ack >> Packet received: T050f:84958087;0d:a41355bf; >> Sending packet: $z0,87809584,4#e7...Ack >> Packet received: OK >> Sending packet: $qTStatus#49...Ack > > resume the program, and it hits the breakpoint on 0x87809584. Then, > instruction on 0x8780950 is executed. > >> Packet received: >> Sending packet: $Z0,87800000,4#ad...Ack >> Packet received: OK >> Sending packet: $Z0,87809580,4#c3...Ack >> Packet received: OK > > Restore the breakpoint on 0x87809580. > >> Sending packet: $Hc0#db...Ack >> Packet received: >> Sending packet: $c#63...Ack > > Resume the inferior and keep waiting. Yeah. Detailed. Got it. Thanks. > >> >> Actually the breakpoint is at 0x87809580, but why first set breakpoint >> at 0x87809584 then remove it then set breakpoint at 0x87809580? >> > > My comments above answer your question. > >> Also the first time set a breakpoint then continue. >> (gdb) c >> Continuing. >> Sending packet: $qTStatus#49...Ack >> Packet received: >> Sending packet: $Z0,87800000,4#ad...Ack >> Packet received: OK >> Packet Z0 (software-breakpoint) is supported >> Sending packet: $Z0,87809580,4#c3...Ack >> Packet received: OK >> Sending packet: $vCont?#49...Ack >> Packet received: >> Packet vCont (verbose-resume) is NOT supported >> Sending packet: $Hc0#db...Ack >> Packet received: >> Sending packet: $c#63...Ack >> >> why two Z0 here? I only set break at 0x87809580, but gdb send a break >> set at 0x87800000 which is the beginning of the elf entry. > > What is the symbol on 0x87800000? GDB inserts some internal breakpoints > for some purpose, collecting interesting events, for example. > Actually, there is a pair of "$z0,87800000,4" and "$Z0,87800000,4" of each 'c' except the first time to executing 'c'. The first time 'c', there is only "$Z0,87800000,4" to set a breakpoint. 0x87800000 is the entry symbol address of u-boot elf of my platform. 1 2 u-boot: file format elf32-littlearm 3 4 5 Disassembly of section .text: 6 7 87800000 <__image_copy_start>: 8 87800000: 11 00 00 ea 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 9 87800010: 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 Regards, Peng.