How to debug FinalizeError?
Adam D. Ruppe
destructionator at gmail.com
Wed Nov 28 23:15:16 UTC 2018
On Wednesday, 28 November 2018 at 22:40:17 UTC, unDEFER wrote:
> Hello! After long-long time of debugging, I just have decided
> InvalidMemoryOperationError in my program. But now my program
> after few hours of testing again crashes with "Finalization
> error".
So InvalidMemoryOperationError means a GC function got called
while the GC was locked. This is usually because you did an
allocation inside a destructor.
Finalization error happens when a destructor throws an exception.
Now, many times, trying to throw an exception from inside a
destructor will first trigger the invalid operation - allocating
the exception will be an error before the exception actually
exists. But there are a few ways around this, like preallocating
or calling a function that uses a statically allocated exception.
Language features that use statically allocated exceptions
include:
* InvalidMemoryOperationError
* OutOfMemoryError
* SwitchError
There might be more, but this is all I see right now (my process
btw: search the druntime source code for "staticError", the
function that makes those. But this is subject to change, so
first maybe look up the definition of onOutOfMemoryError and see
the pattern there.)
Of these... well, they are all kinda difficult to cause in a
destructor.
Are you preallocating something in your code and throwing it in a
destructor?
Also, what *exactly* is the message you get when the exception
happens? It should include a line number from druntime as well as
message from the inner exception that caused it in the first
place.
More information about the Digitalmars-d-learn
mailing list