Files
binutils-gdb/gdb/testsuite/gdb.base/step-into-other-file.h
Tom de Vries b464e193d1 [gdb] Notice when stepping into different file
Consider the following test-case:
...
$ cat -n test.c
     1	int var;
     2
     3	int
     4	foo (void)
     5	{
     6	  var = 1;
     7	#include "test.h"
     8	}
     9
    10	int
    11	main ()
    12	{
    13	  return foo ();
    14	}
$ cat -n test.h
     1	  return 1;
$ gcc test.c -g
...

When stepping through the test-case, gdb doesn't make it explicit that line 1
is not in test.c:
...
Temporary breakpoint 1, main () at test.c:13
13	  return foo ();
(gdb) step
foo () at test.c:6
6	  var = 1;
(gdb) n
1	  return 1;
(gdb)
8	}
(gdb)
...
which makes it easy to misinterpret the output.

This is with the default "print frame-info" == auto, with documented
behaviour [1]:
...
stepi will switch between source-line and source-and-location depending on the
program counter.
...

What is actually implemented is that source-line is used unless stepping into
or out of a function.

The problem can be worked around by using
"set print frame-info source-and-location", but that's a bit verbose.

Instead, change the behaviour of "print frame-info" == auto to also use
source-and-location when stepping into another file, which gets us:
...
(gdb) n
foo () at test.h:1
1	  return 1;
...

Tested on x86_64-linux.

Reviewed-By: Kevin Buettner <kevinb@redhat.com>
Reviewed-By: Kévin Le Gouguec <legouguec@adacore.com>

PR gdb/32011
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32011

[1] https://sourceware.org/gdb/current/onlinedocs/gdb.html/Print-Settings.html#index-set-print-frame_002dinfo
2024-08-05 14:00:42 +02:00

19 lines
761 B
C

/* This testcase is part of GDB, the GNU debugger.
Copyright 2024 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
return 1;