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