GCJ Thread Dump

David Daney ddaney@avtrex.com
Thu Feb 10 14:24:00 GMT 2005


Bryce McKinlay wrote:
> Andrew Haley wrote:
>>> Mark Anderson writes:
>> > Is there any way to get a thread dump from a running GCJ application 
>> in the > same way you can send a kill -3 signal to the Sun JVM?
>>>> No, there isn't, and it would be extremely hard to do. Whan we have a
>> problem like this, we attach gdb to the process.
>>> I'm curious - why is this so difficult? I think Sun's implementation 
> shows what locks are held by each thread, along with the stack trace, 
> which might be tricky. However, I don't see why plain old thread dumps 
> would be so hard given that we can already unwind through signal 
> handlers. Note that there is a enhancement request for this:
>> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15686
>
As I said earlier It would probably have to be done from something 
similar to the GC's stop-the-world. You would print a stack trace for 
each thread.
The problem I see is that for targets that have no frame pointer. These 
have to use the DWARF .eh_frame information for generating stacktraces. 
 The stop-the-world uses asynchronous signals and these are not 
compatible with DWARF exception handling. It might be possible to 
generate enough eh_frame data to allow getting a stack trace from any 
instruction, but without adding everything needed for full exception 
handling (I don't really know not being an expert in this area).
We could compile all GC/libgcj/etc libraries with -fnon-call-exceptions, 
but what would happen for threads blocked in libc or system calls? I 
think those might be difficult to backtrace through.
It would be much easier if everything on the system was compiled with a 
framepointer. Then backtracing would be easy.
Just my idle ramblings
David Daney.


More information about the Java mailing list

AltStyle によって変換されたページ (->オリジナル) /