automatic debugging / disabling D's built-in exeption handler

Sean Kelly sean at f4.ca
Sun Nov 5 20:02:25 PST 2006


Bill Baxter wrote:
> Sean Kelly wrote:
>> Bill Baxter wrote:
>>
>>> By following the instructions given, eg, here:
>>> http://www.codeproject.com/debug/windbg_part1.asp#_Toc64133667
>>>
>>> it should be possible to make the debugger pop up automatically for 
>>> programs that have exceptions.
>>>
>>> According to the article above:
>>> "WinDbg will be launched if an application throws an exception while 
>>> not being debugged and does not handle the exception itself"
>>>
>>> Apparently D does some sort of top-level catch of such exceptions 
>>> right now, because sticking an "asm { int 3; }" in the code just 
>>> prints the message "Error: Win32 Exception" instead of launching the 
>>> debugger.  Is there some way to disable that?
>>>
>>> -- 
>>> Really what I was trying to do was see if I could get Visual Studio 
>>> to debug D code.  Actually it sort of works.  If you have a program 
>>> with a main loop, you can use visual studio's Tools->Debug 
>>> Processes... to attach to the running process.  If you've built your 
>>> program with -g, you can see the stack trace and step through the 
>>> program normally, and even set breakpoints.
>>>
>>> But you can't examine variables.  VisualStudio could tell that there 
>>> was a "this" pointer, and knew it was of type MyClass, but it 
>>> couldn't tell what was inside of 'this'.  I wonder if there's a way 
>>> to make a Visual Studio plugin that would give you this ability?
>>>
>>> --bb
>>
>>
>> Try:
>>
>> extern (C) bool no_catch_exceptions;
>>
>> no_catch_exceptions = true;
> 
> Doesn't quite work.
> --> : no identifier for declarator no_catch_exceptions
> 
> If you stick the 'no_catch_exceptions=true' into main() or static this() 
> then phobos complains that the value changed:
> --> "f:\usr\pkg\Dlang\dmd\bin\..\lib\phobos.lib(dmain2)  Offset 1D89AH 
> Record Type 0091
>  Error 1: Previous Definition Different : _no_catch_exceptions
> --- errorlevel 1"

This is what I thought would work.  That or "extern (C) extern bool ..." 
  There has to be some variant that doesn't make DMD think you're 
actually declaring a new variable.


Sean



More information about the Digitalmars-d mailing list