Bug 19747 – No debug line info for code in scope(exit)
Status
RESOLVED
Resolution
FIXED
Severity
major
Priority
P1
Component
dmd
Product
D
Version
D2
Platform
x86_64
OS
Windows
Creation time
2019-03-17T14:37:13Z
Last change time
2019-03-18T02:45:46Z
Keywords
pull, symdeb
Assigned to
No Owner
Creator
Rainer Schuetze
Comments
Comment #0 by r.sagitario — 2019-03-17T14:37:13Z
Compiling this code for COFF with "dmd -m64 -g":
module dbgi;
__gshared int recurse;
int foo(int n)
{
recurse++;
scope(exit)
{
recurse--;
if (recurse < 0)
assert(false);
}
int r = n + n;
int s = r + 2;
return r;
}
void main()
{
int x = foo(7);
}
yields missing debug line information for the code in scope(exit), e.g. disassembly in VS looks like this:
5: int foo(int n)
00007FF797F0BF80 push rbp
00007FF797F0BF81 mov rbp,rsp
00007FF797F0BF84 sub rsp,18h
00007FF797F0BF88 push rbx
00007FF797F0BF89 mov dword ptr [n],ecx
6: {
7: recurse++;
00007FF797F0BF8C inc dword ptr [dbgi.recurse (07FF79800A4A0h)]
8: scope(exit)
9: {
10: recurse--;
11: if (recurse < 0)
12: assert(false);
13: }
14: int r = n + n;
00007FF797F0BF92 mov eax,dword ptr [n]
8: scope(exit)
9: {
10: recurse--;
11: if (recurse < 0)
12: assert(false);
13: }
14: int r = n + n;
00007FF797F0BF95 mov ecx,eax
00007FF797F0BF97 lea edx,[rax+rcx]
00007FF797F0BF9A mov dword ptr [r],edx
15: int s = r + 2;
00007FF797F0BF9D lea ebx,[rdx+2]
00007FF797F0BFA0 mov dword ptr [s],ebx
00007FF797F0BFA3 mov eax,edx
00007FF797F0BFA5 mov qword ptr [rbp-10h],rax
00007FF797F0BFA9 sub rsp,8
00007FF797F0BFAD call dbgi.foo+4Fh (07FF797F0BFCFh)
00007FF797F0BFB2 add rsp,8
00007FF797F0BFB6 mov rax,qword ptr [rbp-10h]
00007FF797F0BFBA pop rbx
00007FF797F0BFBB mov rsp,rbp
00007FF797F0BFBE pop rbp
00007FF797F0BFBF ret
00007FF797F0BFC0 sub rsp,8
00007FF797F0BFC4 call dbgi.foo+4Fh (07FF797F0BFCFh)
00007FF797F0BFC9 add rsp,8
00007FF797F0BFCD jmp dbgi.foo+76h (07FF797F0BFF6h)
00007FF797F0BFCF dec dword ptr [dbgi.recurse (07FF79800A4A0h)]
00007FF797F0BFD5 cmp dword ptr [dbgi.recurse (07FF79800A4A0h)],0
00007FF797F0BFDC jns dbgi.foo+75h (07FF797F0BFF5h)
00007FF797F0BFDE mov edx,0Ch
00007FF797F0BFE3 lea rcx,[__a6_646267692e64 (07FF797FF7E20h)]
00007FF797F0BFEA sub rsp,20h
00007FF797F0BFEE call _d_assertp (07FF797F0643Dh)
00007FF797F0BFF3 ud2
00007FF797F0BFF5 ret
16: return r;
17: }
00007FF797F0BFF6 pop rbx
16: return r;
17: }
00007FF797F0BFF7 mov rsp,rbp
00007FF797F0BFFA pop rbp
00007FF797F0BFFB ret
This prevents setting breakpoints in the scope(exit)-code or stepping through the code.
Comment #1 by dlang-bot — 2019-03-17T18:14:38Z
@rainers created dlang/dmd pull request #9459 "fix Issue 19747 - No debug line info for code in scope(exit)" fixing this issue:
- fix Issue 19747 - No debug line info for code in scope(exit)
remove gratuitous requirement of ascending source
testpdb.d now also supports registration free use of COM interfac to msdia140.dll as used by VS2017 and VS2019
https://github.com/dlang/dmd/pull/9459
Comment #2 by dlang-bot — 2019-03-18T02:45:46Z
dlang/dmd pull request #9459 "fix Issue 19747 - No debug line info for code in scope(exit)" was merged into master:
- 494913ded60ba275b8caae09a3a09ad478f750eb by Rainer Schuetze:
fix Issue 19747 - No debug line info for code in scope(exit)
remove gratuitous requirement of ascending source
testpdb.d now also supports registration free use of COM interfac to msdia140.dll as used by VS2017 and VS2019
https://github.com/dlang/dmd/pull/9459