www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 21079] New: Can't "step" into interface methods in gdb

https://issues.dlang.org/show_bug.cgi?id=21079

          Issue ID: 21079
           Summary: Can't "step" into interface methods in gdb
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Keywords: symdeb
          Severity: normal
          Priority: P3
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: dlang-bugzilla thecybershadow.net

Given the program:

///////// test.d ////////
import std.stdio;

interface I
{
    void foo();
}

class C : I
{
    void foo()
    {
        writeln("Hello");
    }
}

void main()
{
    I c = new C;
    c.foo();
}
/////////////////////////

When compiling it with `dmd -g test.d`, and debugging it with `gdb ./test`,
attempting to "step" into the c.foo() call causes the debugger to skip over it
entirely.

Transcript:

(gdb) start
Temporary breakpoint 1 at 0x48095c: file test.d, line 18.
Starting program: /home/vladimir/tmp/2020-07-27-scratch/00:38:03/test 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".

Temporary breakpoint 1, D main () at test.d:18
18              I c = new C;
(gdb) next
19              c.foo();
(gdb) step
Hello
20      }

The problem doesn't manifest in GDC and LDC, which correctly step into C.foo,
which leads me to believe this is a defect in the debug information generated
by DMD.

--
Jul 26 2020