How to get call stack for InvalidMemoryOperationError while doing unittest?

Steven Schveighoffer schveiguy at gmail.com
Fri Jan 15 14:53:25 UTC 2021


On 1/13/21 1:22 PM, apz28 wrote:
> core.exception.InvalidMemoryOperationError at src\core\exception.d(647): 
> Invalid memory operation

I've struggled with this as well. It doesn't even tell you the original 
usage point that causes the exception.

I believe stack traces are disabled from printing on this because of the 
fact that it needs some memory to print the trace or walk the trace 
(this is fuzzy, I think it might not need memory, but I can't remember 
exactly).

You can override the handling of memory errors by defining it yourself:

extern(C) void onInvalidMemoryOperationError(void *pretend_sideeffect = 
null) @trusted pure nothrow @nogc
{
    // try to print stack trace here yourself...
}

A very *very* common reason this is triggered is because a GC destructor 
is trying to allocate memory (this is not allowed during GC cleanup). 
But without knowing the trace, it's really hard to find it.

-Steve


More information about the Digitalmars-d-learn mailing list