public inbox for gdb@sourceware.org
 help / color / mirror / Atom feed
* Re: How to interrupt a stepping GDB ?
@ 2006-06-20 12:24 Daniel Jacobowitz
  2006-07-03 18:28 ` Jim Blandy
  0 siblings, 1 reply; 4+ messages in thread
From: Daniel Jacobowitz @ 2006-06-20 12:24 UTC (permalink / raw)
  To: Sascha; +Cc: gdb

On Sun, Jun 18, 2006 at 11:55:19AM +0200, Sascha wrote:
> On a local, fast machine this might be okay. But on a (slow) remote target,
> stepping a loop like this will take minutes or hours because GDB sends
> thousands or even millions of step commands until a == 0;

[The correct fix for this is to add a "step range" packet, which will
speed up the process immensely.  As it happens, I hope to do that for
the next version of GDB after 6.5.]

> Now the question: If I notice such a case - how can I interrupt GDB? If I
> notice that the stepping would take a long time I'd rather interrupt GDB and
> set a breakpoint on the next line. CTRL-C does not work. And waiting hours
> or shutting down GDB is no acceptable.

Breakpoint 1, main () at loop.c:3
3         int a = 200000;
(gdb) s
4         for (; a; --a);
(gdb) n

Program received signal SIGINT, Interrupt.
0x000000000040043c in main () at loop.c:4
4         for (; a; --a);

CTRL-C works for me...

-- 
Daniel Jacobowitz
CodeSourcery

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

* Re: How to interrupt a stepping GDB ?
  2006-06-20 12:24 How to interrupt a stepping GDB ? Daniel Jacobowitz
@ 2006-07-03 18:28 ` Jim Blandy
  2006-07-03 19:20   ` Mark Kettenis
  0 siblings, 1 reply; 4+ messages in thread
From: Jim Blandy @ 2006-07-03 18:28 UTC (permalink / raw)
  To: Sascha; +Cc: gdb


Daniel Jacobowitz <drow@false.org> writes:
> On Sun, Jun 18, 2006 at 11:55:19AM +0200, Sascha wrote:
>> On a local, fast machine this might be okay. But on a (slow) remote target,
>> stepping a loop like this will take minutes or hours because GDB sends
>> thousands or even millions of step commands until a == 0;
>
> [The correct fix for this is to add a "step range" packet, which will
> speed up the process immensely.  As it happens, I hope to do that for
> the next version of GDB after 6.5.]
>
>> Now the question: If I notice such a case - how can I interrupt GDB? If I
>> notice that the stepping would take a long time I'd rather interrupt GDB and
>> set a breakpoint on the next line. CTRL-C does not work. And waiting hours
>> or shutting down GDB is no acceptable.
>
> Breakpoint 1, main () at loop.c:3
> 3         int a = 200000;
> (gdb) s
> 4         for (; a; --a);
> (gdb) n
>
> Program received signal SIGINT, Interrupt.
> 0x000000000040043c in main () at loop.c:4
> 4         for (; a; --a);
>
> CTRL-C works for me...

Maybe this has been discussed before, but:

Should 'step' stop stepping if the PC fails to make forward progress?
In every situation I can think of, that would mean that a loop
iteration has been completed.  It shouldn't affect loops that cover
more than one line.

But it might be confusing to the user: "I told it to step, and nothing
happened!"

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

* Re: How to interrupt a stepping GDB ?
  2006-07-03 18:28 ` Jim Blandy
@ 2006-07-03 19:20   ` Mark Kettenis
  0 siblings, 0 replies; 4+ messages in thread
From: Mark Kettenis @ 2006-07-03 19:20 UTC (permalink / raw)
  To: jimb; +Cc: sascha, gdb

> From: Jim Blandy <jimb@codesourcery.com>
> Date: Mon, 03 Jul 2006 11:28:46 -0700
> 
> Maybe this has been discussed before, but:
> 
> Should 'step' stop stepping if the PC fails to make forward progress?
> In every situation I can think of, that would mean that a loop
> iteration has been completed.  It shouldn't affect loops that cover
> more than one line.

I think that's wrong; "step" operators on a line-level, not statement
level.

> But it might be confusing to the user: "I told it to step, and nothing
> happened!"

I think that would indeed be a problem.

The solution for the problem is to change the source code such that
there actually is a statement inside the loop:

  while(a)
    a--;

or perhaps

  for (; a; a--)
    ;

will even work.

Mark

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

* How to interrupt a stepping GDB ?
@ 2006-06-19  2:13 Sascha
  0 siblings, 0 replies; 4+ messages in thread
From: Sascha @ 2006-06-19  2:13 UTC (permalink / raw)
  To: gdb

Hello,

I've got a question about GDB and the "next/step" command.

Situation:
The debugger stopped at the C instruction:
"for (; a; --a);"

This is a simple loop counting down to zero.

If you "next", GDB will step through that loop until a == 0.

On a local, fast machine this might be okay. But on a (slow) remote target,
stepping a loop like this will take minutes or hours because GDB sends
thousands or even millions of step commands until a == 0;

Now the question: If I notice such a case - how can I interrupt GDB? If I
notice that the stepping would take a long time I'd rather interrupt GDB and
set a breakpoint on the next line. CTRL-C does not work. And waiting hours
or shutting down GDB is no acceptable.

Thanks

Sascha

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

end of thread, other threads:[~2006-07-03 19:20 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-06-20 12:24 How to interrupt a stepping GDB ? Daniel Jacobowitz
2006-07-03 18:28 ` Jim Blandy
2006-07-03 19:20   ` Mark Kettenis
  -- strict thread matches above, loose matches on Subject: below --
2006-06-19  2:13 Sascha

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).