On Thursday, 8 October 2020 at 13:13:16 UTC, Imperatorn wrote:
Can you share some code? You don't want to use try-catch?

Here is minimal example that illustrates this:
=====================
import std.stdio;

void do_assert() { assert(false); }

void stackFrame()
{
    //pragma(inline, false);
    do_assert();
}

void main()
{
    try
    {
        stackFrame();
    }
    catch(Exception e)
    {
        e.writeln();
    }
}
=====================

Stack trace with "dmd -g -O -run test.d" command (no stackFrame function in it):

0x0040CC6B in _d_assertp
0x00410CFB in void rt.dmain2._d_run_main2(char[][], uint, extern (C) int function(char[][])*).runAll().__lambda1() 0x00410C75 in void rt.dmain2._d_run_main2(char[][], uint, extern (C) int function(char[][])*).runAll()
0x00410B10 in _d_run_main2
0x0040CDB6 in _d_run_main
0x0040234C in main at C:\D\dmd2\windows\bin\..\..\src\druntime\import\core\internal\entrypoint.d(30)
0x7653F989 in BaseThreadInitThunk
0x77CB74B4 in RtlGetAppContainerNamedObjectPath
0x77CB7484 in RtlGetAppContainerNamedObjectPath

=====================

Stack trace with "dmd -g -O -gs -run test.d" command (stackFrame function is there):

0x0040C573 in _d_assertp
0x004022C4 in void test.stackFrame() at C:\Users\andrey\test.d(7)
0x004022F9 in _Dmain at C:\Users\andrey\test.d(14)
0x00410603 in void rt.dmain2._d_run_main2(char[][], uint, extern (C) int function(char[][])*).runAll().__lambda1() 0x0041057D in void rt.dmain2._d_run_main2(char[][], uint, extern (C) int function(char[][])*).runAll()
0x00410418 in _d_run_main2
0x0040C6BE in _d_run_main
0x00402353 in main at C:\D\dmd2\windows\bin\..\..\src\druntime\import\core\internal\entrypoint.d(30)
0x00434535 in mainCRTStartup
0x7653F989 in BaseThreadInitThunk
0x77CB74B4 in RtlGetAppContainerNamedObjectPath
0x77CB7484 in RtlGetAppContainerNamedObjectPath

=====================

The question: is it possible to tell compiler to always generate stack frame for my stackFrame function? "pragma(inline, false)" doesn't help here - the result is completely the same.

Reply via email to