Comment #0 by andrej.mitrovich — 2013-08-19T03:09:24Z
-----
shared static this()
{
class C
{
void foo() { }
}
C c;
c.foo();
}
void main()
{
}
-----
$ dmd -g -run test.d
> object.Error: Access Violation
When using the same code in main, a proper stack trace is returned:
-----
module test;
void main()
{
class C
{
void foo() { }
}
C c;
c.foo();
}
-----
object.Error: Access Violation
----------------
0x0040201B in _Dmain at C:\dev\code\d_code\stack_trace_working.d(11)
0x004028E4 in extern (C) int rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).v
oid runMain()
0x00402974 in extern (C) int rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).v
oid runAll()
0x00402251 in _d_run_main
0x00402074 in main
0x004141AD in mainCRTStartup
0x766C33CA in BaseThreadInitThunk
0x77C19ED2 in RtlInitializeExceptionChain
0x77C19EA5 in RtlInitializeExceptionChain
Tested on Win 7 64bit.
Comment #1 by kekeniro2 — 2013-10-25T21:11:54Z
I hit this.
Written in core.runtime.d :
static this()
{
// NOTE: Some module ctors will run before this handler is set, so it's
// still possible the app could exit without a stack trace. If
// this becomes an issue, the handler could be set in C main
// before the module ctors are run.
Runtime.traceHandler = &defaultTraceHandler;
}
At least, it had better be changed to 'shared static this'.
Comment #2 by robert.schadek — 2024-12-13T18:10:34Z