On Monday, 6 June 2016 at 00:09:15 UTC, Ali Çehreli wrote:
On 06/05/2016 07:39 AM, your_name wrote:
> The problem I have is whenever an assert in my debug build
fails the
> program or thread is just killed silently.
That's strange. When an assertion fails, the stack trace is
printed and the program is terminated. For example:
void fun(int i) {
assert(i == 7);
}
void main() {
fun(42);
}
That program fails loudly :) with something similar to the
following:
core.exception.AssertError@deneme.d(2): Assertion failure
----------------
??:? _d_assert [0x422b9b]
??:? void deneme.__assert(int) [0x422acc]
??:? void deneme.fun(int) [0x422a62]
??:? _Dmain [0x422a75]
??:?
_D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ6runAllMFZ9__lambda1MFZv
[0x423012]
??:? void rt.dmain2._d_run_main(int, char**, extern (C) int
function(char[][])*).tryExec(scope void delegate()) [0x422f5c]
??:? void rt.dmain2._d_run_main(int, char**, extern (C) int
function(char[][])*).runAll() [0x422fce]
??:? void rt.dmain2._d_run_main(int, char**, extern (C) int
function(char[][])*).tryExec(scope void delegate()) [0x422f5c]
??:? _d_run_main [0x422ecd]
??:? main [0x422b05]
??:? __libc_start_main [0x30ea082f]
If you want to prevent termination, it is possible but not
recommended to catch and swallow AssertError (or Error, or
Throwable):
import core.exception;
void fun(int i) {
assert(i == 7);
}
void main() {
try {
fun(42);
} catch (AssertError) {
// Something bad happened. We can't trust the state
// of this program any more.
}
}
As noted, when an Error is thrown, you can't know whether the
program can do anything correctly any more.
Ali
Hello Ali,
The behavior you described is what I'd expect, however, it's not
what I get.
The way I traced the problem, ironically ;), was to catch Error
and print it to screen.
It involved dereferencing a null pointer in a thread and an
'assert null this' silently killed the thread leaving me
wondering why it didn't produce data.
Anyhow, I've had this behavior at least 1 more time but I forgot
what exactly it was related to.
Maybe I missed something beyond building a normal -debug version.
Anyways, thanks for your reply :)