OLD | NEW |
1 // Copyright 2008 the V8 project authors. All rights reserved. | 1 // Copyright 2008 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
95 | 95 |
96 // Current debug state. | 96 // Current debug state. |
97 const kNoFrame = -1; | 97 const kNoFrame = -1; |
98 Debug.State = { | 98 Debug.State = { |
99 currentFrame: kNoFrame, | 99 currentFrame: kNoFrame, |
100 currentSourceLine: -1 | 100 currentSourceLine: -1 |
101 } | 101 } |
102 var trace_compile = false; // Tracing all compile events? | 102 var trace_compile = false; // Tracing all compile events? |
103 | 103 |
104 | 104 |
105 function DebugEventToText(event) { | 105 // Process a debugger JSON message into a display text and a running status. |
| 106 // This function returns an object with properties "text" and "running" holding |
| 107 // this information. |
| 108 function DebugMessageDetails(message) { |
106 // Convert the JSON string to an object. | 109 // Convert the JSON string to an object. |
107 var response = new ProtocolPackage(event); | 110 var response = new ProtocolPackage(message); |
108 | 111 |
109 // Build the text. | 112 if (response.type() == 'event') { |
| 113 return DebugEventDetails(response); |
| 114 } else { |
| 115 return DebugResponseDetails(response); |
| 116 } |
| 117 } |
| 118 |
| 119 function DebugEventDetails(response) { |
| 120 details = {text:'', running:false} |
| 121 |
| 122 // Get the running state. |
| 123 details.running = response.running(); |
| 124 |
110 var body = response.body(); | 125 var body = response.body(); |
111 var details = ''; | 126 var result = ''; |
112 switch (response.event()) { | 127 switch (response.event()) { |
113 case 'break': | 128 case 'break': |
114 if (body.breakpoints) { | 129 if (body.breakpoints) { |
115 details += 'breakpoint'; | 130 result += 'breakpoint'; |
116 if (body.breakpoints.length > 1) { | 131 if (body.breakpoints.length > 1) { |
117 details += 's'; | 132 result += 's'; |
118 } | 133 } |
119 details += ' #'; | 134 result += ' #'; |
120 for (var i = 0; i < body.breakpoints.length; i++) { | 135 for (var i = 0; i < body.breakpoints.length; i++) { |
121 if (i > 0) { | 136 if (i > 0) { |
122 details += ', #'; | 137 result += ', #'; |
123 } | 138 } |
124 details += body.breakpoints[i]; | 139 result += body.breakpoints[i]; |
125 } | 140 } |
126 } else { | 141 } else { |
127 details += 'break'; | 142 result += 'break'; |
128 } | 143 } |
129 details += ' in '; | 144 result += ' in '; |
130 details += body.invocationText; | 145 result += body.invocationText; |
131 details += ', '; | 146 result += ', '; |
132 details += SourceInfo(body); | 147 result += SourceInfo(body); |
133 details += '\n'; | 148 result += '\n'; |
134 details += SourceUnderline(body.sourceLineText, body.sourceColumn); | 149 result += SourceUnderline(body.sourceLineText, body.sourceColumn); |
135 Debug.State.currentSourceLine = body.sourceLine; | 150 Debug.State.currentSourceLine = body.sourceLine; |
136 Debug.State.currentFrame = 0; | 151 Debug.State.currentFrame = 0; |
137 return details; | 152 details.text = result; |
| 153 break; |
138 | 154 |
139 case 'exception': | 155 case 'exception': |
140 if (body.uncaught) { | 156 if (body.uncaught) { |
141 details += 'Uncaught: '; | 157 result += 'Uncaught: '; |
142 } else { | 158 } else { |
143 details += 'Exception: '; | 159 result += 'Exception: '; |
144 } | 160 } |
145 details += '"'; | 161 result += '"'; |
146 details += body.exception.text; | 162 result += body.exception.text; |
147 details += '"'; | 163 result += '"'; |
148 if (body.sourceLine >= 0) { | 164 if (body.sourceLine >= 0) { |
149 details += ', '; | 165 result += ', '; |
150 details += SourceInfo(body); | 166 result += SourceInfo(body); |
151 details += '\n'; | 167 result += '\n'; |
152 details += SourceUnderline(body.sourceLineText, body.sourceColumn); | 168 result += SourceUnderline(body.sourceLineText, body.sourceColumn); |
153 Debug.State.currentSourceLine = body.sourceLine; | 169 Debug.State.currentSourceLine = body.sourceLine; |
154 Debug.State.currentFrame = 0; | 170 Debug.State.currentFrame = 0; |
155 } else { | 171 } else { |
156 details += ' (empty stack)'; | 172 result += ' (empty stack)'; |
157 Debug.State.currentSourceLine = -1; | 173 Debug.State.currentSourceLine = -1; |
158 Debug.State.currentFrame = kNoFrame; | 174 Debug.State.currentFrame = kNoFrame; |
159 } | 175 } |
160 return details; | 176 details.text = result; |
| 177 break; |
161 | 178 |
162 case 'exception': | |
163 if (trace_compile) { | |
164 details = 'Source ' + body.script.name + ' compiled:\n' | |
165 } else { | |
166 return ''; | |
167 } | |
168 | |
169 case 'afterCompile': | 179 case 'afterCompile': |
170 if (trace_compile) { | 180 if (trace_compile) { |
171 details = 'Source ' + event.script().name() + ' compiled:\n' | 181 result = 'Source ' + body.script.name + ' compiled:\n' |
172 var source = body.script.source; | 182 var source = body.script.source; |
173 if (!(source[source.length - 1] == '\n')) { | 183 if (!(source[source.length - 1] == '\n')) { |
174 details += source; | 184 result += source; |
175 } else { | 185 } else { |
176 details += source.substring(0, source.length - 1); | 186 result += source.substring(0, source.length - 1); |
177 } | 187 } |
178 return details; | |
179 } else { | |
180 return ''; | |
181 } | 188 } |
| 189 details.text = result; |
| 190 break; |
| 191 |
| 192 default: |
| 193 details.text = 'Unknown debug event ' + response.event(); |
182 } | 194 } |
183 return 'Unknown debug event ' + response.event(); | 195 |
| 196 return details; |
184 }; | 197 }; |
185 | 198 |
186 | 199 |
187 function SourceInfo(body) { | 200 function SourceInfo(body) { |
188 var result = ''; | 201 var result = ''; |
189 | 202 |
190 if (body.script) { | 203 if (body.script) { |
191 if (body.script.name) { | 204 if (body.script.name) { |
192 result += body.script.name; | 205 result += body.script.name; |
193 } else { | 206 } else { |
(...skipping 548 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
742 result += ' '; | 755 result += ' '; |
743 result += formatHandleReference_(property_value); | 756 result += formatHandleReference_(property_value); |
744 result += '\n'; | 757 result += '\n'; |
745 } | 758 } |
746 } | 759 } |
747 return result; | 760 return result; |
748 } | 761 } |
749 | 762 |
750 | 763 |
751 // Convert a JSON response to text for display in a text based debugger. | 764 // Convert a JSON response to text for display in a text based debugger. |
752 function DebugResponseDetails(json_response) { | 765 function DebugResponseDetails(response) { |
753 details = {text:'', running:false} | 766 details = {text:'', running:false} |
754 | 767 |
755 try { | 768 try { |
756 // Convert the JSON string to an object. | |
757 var response = new ProtocolPackage(json_response); | |
758 | |
759 if (!response.success()) { | 769 if (!response.success()) { |
760 details.text = response.message(); | 770 details.text = response.message(); |
761 return details; | 771 return details; |
762 } | 772 } |
763 | 773 |
764 // Get the running state. | 774 // Get the running state. |
765 details.running = response.running(); | 775 details.running = response.running(); |
766 | 776 |
767 var body = response.body(); | 777 var body = response.body(); |
768 var result = ''; | 778 var result = ''; |
(...skipping 615 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1384 json += NumberToJSON_(elem); | 1394 json += NumberToJSON_(elem); |
1385 } else if (typeof(elem) === 'string') { | 1395 } else if (typeof(elem) === 'string') { |
1386 json += StringToJSON_(elem); | 1396 json += StringToJSON_(elem); |
1387 } else { | 1397 } else { |
1388 json += elem; | 1398 json += elem; |
1389 } | 1399 } |
1390 } | 1400 } |
1391 json += ']'; | 1401 json += ']'; |
1392 return json; | 1402 return json; |
1393 } | 1403 } |
OLD | NEW |