[prev in list] [next in list] [prev in thread] [next in thread]
List: openjdk-serviceability-dev
Subject: JVMTI GetStackTrace / GetThreadListStackTraces / GetAllStackTraces & GetFrameCount
From: strale () gmx ! net (Erich)
Date: 2010-12-23 0:56:26
Message-ID: BB9A2C93-C052-444E-9ADF-E0E33734812C () gmx ! net
[Download RAW message or body]
Hello,
I've a few suggestions for future jvmti revisions regarding the Get*StackTrace[s] \
functions. First, they are quite inconsistent. While you can provide a start depth \
when calling the GetStackTrace function, GetThreadListStackTraces / GetAllStackTraces \
are lacking this parameter. I don't know if somebody wold need to specify this \
parameter for GetAllStackTraces, but I would welcome it at least for \
GetThreadListStackTraces.
More important is that it is not possible to get the frame count while getting the \
stack trace.
Well, it's possible. You can either set the max stack depth to an astronomical high \
number to get all the stack frames and just parse those you are interested - which \
would be a waste of memory and cpu time, or suspend the thread before getting the \
stacktrace, when max frame count == frame count captured call GetFrameCount and \
resume the thread - which would imply a big performance overhead.
I would therefore propose 2 new functions ... or replacents when the new jvmti \
revision is requested:
jvmtiError GetStackTrace(jvmtiEnv* env, jthread thread, jint start_depth, jint \
max_frame_count, jvmtiFrameInfo* frame_buffer, jint* count_ptr, jint* \
stack_depth)
... when stack_depth is != NULL the stack_depth is set.
jvmtiError GetThreadListStackTraces(jvmtiEnv* env, jint thread_count, const jthread* \
thread_list, jint *start_depth_list, jint max_frame_count, jvmtiStackInfo** stack_ \
info_ptr)
and a change of the jvmtiStackInfo structure:
typedef struct {
jthread thread;
jint state;
jvmtiFrameInfo* frame_buffer;
jint frame_count;
jint stack_depth;
} jvmtiStackInfo;
where stack_depth is the current depth of the stack. Which would also solve the issue \
when the stack is exactly max_stack_depth you can't tell if you got the whole \
stacktrace or just part of it.
Best regards & merry christmas,
Erich Hochmuth
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic