Skip to content

Commit

Permalink
Print actual string arguments with -Xtrace (part 2)
Browse files Browse the repository at this point in the history
The changes reflect the feature request #16416.

Adding cmdline option to specify string argument length.
-Xtrace:methodstrarglen=[1-128]
methodStrArgLen takes an unsigned integer value from 1 to 128
If methodStrArgLen = 0 or unspecified, default to 32.
Other invalid inputs result in the input error.

There will be subsequent PR for tests (part 3).

Signed-off-by: Nick Kamal <[email protected]>

Print actual string arguments with -Xtrace (part 2)

The changes reflect the feature request #16416.

Adding cmdline option to specify string argument length.
-Xtrace:methodstrarglen=[1-128]
methodStrArgLen takes an unsigned integer value from 1 to 128
If methodStrArgLen = 0 or unspecified, default to 32.
Other invalid inputs result in the input error.

There will be subsequent PR for tests (part 3).

Signed-off-by: Nick Kamal <[email protected]>

Feature request: Print actual String arguments with Xtrace part 1

The changes reflect the feature request #16416.

Instead of printing the memory address for string arguments, print the actual string at max of 32 characters.
There will be subsequent PRs for cmdline option for string length (Part 2) and tests (Part 3).

Signed-off-by: Nick Kamal [email protected]

The changes reflect the feature request #16416 - part 2 of #20641

Adding cmdline option to specify string length to be printed.
-Xtrace:methodstrarglen=[1-128]
methodStrArgLen takes an unsigned integer value from 1 to 128
If no methodStrArgLen is specified, or is set to 0, the printed length is the default value of 32.
Other invalid inputs result in the following:
"Error processing trace option, detail: methodstrarglen takes an unsigned integer value from 0 to 128
 Trace option unrecognized: -Xtrace:methodStrArgLen
 Error processing trace option: -Xtrace:methodStrArgLen=<invalid input>
"

There will be subsequent PRs for tests (part 3).

Closes: #16416
Signed-off-by: Nick Kamal <[email protected]>

The changes reflect the feature request #16416 - part 2 of #20641

Adding cmdline option to specify string length to be printed.
-Xtrace:methodstrarglen=[1-128]
methodStrArgLen takes an unsigned integer value from 1 to 128
If no methodStrArgLen is specified, or is set to 0, the printed length is the default value of 32.
Other invalid inputs result in the following:
"Error processing trace option, detail: methodstrarglen takes an unsigned integer value from 0 to 128
 Trace option unrecognized: -Xtrace:methodStrArgLen
 Error processing trace option: -Xtrace:methodStrArgLen=<invalid input>
"

There will be subsequent PRs for tests (part 3).

Signed-off-by: Nick Kamal <[email protected]>

The changes reflect the feature request #16416 - part 2 of #20641

Adding cmdline option to specify string length to be printed.
-Xtrace:methodstrarglen=[1-128]
methodStrArgLen takes an unsigned integer value from 1 to 128
If no methodStrArgLen is specified, or is set to 0, the printed length is the default value of 32.
Other invalid inputs result in the following:
"Error processing trace option, detail: methodstrarglen takes an unsigned integer value from 0 to 128
 Trace option unrecognized: -Xtrace:methodStrArgLen
 Error processing trace option: -Xtrace:methodStrArgLen=<invalid input>
"

There will be subsequent PRs for tests (part 3).

Signed-off-by: Nick Kamal <[email protected]>

The changes reflect the feature request #16416 - part 2 of #20641

Adding cmdline option to specify string length to be printed.
-Xtrace:methodstrarglen=[1-128]
methodStrArgLen takes an unsigned integer value from 1 to 128
If no methodStrArgLen is specified, or is set to 0, the printed length is the default value of 32.
Other invalid inputs result in the following:
"Error processing trace option, detail: methodstrarglen takes an unsigned integer value from 0 to 128
 Trace option unrecognized: -Xtrace:methodStrArgLen
 Error processing trace option: -Xtrace:methodStrArgLen=<invalid input>
"

There will be subsequent PRs for tests (part 3).

Signed-off-by: Nick Kamal <[email protected]>

The changes reflect the feature request #16416 - part 2 following #20641

Adding cmdline option to specify string argument length to be printed.
-Xtrace:methodstrarglen=[1-128]
methodStrArgLen takes an unsigned integer value from 1 to 128
If no methodStrArgLen is specified, or is set to 0, the printed length is the default value of 32.
Other invalid inputs result in the following:
"Error processing trace option, detail: methodstrarglen takes an unsigned integer value from 1 to 128
Trace option unrecognized: -Xtrace:methodStrArgLen
Error processing trace option: -Xtrace:methodStrArgLen=invalid input"

There will be subsequent PRs for tests (part 3).

Signed-off-by: Nick Kamal <[email protected]>
  • Loading branch information
h3110n3rv3 committed Nov 28, 2024
1 parent 4ee9b77 commit 8606fa4
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 9 deletions.
1 change: 1 addition & 0 deletions runtime/oti/j9trace.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ typedef struct RasGlobalStorage {
void * traceMethodTable;
int stackdepth;
unsigned int stackCompressionLevel;
unsigned int methodStrArgLength;
ConfigureTraceFunction configureTraceEngine;
#if defined(J9VM_OPT_CRIU_SUPPORT)
CRIURestoreInitializeTrace criuRestoreInitializeTrace;
Expand Down
14 changes: 8 additions & 6 deletions runtime/rastrace/j9rastrace.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,13 @@ extern "C" {
* Keywords for options added by J9VM layer.
* =============================================================================
*/
#define RAS_METHODS_KEYWORD "METHODS"
#define RAS_DEBUG_KEYWORD "DEBUG"
#define RAS_TRIGGER_KEYWORD "TRIGGER"
#define RAS_STACKDEPTH_KEYWORD "STACKDEPTH"
#define RAS_SLEEPTIME_KEYWORD "SLEEPTIME"
#define RAS_COMPRESSION_LEVEL_KEYWORD "STACKCOMPRESSIONLEVEL"
#define RAS_METHODS_KEYWORD "METHODS"
#define RAS_DEBUG_KEYWORD "DEBUG"
#define RAS_TRIGGER_KEYWORD "TRIGGER"
#define RAS_STACKDEPTH_KEYWORD "STACKDEPTH"
#define RAS_SLEEPTIME_KEYWORD "SLEEPTIME"
#define RAS_COMPRESSION_LEVEL_KEYWORD "STACKCOMPRESSIONLEVEL"
#define RAS_METHOD_STRING_LENGTH_KEYWORD "METHODSTRARGLEN"

/*
* ======================================================================
Expand Down Expand Up @@ -130,6 +131,7 @@ omr_error_t processTriggerMethodClause(OMR_VMThread *, char *, BOOLEAN atRuntime
void doTriggerActionJstacktrace(OMR_VMThread *thr);
omr_error_t setStackDepth(J9JavaVM *thr, const char * value, BOOLEAN atRuntime);
omr_error_t setStackCompressionLevel(J9JavaVM * vm, const char *str, BOOLEAN atRuntime);
omr_error_t setMethodStrArgLength(J9JavaVM * vm, const char *str, BOOLEAN atRuntime);

/*
* =============================================================================
Expand Down
7 changes: 7 additions & 0 deletions runtime/rastrace/method_trace.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@
#undef UT_MODULE_UNLOADED
#include "ut_mt.h"

#define DEFAULT_BUFFER_LENGTH 128
#define DEFAULT_STRING_LENGTH 32

static void hookRAMClassLoad(J9HookInterface** hook, UDATA eventNum, void* eventData, void* userData);
static void traceMethodArgInt (J9VMThread *thr, UDATA* arg0EA, char* cursor, UDATA length, char* type);
static void traceMethodArgDouble (J9VMThread *thr, UDATA* arg0EA, char* cursor, UDATA length);
Expand Down Expand Up @@ -476,12 +479,16 @@ traceMethodArgObject(J9VMThread *thr, UDATA* arg0EA, char* cursor, UDATA length)
} else {
J9Class *clazz = J9OBJECT_CLAZZ(thr, object);
J9JavaVM *vm = thr->javaVM;
const unsigned int methodStrArgLength = ((RasGlobalStorage *)thr->javaVM->j9rasGlobalStorage)->methodStrArgLength;
unsigned int strArgLength = methodStrArgLength == 0 ? DEFAULT_STRING_LENGTH : methodStrArgLength;

if (clazz == J9VMJAVALANGSTRING_OR_NULL(vm)) {
/* string argument */
#define DEFAULT_STRING_LENGTH 32
char utf8Buffer[128];
UDATA utf8Length = 0;
const unsigned int methodStrArgLength = ((RasGlobalStorage *)thr->javaVM->j9rasGlobalStorage)->methodStrArgLength;
unsigned int strArgLength = methodStrArgLength == 0 ? DEFAULT_STRING_LENGTH : methodStrArgLength;

char *utf8String = vm->internalVMFunctions->copyStringToUTF8WithMemAlloc(
thr,
Expand Down
48 changes: 45 additions & 3 deletions runtime/rastrace/method_trigger.c
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,6 @@ static const StackTraceFormattingFunction stackTraceFormattingFunctions[] = {

#define NUM_STACK_TRACE_FORMATTING_FUNCTIONS (sizeof(stackTraceFormattingFunctions) / sizeof(stackTraceFormattingFunctions[0]))


/**************************************************************************
* name - rasSetTriggerTrace
* description - Called whenever a class is loaded.
Expand Down Expand Up @@ -547,6 +546,49 @@ decimalString2Int(J9PortLibrary* portLibrary, const char *decString, I_32 signed
return num;
}

/**************************************************************************
* name - setMethodStrArgLength
* description - Set method string argument length
* parameters - thr, trace options, atRuntime flag
* returns - JNI return code
*************************************************************************/
omr_error_t
setMethodStrArgLength(J9JavaVM *vm, const char *str, BOOLEAN atRuntime)
{
#define MAX_STRING_LENGTH 128
PORT_ACCESS_FROM_JAVAVM(vm);
int value, length;
omr_error_t rc = OMR_ERROR_NONE;
const char *p;

if (getParmNumber(str) != 1) {
goto err;
}

p = getPositionalParm(1, str, &length);

if (length > 3) {
goto err;
}

value = decimalString2Int(PORTLIB, p, FALSE, &rc);
if (OMR_ERROR_NONE != rc) {
goto err;
}

if ((0 > value) ||
(MAX_STRING_LENGTH < value)) {
goto err;
}

RAS_GLOBAL_FROM_JAVAVM(methodStrArgLength,vm) = (unsigned int)value;
return OMR_ERROR_NONE;
err:
vaReportJ9VMCommandLineError(PORTLIB, "methodstrarglen takes an unsigned integer value from 1 to %d", MAX_STRING_LENGTH);
return OMR_ERROR_INTERNAL;
#undef MAX_STRING_LENGTH 128
}

/**************************************************************************
* name - addTriggeredMethodSpec
* description - Take a user specified method trigger rule (from the
Expand Down Expand Up @@ -654,12 +696,12 @@ addTriggeredMethodSpec(J9VMThread *thr, const char *ptrMethodSpec, const struct
}

if (methodRule->entryAction != NULL && methodRule->entryAction->name != NULL
&& j9_cmdla_stricmp((char *)methodRule->entryAction->name, "jstacktrace") == 0) {
&& j9_cmdla_stricmp((char *)methodRule->entryAction->name, "jstacktrace") == 0) {
/* set up the current method spec to be enabled for trace */
setMethod(thr->javaVM, ptrMethodSpec, FALSE);
}
if (methodRule->exitAction != NULL && methodRule->exitAction->name != NULL
&& j9_cmdla_stricmp((char *)methodRule->exitAction->name, "jstacktrace") == 0) {
&& j9_cmdla_stricmp((char *)methodRule->exitAction->name, "jstacktrace") == 0) {
/* set up the current method spec to be enabled for trace */
setMethod(thr->javaVM, ptrMethodSpec, FALSE);
}
Expand Down
1 change: 1 addition & 0 deletions runtime/rastrace/trcengine.c
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ const struct traceOption TRACE_OPTIONS[] =
{RAS_METHODS_KEYWORD, FALSE, setMethod},
{RAS_STACKDEPTH_KEYWORD, TRUE, setStackDepth},
{RAS_COMPRESSION_LEVEL_KEYWORD, TRUE, setStackCompressionLevel},
{RAS_METHOD_STRING_LENGTH_KEYWORD, FALSE, setMethodStrArgLength},
};

#define NUMBER_OF_TRACE_OPTIONS ( sizeof(TRACE_OPTIONS) / sizeof(struct traceOption))
Expand Down

0 comments on commit 8606fa4

Please sign in to comment.