Mirror of the gdb mailing list
 help / color / mirror / Atom feed
* Remote Debugging with NEXT Command
@ 2014-06-10 21:02 Ken Mandelberg
  2014-06-10 21:13 ` Paul_Koning
  0 siblings, 1 reply; 6+ messages in thread
From: Ken Mandelberg @ 2014-06-10 21:02 UTC (permalink / raw)
  To: gdb

I'm doing remote gdb deugging to a stub implemented on the target over 
tcp. SI works and NEXT works well enough skipping over a function call.

What can be very slow is NEXT from one C statement to the next.

When NEXT skips over a function call it implements it by setting a 
breakpoint at the return address.

When NEXT skips from one C statement to the next, it does it by doing 
repeated SI's. This forces the target to send back a bunch of state at
each SI. This is slow and very slow if the C statement actually has a 
loop in it.

Is there any way around this other than carefully avoiding NEXT in the 
worst cases and manually setting breakpoints/CONT?



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Remote Debugging with NEXT Command
  2014-06-10 21:02 Remote Debugging with NEXT Command Ken Mandelberg
@ 2014-06-10 21:13 ` Paul_Koning
  2014-06-10 21:21   ` Ken Mandelberg
  0 siblings, 1 reply; 6+ messages in thread
From: Paul_Koning @ 2014-06-10 21:13 UTC (permalink / raw)
  To: km; +Cc: gdb


On Jun 10, 2014, at 5:02 PM, Ken Mandelberg <km@mathcs.emory.edu> wrote:

> I'm doing remote gdb deugging to a stub implemented on the target over tcp. SI works and NEXT works well enough skipping over a function call.
> 
> What can be very slow is NEXT from one C statement to the next.
> 
> When NEXT skips over a function call it implements it by setting a breakpoint at the return address.
> 
> When NEXT skips from one C statement to the next, it does it by doing repeated SI's. This forces the target to send back a bunch of state at
> each SI. This is slow and very slow if the C statement actually has a loop in it.
> 
> Is there any way around this other than carefully avoiding NEXT in the worst cases and manually setting breakpoints/CONT?

If your stub supports breakpoints, it will take less work for GDB to do the stepping.  Basic stepping involves placing break instructions and restoring the content, repeatedly.  That’s a lot more round trips but it requires less stub magic.

	paul


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Remote Debugging with NEXT Command
  2014-06-10 21:13 ` Paul_Koning
@ 2014-06-10 21:21   ` Ken Mandelberg
  2014-06-11 10:01     ` Abid, Hafiz
  2014-06-11 10:26     ` Luis Machado
  0 siblings, 2 replies; 6+ messages in thread
From: Ken Mandelberg @ 2014-06-10 21:21 UTC (permalink / raw)
  To: Paul_Koning; +Cc: gdb

On 06/10/2014 05:12 PM, Paul_Koning@dell.com wrote:
>
> On Jun 10, 2014, at 5:02 PM, Ken Mandelberg <km@mathcs.emory.edu> wrote:
>
>> I'm doing remote gdb deugging to a stub implemented on the target over tcp. SI works and NEXT works well enough skipping over a function call.
>>
>> What can be very slow is NEXT from one C statement to the next.
>>
>> When NEXT skips over a function call it implements it by setting a breakpoint at the return address.
>>
>> When NEXT skips from one C statement to the next, it does it by doing repeated SI's. This forces the target to send back a bunch of state at
>> each SI. This is slow and very slow if the C statement actually has a loop in it.
>>
>> Is there any way around this other than carefully avoiding NEXT in the worst cases and manually setting breakpoints/CONT?
>
> If your stub supports breakpoints, it will take less work for GDB to do the stepping.  Basic stepping involves placing break instructions and restoring the content, repeatedly.  ThatÂ’s a lot more round trips but it requires less stub magic.
>
> 	paul
>
>

Yes, the stub supports breakpoints. Thats why NEXT through a function 
call works so well. gdb is smart enough to ask the stub to set a 
breakpoint at the return address,

When gdb is just trying to get to the next statement in the current 
function with NEXT, it sends the stub a bunch of SI's, which is the
problem since its so slow.

I can put more logic in the stub, but I can't change what gdb does, and 
gdb doesn't give the stub any indication that it is doing NEXT.



^ permalink raw reply	[flat|nested] 6+ messages in thread

* RE: Remote Debugging with NEXT Command
  2014-06-10 21:21   ` Ken Mandelberg
@ 2014-06-11 10:01     ` Abid, Hafiz
  2014-06-11 15:24       ` Ken Mandelberg
  2014-06-11 10:26     ` Luis Machado
  1 sibling, 1 reply; 6+ messages in thread
From: Abid, Hafiz @ 2014-06-11 10:01 UTC (permalink / raw)
  To: Ken Mandelberg, Paul_Koning; +Cc: gdb



> -----Original Message-----
> From: gdb-owner@sourceware.org [mailto:gdb-owner@sourceware.org] On
> Behalf Of Ken Mandelberg
> Sent: 10 June 2014 22:21
> To: Paul_Koning@dell.com
> Cc: gdb@sourceware.org
> Subject: Re: Remote Debugging with NEXT Command
> 
> On 06/10/2014 05:12 PM, Paul_Koning@dell.com wrote:
> >
> > On Jun 10, 2014, at 5:02 PM, Ken Mandelberg <km@mathcs.emory.edu>
> wrote:
> >
> >> I'm doing remote gdb deugging to a stub implemented on the target over
> tcp. SI works and NEXT works well enough skipping over a function call.
> >>
> >> What can be very slow is NEXT from one C statement to the next.
> >>
> >> When NEXT skips over a function call it implements it by setting a
> breakpoint at the return address.
> >>
> >> When NEXT skips from one C statement to the next, it does it by doing
> >> repeated SI's. This forces the target to send back a bunch of state at each
> SI. This is slow and very slow if the C statement actually has a loop in it.
> >>
> >> Is there any way around this other than carefully avoiding NEXT in the
> worst cases and manually setting breakpoints/CONT?
> >
> > If your stub supports breakpoints, it will take less work for GDB to do the
> stepping.  Basic stepping involves placing break instructions and restoring
> the content, repeatedly.  That's a lot more round trips but it requires less
> stub magic.
> >
> > 	paul
> >
> >
> 
> Yes, the stub supports breakpoints. Thats why NEXT through a function call
> works so well. gdb is smart enough to ask the stub to set a breakpoint at the
> return address,
> 
> When gdb is just trying to get to the next statement in the current function
> with NEXT, it sends the stub a bunch of SI's, which is the problem since its so
> slow.
> 
> I can put more logic in the stub, but I can't change what gdb does, and gdb
> doesn't give the stub any indication that it is doing NEXT.
> 
Have you looked at the range stepping? It might be what you are looking for.
https://sourceware.org/gdb/onlinedocs/gdb/Continuing-and-Stepping.html#range-stepping

Regards,
Abid



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Remote Debugging with NEXT Command
  2014-06-10 21:21   ` Ken Mandelberg
  2014-06-11 10:01     ` Abid, Hafiz
@ 2014-06-11 10:26     ` Luis Machado
  1 sibling, 0 replies; 6+ messages in thread
From: Luis Machado @ 2014-06-11 10:26 UTC (permalink / raw)
  To: Ken Mandelberg, Paul_Koning; +Cc: gdb

On 06/10/2014 10:21 PM, Ken Mandelberg wrote:
> On 06/10/2014 05:12 PM, Paul_Koning@dell.com wrote:
>>
>> On Jun 10, 2014, at 5:02 PM, Ken Mandelberg <km@mathcs.emory.edu> wrote:
>>
>>> I'm doing remote gdb deugging to a stub implemented on the target
>>> over tcp. SI works and NEXT works well enough skipping over a
>>> function call.
>>>
>>> What can be very slow is NEXT from one C statement to the next.
>>>
>>> When NEXT skips over a function call it implements it by setting a
>>> breakpoint at the return address.
>>>
>>> When NEXT skips from one C statement to the next, it does it by doing
>>> repeated SI's. This forces the target to send back a bunch of state at
>>> each SI. This is slow and very slow if the C statement actually has a
>>> loop in it.
>>>
>>> Is there any way around this other than carefully avoiding NEXT in
>>> the worst cases and manually setting breakpoints/CONT?
>>
>> If your stub supports breakpoints, it will take less work for GDB to
>> do the stepping.  Basic stepping involves placing break instructions
>> and restoring the content, repeatedly.  ThatÂ’s a lot more round trips
>> but it requires less stub magic.
>>
>>     paul
>>
>>
>
> Yes, the stub supports breakpoints. Thats why NEXT through a function
> call works so well. gdb is smart enough to ask the stub to set a
> breakpoint at the return address,
>
> When gdb is just trying to get to the next statement in the current
> function with NEXT, it sends the stub a bunch of SI's, which is the
> problem since its so slow.
>
> I can put more logic in the stub, but I can't change what gdb does, and
> gdb doesn't give the stub any indication that it is doing NEXT.

If the code only moved in a specific direction, this logic/optimization 
of just continuing to a specific next statement's associated address 
would work just fine.

In practice, though, code can jump around and go back, like branches, 
loops and optimized code.

Therefore GDB needs to do individual instruction-steps in order to sense 
line number changes. When it detects such a change, it will stop and let 
the user know.

The next line could be 200 lines above, or a single line below. It is 
hard to predict.

Skipping functions is easier though, you just continue to its return 
address and that's it.

It is an area that could probably be improved. Range-stepping is a step 
towards that goal.

Luis


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Remote Debugging with NEXT Command
  2014-06-11 10:01     ` Abid, Hafiz
@ 2014-06-11 15:24       ` Ken Mandelberg
  0 siblings, 0 replies; 6+ messages in thread
From: Ken Mandelberg @ 2014-06-11 15:24 UTC (permalink / raw)
  To: gdb


Thanks all!

We had missed taking advantage of range stepping in the stub, and not 
used the vCont packet. It's made all the difference for NEXT.



^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2014-06-11 15:24 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-06-10 21:02 Remote Debugging with NEXT Command Ken Mandelberg
2014-06-10 21:13 ` Paul_Koning
2014-06-10 21:21   ` Ken Mandelberg
2014-06-11 10:01     ` Abid, Hafiz
2014-06-11 15:24       ` Ken Mandelberg
2014-06-11 10:26     ` Luis Machado

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox