[Issue 21770] New: Wrong breakpoint location for gdb
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Fri Mar 26 04:26:17 UTC 2021
https://issues.dlang.org/show_bug.cgi?id=21770
Issue ID: 21770
Summary: Wrong breakpoint location for gdb
Product: D
Version: D2
Hardware: x86_64
OS: Linux
Status: NEW
Severity: normal
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: hsteoh at quickfur.ath.cx
-------------
import std;
void fun(void delegate() dg) {
dg();
}
void main() {
int x = 123;
string y = "abc";
writeln(y);
fun({
x++;
y ~= "d";
});
}
-------------
Compile with `dmd -g prog.d`. In gdb, set a breakpoint for prog.main:
-------------
(gdb) break prog.main
Breakpoint 1 at 0xe1c34: file prog.d, line 10.
(gdb) run
Starting program: /tmp/prog
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
abc
Breakpoint 1, prog.main().__lambda3() (__capture=0x7ffff7cad000) at prog.d:10
10 x++;
(gdb)
-------------
This is wrong; the breakpoint for prog.main should break at the `writeln` line,
or one of the variable initializers. But instead, it breaks inside the delegate
body. A backtrace shows that `fun` has already been called.
Expected behaviour: breaking at a function should break at the beginning of the
function, not in the middle, and certainly not inside the body of a delegate!
--
More information about the Digitalmars-d-bugs
mailing list