catching segfault using try_ catch
seany
seany at uni-bonn.de
Thu Jul 22 14:19:37 UTC 2021
On Tuesday, 13 July 2021 at 17:49:54 UTC, Adam D Ruppe wrote:
> On Tuesday, 13 July 2021 at 16:52:43 UTC, seany wrote:
>> What will it return to me?
>
> true if it succeeded.
>
>> I want to catch the segfault and a segfault has occured, I
>> want run a different code at that point.
>
> You mean transparently rerun some code? That's better done with
> the lowlevel sigaction handler.
>
> But if you just want to standard try/catch then do something in
> the catch block, this is fine.
>
>
> import etc.linux.memoryerror;
>
> void main() {
> registerMemoryErrorHandler();
> int* a;
> try {
> *a = 4;
> } catch(Throwable e) {
> import std.stdio;
> writeln("Caught");
> }
> }
>
>
> It can be used on ldc2 too but it isn't as reliable since ldc
> considers null access to be undefined behavior anyway and thus
> may optimize out your catch....
>
> You also need to compile in the module with ldc so build it like
>
> $ ldc2 seg.d ~/d/ldc/import/etc/linux/memoryerror.d
>
> just including the memoryerror file o the command line lets it
> link.
how can I specify this with dub ?
If i do `dub build -b release --compiler=ldc2
/usr/include/dmd/druntime/import/etc/linux/memoryerror.d` ; I get
: `Package
'/usr/include/dmd/druntime/import/etc/linux/memoryerror.d' was
neither found locally nor online.`
More information about the Digitalmars-d-learn
mailing list