Maybe i'm being naive about Threads.

Rémi Forax forax at univ-mlv.fr
Sat Nov 21 12:47:03 UTC 2009


Le 21/11/2009 07:48, Paulo Levi a écrit :
> But i'm wondering why there isn't a global jvm system option for the 
> new Thread(runnable).start() to perserve stack traces at least until 
> the start method.
> Seems like a no brainer so that tools (like the netbeans debugger) can 
> find where the misbehaving threads originate from, (instead of like 
> now, where i have to depend on the names). Or am i missing something 
> obvious?
>

You don't need the VM for that, something like that should work:

public class ThreadEx extends Thread {
   final Throwable where;
   {
     where = new Throwable();
     setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
       @Override
       public void uncaughtException(Thread t, Throwable e) {
         setLastCause(e, where);
         e.printStackTrace();
       }
     });
   }

   static void setLastCause(Throwable t, Throwable where) {
     for(;;) {
       Throwable cause = t.getCause();
       if (cause == null)
         break;
       t = cause;
     }
     t.initCause(where);
   }
}

Rémi



More information about the core-libs-dev mailing list