Re: Windows / redirect STDERR to see assert messages

2019-05-14 Thread Robert M. Münch via Digitalmars-d-learn

On 2019-05-12 22:46:37 +, Adam D. Ruppe said:

You might need to catch all the throwable exceptions and print your way 
instead...


Adam, thanks, that was the missing link. I thought that assert() is 
dumb hard exit with a short message and not throwing a full exception.


--
Robert M. Münch
http://www.saphirion.com
smarter | better | faster



Re: Windows / redirect STDERR to see assert messages

2019-05-14 Thread Kagamin via Digitalmars-d-learn
Assert failure uses system IO API, try 
https://docs.microsoft.com/en-us/windows/console/setstdhandle


Re: Windows / redirect STDERR to see assert messages

2019-05-14 Thread Bastiaan Veelo via Digitalmars-d-learn

On Sunday, 12 May 2019 at 13:39:15 UTC, Robert M. Münch wrote:

When developing Windows GUI applications I use:

 // detach from console and attach to a new one, works for 
x86 and x86_64

 FreeConsole();
 AllocConsole();

 freopen("CONIN$", "r", stdin);
 freopen("CONOUT$", "w", stdout);
 freopen("CONOUT$", "w", stderr);

so that the GUI app opens a console for writeln() output etc. I 
assumed this should work for assert() messages as well. But it 
seems it doesn't. If an assert fails, I don't see any output. 
Is assert using something else? What's wrong about this 
approach?


Are you sure the last call to freopen doesn't return NULL? You 
are opening the same file twice and I'm not sure that works. Test 
with `stderr.writeln("test")`.


Bastiaan.


Re: Windows / redirect STDERR to see assert messages

2019-05-12 Thread Adam D. Ruppe via Digitalmars-d-learn

On Sunday, 12 May 2019 at 13:39:15 UTC, Robert M. Münch wrote:
If an assert fails, I don't see any output. Is assert using 
something else? What's wrong about this approach?


You might need to catch all the throwable exceptions and print 
your way instead...


Windows / redirect STDERR to see assert messages

2019-05-12 Thread Robert M. Münch via Digitalmars-d-learn

When developing Windows GUI applications I use:

 // detach from console and attach to a new one, works for x86 and x86_64
 FreeConsole();
 AllocConsole();

 freopen("CONIN$", "r", stdin);
 freopen("CONOUT$", "w", stdout);
 freopen("CONOUT$", "w", stderr);

so that the GUI app opens a console for writeln() output etc. I assumed 
this should work for assert() messages as well. But it seems it 
doesn't. If an assert fails, I don't see any output. Is assert using 
something else? What's wrong about this approach?


--
Robert M. Münch
http://www.saphirion.com
smarter | better | faster