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

Tomas Lindquist Olsen tomas at famolsen.dk
Sun Nov 5 21:47:53 PST 2006


Sean Kelly wrote:
> 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
Isn't this what we have 'export' for?

export extern(C) bool no_catch_exceptions;



More information about the Digitalmars-d mailing list