Mercurial > hg > truffle
annotate graal/com.oracle.graal.debug/src/com/oracle/graal/debug/internal/DebugScope.java @ 18875:d71bf1009d71
Fix indentation of multi-line strings passed to Debug.log
author | Paul Woegerer <paul.woegerer@oracle.com> |
---|---|
date | Fri, 16 Jan 2015 14:24:04 +0100 |
parents | 41d12b67bc9e |
children | 06536c3846e7 |
rev | line source |
---|---|
4343
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
1 /* |
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
2 * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. |
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
4 * |
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
7 * published by the Free Software Foundation. |
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
8 * |
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
13 * accompanied this code). |
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
14 * |
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
18 * |
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
21 * questions. |
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
22 */ |
5060
4ed4295ce15f
Update import statements.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5059
diff
changeset
|
23 package com.oracle.graal.debug.internal; |
4352
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
24 |
4357
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
25 import java.io.*; |
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
26 import java.util.*; |
4353
043bec543161
More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4352
diff
changeset
|
27 import java.util.concurrent.*; |
4343
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
28 |
5060
4ed4295ce15f
Update import statements.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5059
diff
changeset
|
29 import com.oracle.graal.debug.*; |
4357
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
30 |
13197
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
31 public final class DebugScope implements Debug.Scope { |
4352
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
32 |
11382
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
33 private final class IndentImpl implements Indent { |
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
34 |
11400
37446655527c
changed log indentation increment to 2 spaces
Doug Simon <doug.simon@oracle.com>
parents:
11382
diff
changeset
|
35 private static final String INDENTATION_INCREMENT = " "; |
37446655527c
changed log indentation increment to 2 spaces
Doug Simon <doug.simon@oracle.com>
parents:
11382
diff
changeset
|
36 |
11382
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
37 final String indent; |
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
38 final IndentImpl parentIndent; |
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
39 |
13551
ba72961e0d41
removed ability for the log indentation mechanism to also enable/disable logging which should be controlled only by the -G:Log command line option
Doug Simon <doug.simon@oracle.com>
parents:
13547
diff
changeset
|
40 IndentImpl(IndentImpl parentIndent) { |
11382
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
41 this.parentIndent = parentIndent; |
11400
37446655527c
changed log indentation increment to 2 spaces
Doug Simon <doug.simon@oracle.com>
parents:
11382
diff
changeset
|
42 this.indent = (parentIndent == null ? "" : parentIndent.indent + INDENTATION_INCREMENT); |
11382
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
43 } |
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
44 |
16405
9bfc4247262f
send log output to native tty
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16297
diff
changeset
|
45 private void printScopeName(StringBuilder str) { |
11400
37446655527c
changed log indentation increment to 2 spaces
Doug Simon <doug.simon@oracle.com>
parents:
11382
diff
changeset
|
46 if (logScopeName) { |
37446655527c
changed log indentation increment to 2 spaces
Doug Simon <doug.simon@oracle.com>
parents:
11382
diff
changeset
|
47 if (parentIndent != null) { |
16405
9bfc4247262f
send log output to native tty
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16297
diff
changeset
|
48 parentIndent.printScopeName(str); |
11400
37446655527c
changed log indentation increment to 2 spaces
Doug Simon <doug.simon@oracle.com>
parents:
11382
diff
changeset
|
49 } |
16405
9bfc4247262f
send log output to native tty
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16297
diff
changeset
|
50 str.append(indent).append("[thread:").append(Thread.currentThread().getId()).append("] scope: ").append(qualifiedName).append(System.lineSeparator()); |
11400
37446655527c
changed log indentation increment to 2 spaces
Doug Simon <doug.simon@oracle.com>
parents:
11382
diff
changeset
|
51 logScopeName = false; |
37446655527c
changed log indentation increment to 2 spaces
Doug Simon <doug.simon@oracle.com>
parents:
11382
diff
changeset
|
52 } |
37446655527c
changed log indentation increment to 2 spaces
Doug Simon <doug.simon@oracle.com>
parents:
11382
diff
changeset
|
53 } |
37446655527c
changed log indentation increment to 2 spaces
Doug Simon <doug.simon@oracle.com>
parents:
11382
diff
changeset
|
54 |
16463
f1d839174e71
Support for specifying log and dump levels.
Roland Schatz <roland.schatz@oracle.com>
parents:
16405
diff
changeset
|
55 public void log(int logLevel, String msg, Object... args) { |
f1d839174e71
Support for specifying log and dump levels.
Roland Schatz <roland.schatz@oracle.com>
parents:
16405
diff
changeset
|
56 if (isLogEnabled(logLevel)) { |
16405
9bfc4247262f
send log output to native tty
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16297
diff
changeset
|
57 StringBuilder str = new StringBuilder(); |
9bfc4247262f
send log output to native tty
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16297
diff
changeset
|
58 printScopeName(str); |
9bfc4247262f
send log output to native tty
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16297
diff
changeset
|
59 str.append(indent); |
18875
d71bf1009d71
Fix indentation of multi-line strings passed to Debug.log
Paul Woegerer <paul.woegerer@oracle.com>
parents:
18703
diff
changeset
|
60 String result = args.length == 0 ? msg : String.format(msg, args); |
d71bf1009d71
Fix indentation of multi-line strings passed to Debug.log
Paul Woegerer <paul.woegerer@oracle.com>
parents:
18703
diff
changeset
|
61 String lineSep = System.lineSeparator(); |
d71bf1009d71
Fix indentation of multi-line strings passed to Debug.log
Paul Woegerer <paul.woegerer@oracle.com>
parents:
18703
diff
changeset
|
62 str.append(result.replace(lineSep, lineSep.concat(indent))); |
d71bf1009d71
Fix indentation of multi-line strings passed to Debug.log
Paul Woegerer <paul.woegerer@oracle.com>
parents:
18703
diff
changeset
|
63 str.append(lineSep); |
16405
9bfc4247262f
send log output to native tty
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16297
diff
changeset
|
64 output.append(str); |
11382
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
65 lastUsedIndent = this; |
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
66 } |
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
67 } |
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
68 |
14871
667710021ea1
removed methods in Indent that are redundant with those in Debug
Doug Simon <doug.simon@oracle.com>
parents:
14586
diff
changeset
|
69 IndentImpl indent() { |
13551
ba72961e0d41
removed ability for the log indentation mechanism to also enable/disable logging which should be controlled only by the -G:Log command line option
Doug Simon <doug.simon@oracle.com>
parents:
13547
diff
changeset
|
70 lastUsedIndent = new IndentImpl(this); |
11382
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
71 return lastUsedIndent; |
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
72 } |
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
73 |
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
74 @Override |
14871
667710021ea1
removed methods in Indent that are redundant with those in Debug
Doug Simon <doug.simon@oracle.com>
parents:
14586
diff
changeset
|
75 public void close() { |
11382
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
76 if (parentIndent != null) { |
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
77 lastUsedIndent = parentIndent; |
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
78 } |
13142
401830ff96f4
some improvements in Debug logging
Erik Eckstein <erik.eckstein@oracle.com>
parents:
11733
diff
changeset
|
79 } |
11382
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
80 } |
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
81 |
14017
e34f406850e5
ThreadLocals should be final
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13551
diff
changeset
|
82 private static final ThreadLocal<DebugScope> instanceTL = new ThreadLocal<>(); |
e34f406850e5
ThreadLocals should be final
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13551
diff
changeset
|
83 private static final ThreadLocal<DebugScope> lastClosedTL = new ThreadLocal<>(); |
e34f406850e5
ThreadLocals should be final
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13551
diff
changeset
|
84 private static final ThreadLocal<DebugConfig> configTL = new ThreadLocal<>(); |
e34f406850e5
ThreadLocals should be final
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13551
diff
changeset
|
85 private static final ThreadLocal<Throwable> lastExceptionThrownTL = new ThreadLocal<>(); |
4357
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
86 |
4352
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
87 private final DebugScope parent; |
13163
1baa169508f5
made DebugScope be AutoCloseable so that try-with-resource can be used to more cleanly manage scopes
Doug Simon <doug.simon@oracle.com>
parents:
13142
diff
changeset
|
88 private final DebugConfig parentConfig; |
1baa169508f5
made DebugScope be AutoCloseable so that try-with-resource can be used to more cleanly manage scopes
Doug Simon <doug.simon@oracle.com>
parents:
13142
diff
changeset
|
89 private final boolean sandbox; |
11400
37446655527c
changed log indentation increment to 2 spaces
Doug Simon <doug.simon@oracle.com>
parents:
11382
diff
changeset
|
90 private IndentImpl lastUsedIndent; |
37446655527c
changed log indentation increment to 2 spaces
Doug Simon <doug.simon@oracle.com>
parents:
11382
diff
changeset
|
91 private boolean logScopeName; |
4357
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
92 |
13197
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
93 private final Object[] context; |
4357
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
94 |
11400
37446655527c
changed log indentation increment to 2 spaces
Doug Simon <doug.simon@oracle.com>
parents:
11382
diff
changeset
|
95 private final DebugValueMap valueMap; |
37446655527c
changed log indentation increment to 2 spaces
Doug Simon <doug.simon@oracle.com>
parents:
11382
diff
changeset
|
96 private final String qualifiedName; |
4352
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
97 |
4357
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
98 private static final char SCOPE_SEP = '.'; |
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
99 |
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
100 private boolean meterEnabled; |
4394
cf609017d3d4
Fixed warnings.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4392
diff
changeset
|
101 private boolean timeEnabled; |
15581
0dc0926cf0d8
added -G:TrackMemUse for measuring memory usage within scopes
Doug Simon <doug.simon@oracle.com>
parents:
14873
diff
changeset
|
102 private boolean memUseTrackingEnabled; |
16144
af9f3a5f091b
extended Debug API with DebugVerifyHandlers
Doug Simon <doug.simon@oracle.com>
parents:
15581
diff
changeset
|
103 private boolean verifyEnabled; |
16463
f1d839174e71
Support for specifying log and dump levels.
Roland Schatz <roland.schatz@oracle.com>
parents:
16405
diff
changeset
|
104 |
f1d839174e71
Support for specifying log and dump levels.
Roland Schatz <roland.schatz@oracle.com>
parents:
16405
diff
changeset
|
105 private int currentDumpLevel; |
f1d839174e71
Support for specifying log and dump levels.
Roland Schatz <roland.schatz@oracle.com>
parents:
16405
diff
changeset
|
106 private int currentLogLevel; |
4343
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
107 |
5302
55bf72fafc41
(preliminary) logging to file (-G:LogFile=asdf.txt)
Lukas Stadler <lukas.stadler@jku.at>
parents:
5134
diff
changeset
|
108 private PrintStream output; |
55bf72fafc41
(preliminary) logging to file (-G:LogFile=asdf.txt)
Lukas Stadler <lukas.stadler@jku.at>
parents:
5134
diff
changeset
|
109 |
4352
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
110 public static DebugScope getInstance() { |
4361
18b52fec79f1
Completed exception interception.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4357
diff
changeset
|
111 DebugScope result = instanceTL.get(); |
4352
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
112 if (result == null) { |
13163
1baa169508f5
made DebugScope be AutoCloseable so that try-with-resource can be used to more cleanly manage scopes
Doug Simon <doug.simon@oracle.com>
parents:
13142
diff
changeset
|
113 DebugScope topLevelDebugScope = new DebugScope(Thread.currentThread().getName(), "", null, false); |
4406
961895157a38
Tentative implementation of Meter and Time.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4394
diff
changeset
|
114 instanceTL.set(topLevelDebugScope); |
961895157a38
Tentative implementation of Meter and Time.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4394
diff
changeset
|
115 DebugValueMap.registerTopLevel(topLevelDebugScope.getValueMap()); |
961895157a38
Tentative implementation of Meter and Time.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4394
diff
changeset
|
116 return topLevelDebugScope; |
4352
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
117 } else { |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
118 return result; |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
119 } |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
120 } |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
121 |
4357
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
122 public static DebugConfig getConfig() { |
4361
18b52fec79f1
Completed exception interception.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4357
diff
changeset
|
123 return configTL.get(); |
4357
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
124 } |
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
125 |
13163
1baa169508f5
made DebugScope be AutoCloseable so that try-with-resource can be used to more cleanly manage scopes
Doug Simon <doug.simon@oracle.com>
parents:
13142
diff
changeset
|
126 private DebugScope(String name, String qualifiedName, DebugScope parent, boolean sandbox, Object... context) { |
4352
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
127 this.parent = parent; |
13163
1baa169508f5
made DebugScope be AutoCloseable so that try-with-resource can be used to more cleanly manage scopes
Doug Simon <doug.simon@oracle.com>
parents:
13142
diff
changeset
|
128 this.sandbox = sandbox; |
1baa169508f5
made DebugScope be AutoCloseable so that try-with-resource can be used to more cleanly manage scopes
Doug Simon <doug.simon@oracle.com>
parents:
13142
diff
changeset
|
129 this.parentConfig = getConfig(); |
4352
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
130 this.context = context; |
4357
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
131 this.qualifiedName = qualifiedName; |
11382
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
132 if (parent != null) { |
13551
ba72961e0d41
removed ability for the log indentation mechanism to also enable/disable logging which should be controlled only by the -G:Log command line option
Doug Simon <doug.simon@oracle.com>
parents:
13547
diff
changeset
|
133 lastUsedIndent = new IndentImpl(parent.lastUsedIndent); |
11382
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
134 logScopeName = !parent.qualifiedName.equals(qualifiedName); |
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
135 } else { |
13551
ba72961e0d41
removed ability for the log indentation mechanism to also enable/disable logging which should be controlled only by the -G:Log command line option
Doug Simon <doug.simon@oracle.com>
parents:
13547
diff
changeset
|
136 lastUsedIndent = new IndentImpl(null); |
11382
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
137 logScopeName = true; |
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
138 } |
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
139 |
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
140 // Be pragmatic: provide a default log stream to prevent a crash if the stream is not |
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
141 // set while logging |
16405
9bfc4247262f
send log output to native tty
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16297
diff
changeset
|
142 this.output = TTY.cachedOut; |
4484
14a00ee82980
Implement eager type resolving.
Andreas Woess <andreas.woess@jku.at>
parents:
4477
diff
changeset
|
143 assert context != null; |
5134
4eb9895d9afe
Refactoring of the debug framework. Move compiler thread implementation to its own file.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5061
diff
changeset
|
144 |
4eb9895d9afe
Refactoring of the debug framework. Move compiler thread implementation to its own file.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5061
diff
changeset
|
145 if (parent != null) { |
4eb9895d9afe
Refactoring of the debug framework. Move compiler thread implementation to its own file.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5061
diff
changeset
|
146 for (DebugValueMap child : parent.getValueMap().getChildren()) { |
4eb9895d9afe
Refactoring of the debug framework. Move compiler thread implementation to its own file.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5061
diff
changeset
|
147 if (child.getName().equals(name)) { |
4eb9895d9afe
Refactoring of the debug framework. Move compiler thread implementation to its own file.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5061
diff
changeset
|
148 this.valueMap = child; |
4eb9895d9afe
Refactoring of the debug framework. Move compiler thread implementation to its own file.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5061
diff
changeset
|
149 return; |
4eb9895d9afe
Refactoring of the debug framework. Move compiler thread implementation to its own file.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5061
diff
changeset
|
150 } |
4eb9895d9afe
Refactoring of the debug framework. Move compiler thread implementation to its own file.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5061
diff
changeset
|
151 } |
4eb9895d9afe
Refactoring of the debug framework. Move compiler thread implementation to its own file.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5061
diff
changeset
|
152 this.valueMap = new DebugValueMap(name); |
4eb9895d9afe
Refactoring of the debug framework. Move compiler thread implementation to its own file.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5061
diff
changeset
|
153 parent.getValueMap().addChild(this.valueMap); |
4eb9895d9afe
Refactoring of the debug framework. Move compiler thread implementation to its own file.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5061
diff
changeset
|
154 } else { |
4eb9895d9afe
Refactoring of the debug framework. Move compiler thread implementation to its own file.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5061
diff
changeset
|
155 this.valueMap = new DebugValueMap(name); |
4eb9895d9afe
Refactoring of the debug framework. Move compiler thread implementation to its own file.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5061
diff
changeset
|
156 } |
4357
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
157 } |
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
158 |
13163
1baa169508f5
made DebugScope be AutoCloseable so that try-with-resource can be used to more cleanly manage scopes
Doug Simon <doug.simon@oracle.com>
parents:
13142
diff
changeset
|
159 public void close() { |
1baa169508f5
made DebugScope be AutoCloseable so that try-with-resource can be used to more cleanly manage scopes
Doug Simon <doug.simon@oracle.com>
parents:
13142
diff
changeset
|
160 instanceTL.set(parent); |
13547
8ea968b6dba9
fix handling of sandboxed debug scopes (don't destroy parent flags)
Lukas Stadler <lukas.stadler@jku.at>
parents:
13197
diff
changeset
|
161 configTL.set(parentConfig); |
13197
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
162 lastClosedTL.set(this); |
13163
1baa169508f5
made DebugScope be AutoCloseable so that try-with-resource can be used to more cleanly manage scopes
Doug Simon <doug.simon@oracle.com>
parents:
13142
diff
changeset
|
163 } |
1baa169508f5
made DebugScope be AutoCloseable so that try-with-resource can be used to more cleanly manage scopes
Doug Simon <doug.simon@oracle.com>
parents:
13142
diff
changeset
|
164 |
16463
f1d839174e71
Support for specifying log and dump levels.
Roland Schatz <roland.schatz@oracle.com>
parents:
16405
diff
changeset
|
165 public boolean isDumpEnabled(int dumpLevel) { |
f1d839174e71
Support for specifying log and dump levels.
Roland Schatz <roland.schatz@oracle.com>
parents:
16405
diff
changeset
|
166 assert dumpLevel > 0; |
f1d839174e71
Support for specifying log and dump levels.
Roland Schatz <roland.schatz@oracle.com>
parents:
16405
diff
changeset
|
167 return currentDumpLevel >= dumpLevel; |
4357
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
168 } |
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
169 |
18690
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
170 /** |
18703 | 171 * Enable dumping at the new {@code dumpLevel} for the remainder of enclosing scopes. This only |
172 * works if a {@link TopLevelDebugConfig} was installed at a higher scope. | |
18690
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
173 * |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
174 * @param dumpLevel |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
175 */ |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
176 public static void setDumpLevel(int dumpLevel) { |
18703 | 177 TopLevelDebugConfig config = fetchTopLevelDebugConfig("setDebugLevel"); |
18690
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
178 if (config != null) { |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
179 config.override(DelegatingDebugConfig.Level.DUMP, dumpLevel); |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
180 recursiveUpdateFlags(); |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
181 } |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
182 } |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
183 |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
184 /** |
18703 | 185 * Enable logging at the new {@code logLevel} for the remainder of enclosing scopes. This only |
186 * works if a {@link TopLevelDebugConfig} was installed at a higher scope. | |
18690
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
187 * |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
188 * @param logLevel |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
189 */ |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
190 public static void setLogLevel(int logLevel) { |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
191 TopLevelDebugConfig config = fetchTopLevelDebugConfig("setLogLevel"); |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
192 if (config != null) { |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
193 config.override(DelegatingDebugConfig.Level.LOG, logLevel); |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
194 config.delegate(DelegatingDebugConfig.Feature.LOG_METHOD); |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
195 recursiveUpdateFlags(); |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
196 } |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
197 } |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
198 |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
199 private static void recursiveUpdateFlags() { |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
200 DebugScope c = DebugScope.getInstance(); |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
201 while (c != null) { |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
202 c.updateFlags(); |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
203 c = c.parent; |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
204 } |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
205 } |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
206 |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
207 private static TopLevelDebugConfig fetchTopLevelDebugConfig(String msg) { |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
208 DebugConfig config = getConfig(); |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
209 if (config instanceof TopLevelDebugConfig) { |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
210 return (TopLevelDebugConfig) config; |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
211 } else { |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
212 PrintStream out = System.out; |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
213 if (config == null) { |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
214 out.printf("DebugScope.%s ignored because debugging is disabled%n", msg); |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
215 } else { |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
216 out.printf("DebugScope.%s ignored because top level delegate config missing%n", msg); |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
217 } |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
218 return null; |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
219 } |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
220 } |
abcff66a23b0
Add ability to programmatically set the dump level
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
16463
diff
changeset
|
221 |
16144
af9f3a5f091b
extended Debug API with DebugVerifyHandlers
Doug Simon <doug.simon@oracle.com>
parents:
15581
diff
changeset
|
222 public boolean isVerifyEnabled() { |
af9f3a5f091b
extended Debug API with DebugVerifyHandlers
Doug Simon <doug.simon@oracle.com>
parents:
15581
diff
changeset
|
223 return verifyEnabled; |
af9f3a5f091b
extended Debug API with DebugVerifyHandlers
Doug Simon <doug.simon@oracle.com>
parents:
15581
diff
changeset
|
224 } |
af9f3a5f091b
extended Debug API with DebugVerifyHandlers
Doug Simon <doug.simon@oracle.com>
parents:
15581
diff
changeset
|
225 |
16463
f1d839174e71
Support for specifying log and dump levels.
Roland Schatz <roland.schatz@oracle.com>
parents:
16405
diff
changeset
|
226 public boolean isLogEnabled(int logLevel) { |
f1d839174e71
Support for specifying log and dump levels.
Roland Schatz <roland.schatz@oracle.com>
parents:
16405
diff
changeset
|
227 assert logLevel > 0; |
f1d839174e71
Support for specifying log and dump levels.
Roland Schatz <roland.schatz@oracle.com>
parents:
16405
diff
changeset
|
228 return currentLogLevel >= logLevel; |
4357
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
229 } |
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
230 |
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
231 public boolean isMeterEnabled() { |
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
232 return meterEnabled; |
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
233 } |
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
234 |
4394
cf609017d3d4
Fixed warnings.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4392
diff
changeset
|
235 public boolean isTimeEnabled() { |
cf609017d3d4
Fixed warnings.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4392
diff
changeset
|
236 return timeEnabled; |
4352
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
237 } |
4343
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
238 |
15581
0dc0926cf0d8
added -G:TrackMemUse for measuring memory usage within scopes
Doug Simon <doug.simon@oracle.com>
parents:
14873
diff
changeset
|
239 public boolean isMemUseTrackingEnabled() { |
0dc0926cf0d8
added -G:TrackMemUse for measuring memory usage within scopes
Doug Simon <doug.simon@oracle.com>
parents:
14873
diff
changeset
|
240 return memUseTrackingEnabled; |
0dc0926cf0d8
added -G:TrackMemUse for measuring memory usage within scopes
Doug Simon <doug.simon@oracle.com>
parents:
14873
diff
changeset
|
241 } |
0dc0926cf0d8
added -G:TrackMemUse for measuring memory usage within scopes
Doug Simon <doug.simon@oracle.com>
parents:
14873
diff
changeset
|
242 |
16463
f1d839174e71
Support for specifying log and dump levels.
Roland Schatz <roland.schatz@oracle.com>
parents:
16405
diff
changeset
|
243 public void log(int logLevel, String msg, Object... args) { |
f1d839174e71
Support for specifying log and dump levels.
Roland Schatz <roland.schatz@oracle.com>
parents:
16405
diff
changeset
|
244 lastUsedIndent.log(logLevel, msg, args); |
4357
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
245 } |
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
246 |
16463
f1d839174e71
Support for specifying log and dump levels.
Roland Schatz <roland.schatz@oracle.com>
parents:
16405
diff
changeset
|
247 public void dump(int dumpLevel, Object object, String formatString, Object... args) { |
f1d839174e71
Support for specifying log and dump levels.
Roland Schatz <roland.schatz@oracle.com>
parents:
16405
diff
changeset
|
248 if (isDumpEnabled(dumpLevel)) { |
4363
7462c3600c3a
Draft changes to the graph plotting.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4362
diff
changeset
|
249 DebugConfig config = getConfig(); |
7462c3600c3a
Draft changes to the graph plotting.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4362
diff
changeset
|
250 if (config != null) { |
7462c3600c3a
Draft changes to the graph plotting.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4362
diff
changeset
|
251 String message = String.format(formatString, args); |
7462c3600c3a
Draft changes to the graph plotting.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4362
diff
changeset
|
252 for (DebugDumpHandler dumpHandler : config.dumpHandlers()) { |
4362
ed69fd347566
Added DebugDumpHandler interface.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4361
diff
changeset
|
253 dumpHandler.dump(object, message); |
ed69fd347566
Added DebugDumpHandler interface.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4361
diff
changeset
|
254 } |
ed69fd347566
Added DebugDumpHandler interface.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4361
diff
changeset
|
255 } |
ed69fd347566
Added DebugDumpHandler interface.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4361
diff
changeset
|
256 } |
4352
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
257 } |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
258 |
6570
d4f5301e9c7b
added method to DebugScope to simplify dumping of a graph from with Eclipse
Doug Simon <doug.simon@oracle.com>
parents:
5856
diff
changeset
|
259 /** |
d4f5301e9c7b
added method to DebugScope to simplify dumping of a graph from with Eclipse
Doug Simon <doug.simon@oracle.com>
parents:
5856
diff
changeset
|
260 * This method exists mainly to allow a debugger (e.g., Eclipse) to force dump a graph. |
d4f5301e9c7b
added method to DebugScope to simplify dumping of a graph from with Eclipse
Doug Simon <doug.simon@oracle.com>
parents:
5856
diff
changeset
|
261 */ |
14873
00eb80d735ed
removed Debug.printf and added multi-arg versions of Debug.dump
Doug Simon <doug.simon@oracle.com>
parents:
14871
diff
changeset
|
262 public static void forceDump(Object object, String message) { |
6570
d4f5301e9c7b
added method to DebugScope to simplify dumping of a graph from with Eclipse
Doug Simon <doug.simon@oracle.com>
parents:
5856
diff
changeset
|
263 DebugConfig config = getConfig(); |
d4f5301e9c7b
added method to DebugScope to simplify dumping of a graph from with Eclipse
Doug Simon <doug.simon@oracle.com>
parents:
5856
diff
changeset
|
264 if (config != null) { |
d4f5301e9c7b
added method to DebugScope to simplify dumping of a graph from with Eclipse
Doug Simon <doug.simon@oracle.com>
parents:
5856
diff
changeset
|
265 for (DebugDumpHandler dumpHandler : config.dumpHandlers()) { |
d4f5301e9c7b
added method to DebugScope to simplify dumping of a graph from with Eclipse
Doug Simon <doug.simon@oracle.com>
parents:
5856
diff
changeset
|
266 dumpHandler.dump(object, message); |
d4f5301e9c7b
added method to DebugScope to simplify dumping of a graph from with Eclipse
Doug Simon <doug.simon@oracle.com>
parents:
5856
diff
changeset
|
267 } |
11733
cb5df1879500
added warning about ignored forced graph dump
Doug Simon <doug.simon@oracle.com>
parents:
11616
diff
changeset
|
268 } else { |
cb5df1879500
added warning about ignored forced graph dump
Doug Simon <doug.simon@oracle.com>
parents:
11616
diff
changeset
|
269 PrintStream out = System.out; |
cb5df1879500
added warning about ignored forced graph dump
Doug Simon <doug.simon@oracle.com>
parents:
11616
diff
changeset
|
270 out.println("Forced dump ignored because debugging is disabled - use -G:Dump=xxx option"); |
6570
d4f5301e9c7b
added method to DebugScope to simplify dumping of a graph from with Eclipse
Doug Simon <doug.simon@oracle.com>
parents:
5856
diff
changeset
|
271 } |
d4f5301e9c7b
added method to DebugScope to simplify dumping of a graph from with Eclipse
Doug Simon <doug.simon@oracle.com>
parents:
5856
diff
changeset
|
272 } |
d4f5301e9c7b
added method to DebugScope to simplify dumping of a graph from with Eclipse
Doug Simon <doug.simon@oracle.com>
parents:
5856
diff
changeset
|
273 |
9199
2ff3499d408e
enhanced support for sandboxed debug scope such that their debug config can be specified
Doug Simon <doug.simon@oracle.com>
parents:
7530
diff
changeset
|
274 /** |
16297
b9236eaecf4c
simplified DebugVerifyHandler API to be closer to DebugDumpHandler
Doug Simon <doug.simon@oracle.com>
parents:
16193
diff
changeset
|
275 * @see Debug#verify(Object, String) |
16144
af9f3a5f091b
extended Debug API with DebugVerifyHandlers
Doug Simon <doug.simon@oracle.com>
parents:
15581
diff
changeset
|
276 */ |
16297
b9236eaecf4c
simplified DebugVerifyHandler API to be closer to DebugDumpHandler
Doug Simon <doug.simon@oracle.com>
parents:
16193
diff
changeset
|
277 public void verify(Object object, String formatString, Object... args) { |
16144
af9f3a5f091b
extended Debug API with DebugVerifyHandlers
Doug Simon <doug.simon@oracle.com>
parents:
15581
diff
changeset
|
278 if (isVerifyEnabled()) { |
af9f3a5f091b
extended Debug API with DebugVerifyHandlers
Doug Simon <doug.simon@oracle.com>
parents:
15581
diff
changeset
|
279 DebugConfig config = getConfig(); |
af9f3a5f091b
extended Debug API with DebugVerifyHandlers
Doug Simon <doug.simon@oracle.com>
parents:
15581
diff
changeset
|
280 if (config != null) { |
16297
b9236eaecf4c
simplified DebugVerifyHandler API to be closer to DebugDumpHandler
Doug Simon <doug.simon@oracle.com>
parents:
16193
diff
changeset
|
281 String message = String.format(formatString, args); |
16144
af9f3a5f091b
extended Debug API with DebugVerifyHandlers
Doug Simon <doug.simon@oracle.com>
parents:
15581
diff
changeset
|
282 for (DebugVerifyHandler handler : config.verifyHandlers()) { |
16297
b9236eaecf4c
simplified DebugVerifyHandler API to be closer to DebugDumpHandler
Doug Simon <doug.simon@oracle.com>
parents:
16193
diff
changeset
|
283 handler.verify(object, message); |
16144
af9f3a5f091b
extended Debug API with DebugVerifyHandlers
Doug Simon <doug.simon@oracle.com>
parents:
15581
diff
changeset
|
284 } |
af9f3a5f091b
extended Debug API with DebugVerifyHandlers
Doug Simon <doug.simon@oracle.com>
parents:
15581
diff
changeset
|
285 } |
af9f3a5f091b
extended Debug API with DebugVerifyHandlers
Doug Simon <doug.simon@oracle.com>
parents:
15581
diff
changeset
|
286 } |
af9f3a5f091b
extended Debug API with DebugVerifyHandlers
Doug Simon <doug.simon@oracle.com>
parents:
15581
diff
changeset
|
287 } |
af9f3a5f091b
extended Debug API with DebugVerifyHandlers
Doug Simon <doug.simon@oracle.com>
parents:
15581
diff
changeset
|
288 |
af9f3a5f091b
extended Debug API with DebugVerifyHandlers
Doug Simon <doug.simon@oracle.com>
parents:
15581
diff
changeset
|
289 /** |
13197
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
290 * Creates and enters a new debug scope which is either a child of the current scope or a |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
291 * disjoint top level scope. |
14871
667710021ea1
removed methods in Indent that are redundant with those in Debug
Doug Simon <doug.simon@oracle.com>
parents:
14586
diff
changeset
|
292 * |
13197
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
293 * @param name the name of the new scope |
13547
8ea968b6dba9
fix handling of sandboxed debug scopes (don't destroy parent flags)
Lukas Stadler <lukas.stadler@jku.at>
parents:
13197
diff
changeset
|
294 * @param sandboxConfig the configuration to use for a new top level scope, or null if the new |
8ea968b6dba9
fix handling of sandboxed debug scopes (don't destroy parent flags)
Lukas Stadler <lukas.stadler@jku.at>
parents:
13197
diff
changeset
|
295 * scope should be a child scope |
14109
85969b1aba78
Use a forceLog scope for LinearScan.reportFailure. Remove @SuppressWarnings on DebugScope.scope
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
14017
diff
changeset
|
296 * @param newContextObjects objects to be appended to the debug context |
13197
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
297 * @return the new scope which will be exited when its {@link #close()} method is called |
9199
2ff3499d408e
enhanced support for sandboxed debug scope such that their debug config can be specified
Doug Simon <doug.simon@oracle.com>
parents:
7530
diff
changeset
|
298 */ |
14586
d2fe05d5cc96
added support for lazy computation of names for use with Debug
Doug Simon <doug.simon@oracle.com>
parents:
14109
diff
changeset
|
299 public DebugScope scope(CharSequence name, DebugConfig sandboxConfig, Object... newContextObjects) { |
13163
1baa169508f5
made DebugScope be AutoCloseable so that try-with-resource can be used to more cleanly manage scopes
Doug Simon <doug.simon@oracle.com>
parents:
13142
diff
changeset
|
300 DebugScope newScope = null; |
13547
8ea968b6dba9
fix handling of sandboxed debug scopes (don't destroy parent flags)
Lukas Stadler <lukas.stadler@jku.at>
parents:
13197
diff
changeset
|
301 if (sandboxConfig != null) { |
14586
d2fe05d5cc96
added support for lazy computation of names for use with Debug
Doug Simon <doug.simon@oracle.com>
parents:
14109
diff
changeset
|
302 newScope = new DebugScope(name.toString(), name.toString(), this, true, newContextObjects); |
13547
8ea968b6dba9
fix handling of sandboxed debug scopes (don't destroy parent flags)
Lukas Stadler <lukas.stadler@jku.at>
parents:
13197
diff
changeset
|
303 configTL.set(sandboxConfig); |
4352
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
304 } else { |
14586
d2fe05d5cc96
added support for lazy computation of names for use with Debug
Doug Simon <doug.simon@oracle.com>
parents:
14109
diff
changeset
|
305 newScope = this.createChild(name.toString(), newContextObjects); |
4343
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
306 } |
13163
1baa169508f5
made DebugScope be AutoCloseable so that try-with-resource can be used to more cleanly manage scopes
Doug Simon <doug.simon@oracle.com>
parents:
13142
diff
changeset
|
307 instanceTL.set(newScope); |
1baa169508f5
made DebugScope be AutoCloseable so that try-with-resource can be used to more cleanly manage scopes
Doug Simon <doug.simon@oracle.com>
parents:
13142
diff
changeset
|
308 newScope.updateFlags(); |
1baa169508f5
made DebugScope be AutoCloseable so that try-with-resource can be used to more cleanly manage scopes
Doug Simon <doug.simon@oracle.com>
parents:
13142
diff
changeset
|
309 return newScope; |
4369
efc430d943c0
Drafted regexp filters. Rewrote logging statements of floating read phase.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4363
diff
changeset
|
310 } |
efc430d943c0
Drafted regexp filters. Rewrote logging statements of floating read phase.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4363
diff
changeset
|
311 |
13197
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
312 public RuntimeException handle(Throwable e) { |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
313 DebugScope lastClosed = lastClosedTL.get(); |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
314 assert lastClosed.parent == this : "Debug.handle() used with no matching Debug.scope(...) or Debug.sandbox(...)"; |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
315 if (e != lastExceptionThrownTL.get()) { |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
316 RuntimeException newException = null; |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
317 instanceTL.set(lastClosed); |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
318 try (DebugScope s = lastClosed) { |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
319 newException = s.interceptException(e); |
4353
043bec543161
More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4352
diff
changeset
|
320 } |
13197
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
321 assert instanceTL.get() == this; |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
322 assert lastClosed == lastClosedTL.get(); |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
323 if (newException == null) { |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
324 lastExceptionThrownTL.set(e); |
4361
18b52fec79f1
Completed exception interception.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4357
diff
changeset
|
325 } else { |
13197
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
326 lastExceptionThrownTL.set(newException); |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
327 throw newException; |
4361
18b52fec79f1
Completed exception interception.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4357
diff
changeset
|
328 } |
4352
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
329 } |
13197
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
330 if (e instanceof Error) { |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
331 throw (Error) e; |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
332 } |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
333 if (e instanceof RuntimeException) { |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
334 throw (RuntimeException) e; |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
335 } |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
336 throw new RuntimeException(e); |
4352
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
337 } |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
338 |
4357
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
339 private void updateFlags() { |
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
340 DebugConfig config = getConfig(); |
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
341 if (config == null) { |
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
342 meterEnabled = false; |
15581
0dc0926cf0d8
added -G:TrackMemUse for measuring memory usage within scopes
Doug Simon <doug.simon@oracle.com>
parents:
14873
diff
changeset
|
343 memUseTrackingEnabled = false; |
4394
cf609017d3d4
Fixed warnings.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4392
diff
changeset
|
344 timeEnabled = false; |
16144
af9f3a5f091b
extended Debug API with DebugVerifyHandlers
Doug Simon <doug.simon@oracle.com>
parents:
15581
diff
changeset
|
345 verifyEnabled = false; |
11382
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
346 |
16463
f1d839174e71
Support for specifying log and dump levels.
Roland Schatz <roland.schatz@oracle.com>
parents:
16405
diff
changeset
|
347 currentDumpLevel = 0; |
f1d839174e71
Support for specifying log and dump levels.
Roland Schatz <roland.schatz@oracle.com>
parents:
16405
diff
changeset
|
348 |
11382
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
349 // Be pragmatic: provide a default log stream to prevent a crash if the stream is not |
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
350 // set while logging |
16405
9bfc4247262f
send log output to native tty
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16297
diff
changeset
|
351 output = TTY.cachedOut; |
4357
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
352 } else { |
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
353 meterEnabled = config.isMeterEnabled(); |
15581
0dc0926cf0d8
added -G:TrackMemUse for measuring memory usage within scopes
Doug Simon <doug.simon@oracle.com>
parents:
14873
diff
changeset
|
354 memUseTrackingEnabled = config.isMemUseTrackingEnabled(); |
4394
cf609017d3d4
Fixed warnings.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4392
diff
changeset
|
355 timeEnabled = config.isTimeEnabled(); |
16144
af9f3a5f091b
extended Debug API with DebugVerifyHandlers
Doug Simon <doug.simon@oracle.com>
parents:
15581
diff
changeset
|
356 verifyEnabled = config.isVerifyEnabled(); |
5302
55bf72fafc41
(preliminary) logging to file (-G:LogFile=asdf.txt)
Lukas Stadler <lukas.stadler@jku.at>
parents:
5134
diff
changeset
|
357 output = config.output(); |
16463
f1d839174e71
Support for specifying log and dump levels.
Roland Schatz <roland.schatz@oracle.com>
parents:
16405
diff
changeset
|
358 currentDumpLevel = config.getDumpLevel(); |
f1d839174e71
Support for specifying log and dump levels.
Roland Schatz <roland.schatz@oracle.com>
parents:
16405
diff
changeset
|
359 currentLogLevel = config.getLogLevel(); |
4357
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
360 } |
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
361 } |
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
362 |
4477
27c5466afd55
Changes to debug framework.
Andreas Woess <andreas.woess@jku.at>
parents:
4437
diff
changeset
|
363 private RuntimeException interceptException(final Throwable e) { |
4361
18b52fec79f1
Completed exception interception.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4357
diff
changeset
|
364 final DebugConfig config = getConfig(); |
18b52fec79f1
Completed exception interception.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4357
diff
changeset
|
365 if (config != null) { |
13547
8ea968b6dba9
fix handling of sandboxed debug scopes (don't destroy parent flags)
Lukas Stadler <lukas.stadler@jku.at>
parents:
13197
diff
changeset
|
366 try (DebugScope s = scope("InterceptException", null, e)) { |
13197
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
367 return config.interceptException(e); |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
368 } catch (Throwable t) { |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
369 return new RuntimeException("Exception while intercepting exception", t); |
8569b9e047cd
change debug scopes implementation to prevent extra frames related to mechanism being added to call stack
Doug Simon <doug.simon@oracle.com>
parents:
13163
diff
changeset
|
370 } |
4361
18b52fec79f1
Completed exception interception.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4357
diff
changeset
|
371 } |
4477
27c5466afd55
Changes to debug framework.
Andreas Woess <andreas.woess@jku.at>
parents:
4437
diff
changeset
|
372 return null; |
4343
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
373 } |
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
374 |
4357
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
375 private DebugValueMap getValueMap() { |
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
376 return valueMap; |
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
377 } |
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
378 |
4352
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
379 long getCurrentValue(int index) { |
4357
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
380 return getValueMap().getCurrentValue(index); |
4352
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
381 } |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
382 |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
383 void setCurrentValue(int index, long l) { |
4357
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
384 getValueMap().setCurrentValue(index, l); |
4352
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
385 } |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
386 |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
387 private DebugScope createChild(String newName, Object[] newContext) { |
4369
efc430d943c0
Drafted regexp filters. Rewrote logging statements of floating read phase.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4363
diff
changeset
|
388 String newQualifiedName = newName; |
efc430d943c0
Drafted regexp filters. Rewrote logging statements of floating read phase.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4363
diff
changeset
|
389 if (this.qualifiedName.length() > 0) { |
efc430d943c0
Drafted regexp filters. Rewrote logging statements of floating read phase.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4363
diff
changeset
|
390 newQualifiedName = this.qualifiedName + SCOPE_SEP + newName; |
efc430d943c0
Drafted regexp filters. Rewrote logging statements of floating read phase.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4363
diff
changeset
|
391 } |
13163
1baa169508f5
made DebugScope be AutoCloseable so that try-with-resource can be used to more cleanly manage scopes
Doug Simon <doug.simon@oracle.com>
parents:
13142
diff
changeset
|
392 DebugScope result = new DebugScope(newName, newQualifiedName, this, false, newContext); |
4352
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
393 return result; |
4343
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
394 } |
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
395 |
4352
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
396 public Iterable<Object> getCurrentContext() { |
5856
a3e7b8320165
Fix compiler warning.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5307
diff
changeset
|
397 final DebugScope scope = this; |
4352
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
398 return new Iterable<Object>() { |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
399 |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
400 @Override |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
401 public Iterator<Object> iterator() { |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
402 return new Iterator<Object>() { |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
403 |
5856
a3e7b8320165
Fix compiler warning.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5307
diff
changeset
|
404 DebugScope currentScope = scope; |
4352
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
405 int objectIndex; |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
406 |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
407 @Override |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
408 public boolean hasNext() { |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
409 selectScope(); |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
410 return currentScope != null; |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
411 } |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
412 |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
413 private void selectScope() { |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
414 while (currentScope != null && currentScope.context.length <= objectIndex) { |
13163
1baa169508f5
made DebugScope be AutoCloseable so that try-with-resource can be used to more cleanly manage scopes
Doug Simon <doug.simon@oracle.com>
parents:
13142
diff
changeset
|
415 currentScope = currentScope.sandbox ? null : currentScope.parent; |
4352
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
416 objectIndex = 0; |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
417 } |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
418 } |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
419 |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
420 @Override |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
421 public Object next() { |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
422 selectScope(); |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
423 if (currentScope != null) { |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
424 return currentScope.context[objectIndex++]; |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
425 } |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
426 throw new IllegalStateException("May only be called if there is a next element."); |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
427 } |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
428 |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
429 @Override |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
430 public void remove() { |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
431 throw new UnsupportedOperationException("This iterator is read only."); |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
432 } |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
433 }; |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
434 } |
5a84f5548fc4
More work on new debug infrastructure.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4346
diff
changeset
|
435 }; |
4343
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
436 } |
4353
043bec543161
More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4352
diff
changeset
|
437 |
043bec543161
More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4352
diff
changeset
|
438 public static <T> T call(Callable<T> callable) { |
043bec543161
More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4352
diff
changeset
|
439 try { |
043bec543161
More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4352
diff
changeset
|
440 return callable.call(); |
043bec543161
More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4352
diff
changeset
|
441 } catch (Exception e) { |
043bec543161
More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4352
diff
changeset
|
442 if (e instanceof RuntimeException) { |
043bec543161
More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4352
diff
changeset
|
443 throw (RuntimeException) e; |
043bec543161
More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4352
diff
changeset
|
444 } else { |
043bec543161
More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4352
diff
changeset
|
445 throw new RuntimeException(e); |
043bec543161
More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4352
diff
changeset
|
446 } |
043bec543161
More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4352
diff
changeset
|
447 } |
043bec543161
More work on debug framework. Removed concept of GraalContext.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4352
diff
changeset
|
448 } |
4357
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
449 |
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
450 public void setConfig(DebugConfig newConfig) { |
4361
18b52fec79f1
Completed exception interception.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4357
diff
changeset
|
451 configTL.set(newConfig); |
4357
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
452 updateFlags(); |
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
453 } |
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
454 |
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
455 public String getQualifiedName() { |
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
456 return qualifiedName; |
719ac1d92a52
More work on debug framework.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4353
diff
changeset
|
457 } |
11382
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
458 |
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
459 public Indent pushIndentLogger() { |
14871
667710021ea1
removed methods in Indent that are redundant with those in Debug
Doug Simon <doug.simon@oracle.com>
parents:
14586
diff
changeset
|
460 lastUsedIndent = lastUsedIndent.indent(); |
11382
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
461 return lastUsedIndent; |
d7d12ef788ba
add logging with indentation in graal.Debug
Erik Eckstein <erik.eckstein@oracle.com>
parents:
10923
diff
changeset
|
462 } |
4343
f03c71a0aeb8
Added draft debug classes.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
463 } |