[PATCH] Fix debugger attach for threads

Thomas Pfaff tpfaff@gmx.net
Mon Nov 3 07:36:00 GMT 2003


Christopher Faylor wrote:
> On Fri, Oct 31, 2003 at 10:11:46PM +0100, Thomas Pfaff wrote:
> 
>>This patch allows a debugger to attach when an exception occurs in a 
>>thread other than the mainthread.
>>
>>I am not happy about the wait in handle_exceptions, but it works on my 
>>machine. I think that a waitloop until the debugger is attached is 
>>cleaner, but there must be a reason why the debbugging loop is 
>>implemented this way.
> 
> 
> The intent is for an attached debugger to immediately see the location
> that died.  If you loop in the try_to_debug code then it is a pain to
> figure out exactly where the exception occurred.
> 
> I don't understand why this code is needed.  Why do threads need to
> be suspended and resumed specially?
> 

Because otherwise the debugger does not get enough CPU time until the 
debugging counter exceeds the limit and the process terminates before 
the debugger is attached.

If you think that suspending and resuming threads is a dangerous thing 
than i would at least change the condition to

   if (debugging && !being_debugged ())
     {
       /*
        * Give debugger a chance to attach
        */
       LONG prio = GetThreadPriority (GetCurrentThread ());
       SetThreadPriority (GetCurrentThread (), THREAD_PRIORITY_IDLE);
       Sleep (0);
       SetThreadPriority (GetCurrentThread (), prio);
       return 0;
     }

to loop until the debugger is attached.

Thomas



More information about the Cygwin-patches mailing list