7
7
# $5 - method
8
8
# $6 - number of args
9
9
# $7 - entry/exit/line
10
+ # $8 - backtrace trigger
10
11
11
12
exec 1>&2 # redirect byteman/etc. tracing output to stderr, for easier filtering
12
13
13
- if [ $# -ne 7 ]; then
14
- echo " need exactly seven arguments"
14
+ if [[ $# -gt 8 || $# -lt 7 ] ]; then
15
+ echo " need seven or eight arguments"
15
16
exit 1
16
17
fi
17
18
@@ -23,6 +24,12 @@ arg_method=$5
23
24
arg_argcount=$6
24
25
arg_probetype=$7
25
26
27
+ if [ $# -eq 7 ]; then
28
+ arg_backtrace=0
29
+ else
30
+ arg_backtrace=$8
31
+ fi
32
+
26
33
SYSTEMTAP_DIR=${SYSTEMTAP_DIR-$HOME / .systemtap}
27
34
BYTEMAN_HOME=${BYTEMAN_HOME-/ usr/ share/ java/ byteman}
28
35
JAVA_HOME=${JAVA_HOME-/ usr/ lib/ jvm/ java}
40
47
# the byteman and byteman-submit jars should be in ${BYTEMAN_HOME}/lib
41
48
BYTEMAN_JAR=${BYTEMAN_HOME} /byteman.jar
42
49
if [ ! -r ${BYTEMAN_JAR} ]; then
43
- echo " Missing $BYTEMAN_JAR "
50
+ echo " Missing $BYTEMAN_JAR "
44
51
exit 1
45
52
fi
46
53
@@ -95,7 +102,7 @@ mkdir -p $flagdir
95
102
if [[ $arg_jvmpid != * [[:digit:]]* ]]; then
96
103
target_pid=` jps -l | grep $arg_jvmpid | cut -f1 -d" " `
97
104
for target in $target_pid ; do
98
- $0 $arg_command $target $arg_rulename $arg_class $arg_method $arg_argcount $arg_probetype
105
+ $0 $arg_command $target $arg_rulename $arg_class $arg_method $arg_argcount $arg_probetype $arg_backtrace
99
106
done ;
100
107
exit 0
101
108
else
@@ -119,6 +126,7 @@ if [ -s $byteman_installed_portfile ]; then
119
126
echo " Byteman agent reused for java pid $target_pid , port $bmport "
120
127
fi
121
128
129
+
122
130
# XXX: liveness-check the port; bmsubmit with no argument just lists current rules
123
131
# if fails, delete the _portfile and retry everything
124
132
else
132
140
133
141
# There are two ways to invoke and run byteman operations with the jvm's we're interested
134
142
# in, we can alter the startup arguments to include a -javaagent parameter, or use
135
- # byteman and its use of VMAttach libraries, for our case it always makes sense to use
143
+ # byteman and its use of VMAttach libraries, for our case it always makes sense to use
136
144
# byteman classes directly and avoid -javaagent
137
145
138
146
if [ " $STAPBM_VERBOSE " != " no" ]; then
@@ -174,20 +182,31 @@ function echo_bytemanrule()
174
182
;;
175
183
esac
176
184
echo " IF TRUE"
185
+ if [ " $arg_backtrace " == " 1" ]; then
186
+ echo ' DO STAP_BACKTRACE("' $arg_rulename ' ");'
187
+ else
188
+ echo -n ' DO '
189
+ fi
177
190
case " $arg_argcount " in
178
- 0) echo ' DO METHOD_STAP_PROBE0("' $arg_rulename ' ")' ;;
179
- 1) echo ' DO METHOD_STAP_PROBE1("' $arg_rulename ' ", $1)' ;;
180
- 2) echo ' DO METHOD_STAP_PROBE2("' $arg_rulename ' ", $1, $2)' ;;
181
- 3) echo ' DO METHOD_STAP_PROBE3("' $arg_rulename ' ", $1, $2, $3)' ;;
182
- 4) echo ' DO METHOD_STAP_PROBE4("' $arg_rulename ' ", $1, $2, $3, $4)' ;;
183
- 5) echo ' DO METHOD_STAP_PROBE5("' $arg_rulename ' ", $1, $2, $3, $4, $5)' ;;
184
- 6) echo ' DO METHOD_STAP_PROBE6("' $arg_rulename ' ", $1, $2, $3, $4, $5, $6)' ;;
185
- 7) echo ' DO METHOD_STAP_PROBE7("' $arg_rulename ' ", $1, $2, $3, $4, $5, $6, $7)' ;;
186
- 8) echo ' DO METHOD_STAP_PROBE8("' $arg_rulename ' ", $1, $2, $3, $4, $5, $6, $7, $8)' ;;
187
- 9) echo ' DO METHOD_STAP_PROBE9("' $arg_rulename ' ", $1, $2, $3, $4, $5, $6, $7, $8, $9)' ;;
188
- 10) echo ' DO METHOD_STAP_PROBE10("' $arg_rulename ' ", $1, $2, $3, $4, $5, $6, $7, $8, $9, $10)' ;;
191
+ 0) echo -n ' METHOD_STAP_PROBE0("' $arg_rulename ' ")' ;;
192
+ 1) echo -n ' METHOD_STAP_PROBE1("' $arg_rulename ' ", $1)' ;;
193
+ 2) echo -n ' METHOD_STAP_PROBE2("' $arg_rulename ' ", $1, $2)' ;;
194
+ 3) echo -n ' METHOD_STAP_PROBE3("' $arg_rulename ' ", $1, $2, $3)' ;;
195
+ 4) echo -n ' METHOD_STAP_PROBE4("' $arg_rulename ' ", $1, $2, $3, $4)' ;;
196
+ 5) echo -n ' METHOD_STAP_PROBE5("' $arg_rulename ' ", $1, $2, $3, $4, $5)' ;;
197
+ 6) echo -n ' METHOD_STAP_PROBE6("' $arg_rulename ' ", $1, $2, $3, $4, $5, $6)' ;;
198
+ 7) echo -n ' METHOD_STAP_PROBE7("' $arg_rulename ' ", $1, $2, $3, $4, $5, $6, $7)' ;;
199
+ 8) echo -n ' METHOD_STAP_PROBE8("' $arg_rulename ' ", $1, $2, $3, $4, $5, $6, $7, $8)' ;;
200
+ 9) echo -n ' METHOD_STAP_PROBE9("' $arg_rulename ' ", $1, $2, $3, $4, $5, $6, $7, $8, $9)' ;;
201
+ 10) echo -n ' METHOD_STAP_PROBE10("' $arg_rulename ' ", $1, $2, $3, $4, $5, $6, $7, $8, $9, $10)' ;;
189
202
* ) echo ' bad arg-count' ; exit 1 ;;
190
203
esac
204
+ if [ " $arg_backtrace " == " 1" ]; then
205
+ echo ' ;'
206
+ echo ' METHOD_BT_DELETE("' $arg_rulename ' ")'
207
+ else
208
+ echo ' '
209
+ fi
191
210
echo " ENDRULE"
192
211
}
193
212
0 commit comments