public inbox for gdb@sourceware.org
 help / color / mirror / Atom feed
* GDB cannot step or break into template functions compiled with g++ -Og
@ 2022-11-01  9:40 Iru Cai
  0 siblings, 0 replies; only message in thread
From: Iru Cai @ 2022-11-01  9:40 UTC (permalink / raw)
  To: gdb

Hi,

Tested with GDB 12.1 and GDB in binutils-gdb git 1751ca43fda, I find 
that GDB cannot step or break into C++ template functions compiled with 
g++ -Og (GCC version 12.2.0), for example:

```

template <typename T = int>
int t0(int n)
{
     int sum = 0;
     for (int i = 0; i < n; ++i) {
         sum += i * i;
     }
     return sum;
}

int t1(int n)
{
     int sum = 0;
     for (int i = 0; i < n; ++i) {
         sum += i * i;
     }
     return sum;
}

int main()
{
     int a = t0(5);
     int b = t1(5);
     return a + b;
}

```

compile with: g++ -g -Og -o test test.cpp

Debugging with GDB 12.1, I get:

```

(gdb) b t0
Breakpoint 1 at 0x1151: file test.cpp, line 2.
(gdb) b t1
Breakpoint 2 at 0x1119: file test.cpp, line 14.
(gdb) r
Starting program: /tmp/test

Breakpoint 1, t0<int> (n=n@entry=5) at test.cpp:2
2    int t0(int n)
(gdb) s
main () at test.cpp:23
23        int b = t1(5);
(gdb) c
Continuing.

Breakpoint 2, t1 (n=n@entry=5) at test.cpp:14
14        for (int i = 0; i < n; ++i) {
(gdb) n
15            sum += i * i;

```

With GDB git, it even cannot recognize the template function name unless 
I use the full name:

```

(gdb) b t0
Function "t0" not defined.
Make breakpoint pending on future shared library load? (y or [n]) n
(gdb) b t0<int>(int)
Breakpoint 1 at 0x1151: file test.cpp, line 2.
(gdb) r
Starting program: /tmp/test

Breakpoint 1, t0<int> (n=n@entry=5) at test.cpp:2
2    int t0(int n)
(gdb) s
main () at test.cpp:23
23        int b = t1(5);

```

While LLDB 14.0.6 can step into this function:

```

(lldb) b t0
Breakpoint 1: where = test`int t0<int>(int) at test.cpp:5:11, address = 
0x0000000000001151
(lldb) r
Process 82245 launched: '/tmp/test' (x86_64)
Process 82245 stopped
* thread #1, name = 'test', stop reason = breakpoint 1.1
     frame #0: 0x0000555555555151 test`int t0<int>(n=5) at test.cpp:5:11
    2       int t0(int n)
    3       {
    4           int sum = 0;
-> 5           for (int i = 0; i < n; ++i) {
    6               sum += i * i;
    7           }
    8           return sum;
(lldb) n
Process 82245 stopped
* thread #1, name = 'test', stop reason = step over
     frame #0: 0x0000555555555156 test`int t0<int>(n=5) at test.cpp:4:6
    1       template <typename T = int>
    2       int t0(int n)
    3       {
-> 4           int sum = 0;
    5           for (int i = 0; i < n; ++i) {
    6               sum += i * i;
    7           }

```

Can anyone help to fix this?

Thanks,

Iru


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-11-01  9:40 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-01  9:40 GDB cannot step or break into template functions compiled with g++ -Og Iru Cai

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