Skip to content

Commit ee6cecf

Browse files
committed
Print string contents for "this" references
The changes reflect the feature request eclipse-openj9#20878. Print string contents for this references. Also, print address for string arguments and returns. Closes: eclipse-openj9#20878 Signed-off-by: Nick Kamal <[email protected]>
1 parent d4f97df commit ee6cecf

File tree

2 files changed

+44
-5
lines changed

2 files changed

+44
-5
lines changed

runtime/rastrace/method_trace.c

+41-4
Original file line numberDiff line numberDiff line change
@@ -200,12 +200,49 @@ traceMethodEnter(J9VMThread *thr, J9Method *method, void *receiverAddress, UDATA
200200
if (modifiers & J9AccNative) {
201201
Trc_MethodEntryN(thr, J9UTF8_LENGTH(className), J9UTF8_DATA(className), J9UTF8_LENGTH(methodName), J9UTF8_DATA(methodName), J9UTF8_LENGTH(methodSignature), J9UTF8_DATA(methodSignature), receiver);
202202
} else {
203-
Trc_MethodEntry(thr, J9UTF8_LENGTH(className), J9UTF8_DATA(className), J9UTF8_LENGTH(methodName), J9UTF8_DATA(methodName), J9UTF8_LENGTH(methodSignature), J9UTF8_DATA(methodSignature), receiver);
203+
Trc_MethodEntry(thr, J9UTF8_LENGTH(className), J9UTF8_DATA(className), J9UTF8_LENGTH(methodName), J9UTF8_DATA(methodName), J9UTF8_LENGTH(methodSignature), J9UTF8_DATA(methodSignature), receiver, 0, "");
204204
}
205205

206206
if (doParameters) {
207+
J9JavaVM *vm = thr->javaVM;
208+
const unsigned int maxStringLength = RAS_GLOBAL_FROM_JAVAVM(maxStringLength, vm);
209+
210+
if ((NULL != receiver)
211+
&& (receiverClazz == J9VMJAVALANGSTRING_OR_NULL(vm))
212+
&& (0 != maxStringLength)
213+
&& !J9UTF8_LITERAL_EQUALS(J9UTF8_DATA(methodName), J9UTF8_LENGTH(methodName), "<init>")
214+
) {
215+
PORT_ACCESS_FROM_VMC(thr);
216+
char utf8Buffer[RAS_MAX_STRING_LENGTH_LIMIT + 1];
217+
char outputString[RAS_MAX_STRING_LENGTH_LIMIT + 1];
218+
UDATA utf8Length = 0;
219+
220+
char *utf8String = vm->internalVMFunctions->copyStringToUTF8WithMemAlloc(
221+
thr,
222+
receiver,
223+
0,
224+
"",
225+
0,
226+
utf8Buffer,
227+
sizeof(utf8Buffer),
228+
&utf8Length);
229+
230+
if (NULL == utf8String) {
231+
sprintf(outputString, "(String)<Memory allocation error>");
232+
} else if (utf8Length > maxStringLength) {
233+
sprintf(outputString, "(String)\"%.*s\"...", (U_32)maxStringLength, utf8String);
234+
} else {
235+
sprintf(outputString, "(String)\"%.*s\"", (U_32)utf8Length, utf8String);
236+
}
237+
238+
Trc_MethodEntry(thr, J9UTF8_LENGTH(className), J9UTF8_DATA(className), J9UTF8_LENGTH(methodName), J9UTF8_DATA(methodName), J9UTF8_LENGTH(methodSignature), J9UTF8_DATA(methodSignature), J9UTF8_LENGTH(outputString), outputString, receiver);
239+
240+
if (utf8Buffer != utf8String) {
241+
j9mem_free_memory(utf8String);
242+
}
243+
}
207244
Trc_MethodArguments(
208-
thr,
245+
thr,
209246
(U_32)J9UTF8_LENGTH(receiverClassName),
210247
J9UTF8_DATA(receiverClassName),
211248
receiver,
@@ -498,9 +535,9 @@ traceMethodArgObject(J9VMThread *thr, UDATA* arg0EA, char* cursor, UDATA length)
498535
if (NULL == utf8String) {
499536
j9str_printf(PORTLIB, cursor, length, "(String)<Memory allocation error>");
500537
} else if (utf8Length > maxStringLength) {
501-
j9str_printf(PORTLIB, cursor, length, "(String)\"%.*s\"...", (U_32)maxStringLength, utf8String);
538+
j9str_printf(PORTLIB, cursor, length, "(String)@%p - \"%.*s\"...", (U_32)maxStringLength, utf8String, object);
502539
} else {
503-
j9str_printf(PORTLIB, cursor, length, "(String)\"%.*s\"", (U_32)utf8Length, utf8String);
540+
j9str_printf(PORTLIB, cursor, length, "@%p - (String)\"%.*s\"", (U_32)utf8Length, utf8String, object);
504541
}
505542

506543
if (utf8Buffer != utf8String) {

runtime/rastrace/mt.tdf

+3-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@
2323
Executable=mt
2424
DATFileName=J9TraceFormat.dat
2525

26-
TraceEntry=Trc_MethodEntry Overhead=1 Level=5 Group=bytecodeMethods Template="%.*s.%.*s%.*s bytecode method, this = 0x%zx"
26+
TraceEntry=Trc_MethodEntry Obsolete Overhead=1 Level=5 Group=bytecodeMethods Template="%.*s.%.*s%.*s bytecode method, this = 0x%zx,"
27+
28+
TraceEntry=Trc_MethodEntry Overhead=1 Level=5 Group=bytecodeMethods Template="%.*s.%.*s%.*s bytecode method, this = 0x%zx - %.*s,"
2729
TraceEntry=Trc_MethodEntryC Overhead=1 Level=5 Group=compiledMethods Template="%.*s.%.*s%.*s compiled method, this = 0x%zx"
2830
TraceEntry=Trc_MethodEntryN Overhead=1 Level=5 Group=nativeMethods Template="%.*s.%.*s%.*s native method, this = 0x%zx"
2931
TraceEntry=Trc_MethodEntryS Overhead=1 Level=5 Group=bytecodeMethods,staticMethods Template="%.*s.%.*s%.*s bytecode static method"

0 commit comments

Comments
 (0)