* 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).