catching segfault using try_ catch
seany
seany at uni-bonn.de
Thu Jul 22 14:55:05 UTC 2021
On Thursday, 22 July 2021 at 14:19:37 UTC, seany wrote:
> 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.`
I have added this to my dub.json :
"mylib":{
"versions": "~master",
"path":
"/usr/include/dmd/druntime/import/"
},
Result :
`.dub/build/application-release-linux.posix-x86_64-ldc_v1.24.0-5496805BDFFAF7D74739CE42F7A6E3B0/tracker_ai.o:traits.d:function _D14analysisEngine9geoEngine15analyze_tillageMFZv: error: undefined reference to '_D3etc5linux11memoryerror26registerMemoryErrorHandlerFZb'
`
More information about the Digitalmars-d-learn
mailing list