Open andre2007 opened 6 years ago
For this source code, a break point is set on line 12 (writeln(args);).
writeln(args);
import std.stdio; void test1(string s) { } void main(string[] args) { writeln(args); string[] test = ["aaa", "bbb"]; test1(test[0]); }
Command -stack-list-frames returns following content
-stack-list-frames
stack=[ frame={level="0",addr="0x00402256",func="D main+0x6",args=[],file="C:\\D\\projects\\rasptest1\\source\\app.d",fullname="C:\\D\\projects\\rasptest1\\source\\app.d",line="12"}, frame={level="1",addr="0x0040e34f",func="__D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ6runAllMFZ9__lambda1MFZv+0x1b",args=[]}, frame={level="2",addr="0x0040e2d1",func="__D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ6runAllMFZv+0x89",args=[]}, frame={level="3",addr="0x0040e16c",func="__d_run_main+0x1f8",args=[]}, frame={level="4",addr="0x0040df64",func="__entrypoint.main+0x14",args=[],file="C:\\D\\projects\\rasptest1\\source\\app.d",fullname="C:\\D\\projects\\rasptest1\\source\\app.d",line="7"}, frame={level="5",addr="0x00430401",func="_mainCRTStartup+0xa9",args=[]}, frame={level="6",addr="0x75828484",from="C:\\Windows\\SysWOW64\\kernel32.dll"}, frame={level="7",addr="0x76ef2fea",from="C:\\Windows\\SysWOW64\\ntdll.dll"}, frame={level="8",addr="0x76ef2fba",from="C:\\Windows\\SysWOW64\\ntdll.dll"}]
app.d main file is listed 2 times, level 0 and level 4.
Visual Stdio Mago Debugger for a comparable project
WindowsApp1.exe!D main() Line 12 WindowsApp1.exe!__D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ6runAllMFZ9__lambda1MFZv() + 0x1b bytes WindowsApp1.exe!__D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ6runAllMFZv() + 0x89 bytes WindowsApp1.exe!__d_run_main() + 0x1f8 bytes WindowsApp1.exe!__entrypoint.main() Line 7 + 0x11 bytes WindowsApp1.exe!_mainCRTStartup() + 0xa9 bytes kernel32.dll!75828484 ntdll.dll!76ef2fea ntdll.dll!76ef2fba
The same application debugged under GDB (linux) returns following result:
stack=[ frame={level="0",addr="0x0000000000440828",func="D main",file="source/app.d",fullname="/mnt/c/D/projects/rasptest1/source/app.d",line="12"}, frame={level="1",addr="0x0000000000453a94",func="rt.dmain2._d_run_main()"}, frame={level="2",addr="0x0000000000453924",func="rt.dmain2._d_run_main()"}, frame={level="3",addr="0x0000000000453a03",func="rt.dmain2._d_run_main()"}, frame={level="4",addr="0x0000000000453924",func="rt.dmain2._d_run_main()"}, frame={level="5",addr="0x000000000045388f",func="_d_run_main"}, frame={level="6",addr="0x0000000000450d2e",func="main"}]
__entrypoint.main is the C main function generated by the D compiler alongside D's main. It should probably not have any file location information, but that is to be solved in the compiler.
__entrypoint.main
For this source code, a break point is set on line 12 (
writeln(args);
).Command
-stack-list-frames
returns following contentapp.d main file is listed 2 times, level 0 and level 4.
Visual Stdio Mago Debugger for a comparable project
The same application debugged under GDB (linux) returns following result: