backtrace() vs. _Unwind_Backtrace()
Andrew Haley
aph@redhat.com
Sat Dec 6 11:16:00 GMT 2003
Bryce McKinlay writes:
> On Dec 5, 2003, at 11:46 PM, Andrew Haley wrote:
>
> > Java uses backtrace() a lot, and _Unwind_Backtrace() is inefficient.
> > I see no good reason to switch unless backtrace() doesn't work on a
> > given target.
>
> I disagree - backtrace() tells us nothing. All it gives us is the IP
> for the frame. We need more: the start address of the function, or some
> other way to map to the Class and _Jv_Method that the frame belongs to.
> To get that we need to use the unwinder anyway!
No we don't. We only need _Unwind_FindEnclosingFunction, and that
doesn't call the unwinder. The use of _Unwind_FindEnclosingFunction
and the DWARF unwinder are quite independent.
> Also, backtrace() is not flexible - for most of the checks that need to
> be fast, we only need to look at the top 1 or 2 frames. Since
> _Unwind_backtrace has a callback that lets us stop walking the stack
> once we've got what we need, its unlikely to be any less efficient than
> having to allocate a buffer to store the entire stack and possibly
> extend it if its too small and call backtrace again.
We don't store the entire stack at the moment, only a the top few
items.
> Further more, backtrace won't work if someone decides to compile
> their code without frame pointers. And its not a standard POSIX
> function to my knowledge, thus not portable at all.
As portable as _Unwind_Backtrace() ?
> Using it is just too fragile.
We've been using backtrace() for some time now. That hasn't proved to
bve the case.
Andrew.
More information about the Java
mailing list