OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/frames.h" | 5 #include "src/frames.h" |
6 | 6 |
7 #include <sstream> | 7 #include <sstream> |
8 | 8 |
9 #include "src/v8.h" | 9 #include "src/v8.h" |
10 | 10 |
(...skipping 1102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1113 } | 1113 } |
1114 | 1114 |
1115 | 1115 |
1116 void StackFrame::PrintIndex(StringStream* accumulator, | 1116 void StackFrame::PrintIndex(StringStream* accumulator, |
1117 PrintMode mode, | 1117 PrintMode mode, |
1118 int index) { | 1118 int index) { |
1119 accumulator->Add((mode == OVERVIEW) ? "%5d: " : "[%d]: ", index); | 1119 accumulator->Add((mode == OVERVIEW) ? "%5d: " : "[%d]: ", index); |
1120 } | 1120 } |
1121 | 1121 |
1122 | 1122 |
| 1123 namespace { |
| 1124 |
| 1125 |
| 1126 void PrintFunctionSource(StringStream* accumulator, SharedFunctionInfo* shared, |
| 1127 Code* code) { |
| 1128 if (FLAG_max_stack_trace_source_length != 0 && code != NULL) { |
| 1129 std::ostringstream os; |
| 1130 os << "--------- s o u r c e c o d e ---------\n" |
| 1131 << SourceCodeOf(shared, FLAG_max_stack_trace_source_length) |
| 1132 << "\n-----------------------------------------\n"; |
| 1133 accumulator->Add(os.str().c_str()); |
| 1134 } |
| 1135 } |
| 1136 |
| 1137 |
| 1138 } // namespace |
| 1139 |
| 1140 |
1123 void JavaScriptFrame::Print(StringStream* accumulator, | 1141 void JavaScriptFrame::Print(StringStream* accumulator, |
1124 PrintMode mode, | 1142 PrintMode mode, |
1125 int index) const { | 1143 int index) const { |
1126 DisallowHeapAllocation no_gc; | 1144 DisallowHeapAllocation no_gc; |
1127 Object* receiver = this->receiver(); | 1145 Object* receiver = this->receiver(); |
1128 JSFunction* function = this->function(); | 1146 JSFunction* function = this->function(); |
1129 | 1147 |
1130 accumulator->PrintSecurityTokenIfChanged(function); | 1148 accumulator->PrintSecurityTokenIfChanged(function); |
1131 PrintIndex(accumulator, mode, index); | 1149 PrintIndex(accumulator, mode, index); |
1132 Code* code = NULL; | 1150 Code* code = NULL; |
(...skipping 17 matching lines...) Expand all Loading... |
1150 pc >= code->instruction_start() && pc < code->instruction_end()) { | 1168 pc >= code->instruction_start() && pc < code->instruction_end()) { |
1151 int source_pos = code->SourcePosition(pc); | 1169 int source_pos = code->SourcePosition(pc); |
1152 int line = script->GetLineNumber(source_pos) + 1; | 1170 int line = script->GetLineNumber(source_pos) + 1; |
1153 accumulator->Add(":%d", line); | 1171 accumulator->Add(":%d", line); |
1154 } else { | 1172 } else { |
1155 int function_start_pos = shared->start_position(); | 1173 int function_start_pos = shared->start_position(); |
1156 int line = script->GetLineNumber(function_start_pos) + 1; | 1174 int line = script->GetLineNumber(function_start_pos) + 1; |
1157 accumulator->Add(":~%d", line); | 1175 accumulator->Add(":~%d", line); |
1158 } | 1176 } |
1159 | 1177 |
1160 accumulator->Add("] "); | 1178 accumulator->Add("] [pc=%p] ", pc); |
1161 } | 1179 } |
1162 | 1180 |
1163 accumulator->Add("(this=%o", receiver); | 1181 accumulator->Add("(this=%o", receiver); |
1164 | 1182 |
1165 // Print the parameters. | 1183 // Print the parameters. |
1166 int parameters_count = ComputeParametersCount(); | 1184 int parameters_count = ComputeParametersCount(); |
1167 for (int i = 0; i < parameters_count; i++) { | 1185 for (int i = 0; i < parameters_count; i++) { |
1168 accumulator->Add(","); | 1186 accumulator->Add(","); |
1169 // If we have a name for the parameter we print it. Nameless | 1187 // If we have a name for the parameter we print it. Nameless |
1170 // parameters are either because we have more actual parameters | 1188 // parameters are either because we have more actual parameters |
1171 // than formal parameters or because we have no scope information. | 1189 // than formal parameters or because we have no scope information. |
1172 if (i < scope_info->ParameterCount()) { | 1190 if (i < scope_info->ParameterCount()) { |
1173 accumulator->PrintName(scope_info->ParameterName(i)); | 1191 accumulator->PrintName(scope_info->ParameterName(i)); |
1174 accumulator->Add("="); | 1192 accumulator->Add("="); |
1175 } | 1193 } |
1176 accumulator->Add("%o", GetParameter(i)); | 1194 accumulator->Add("%o", GetParameter(i)); |
1177 } | 1195 } |
1178 | 1196 |
1179 accumulator->Add(")"); | 1197 accumulator->Add(")"); |
1180 if (mode == OVERVIEW) { | 1198 if (mode == OVERVIEW) { |
1181 accumulator->Add("\n"); | 1199 accumulator->Add("\n"); |
1182 return; | 1200 return; |
1183 } | 1201 } |
1184 if (is_optimized()) { | 1202 if (is_optimized()) { |
1185 accumulator->Add(" {\n// optimized frame\n}\n"); | 1203 accumulator->Add(" {\n// optimized frame\n"); |
| 1204 PrintFunctionSource(accumulator, shared, code); |
| 1205 accumulator->Add("}\n"); |
1186 return; | 1206 return; |
1187 } | 1207 } |
1188 accumulator->Add(" {\n"); | 1208 accumulator->Add(" {\n"); |
1189 | 1209 |
1190 // Compute the number of locals and expression stack elements. | 1210 // Compute the number of locals and expression stack elements. |
1191 int stack_locals_count = scope_info->StackLocalCount(); | 1211 int stack_locals_count = scope_info->StackLocalCount(); |
1192 int heap_locals_count = scope_info->ContextLocalCount(); | 1212 int heap_locals_count = scope_info->ContextLocalCount(); |
1193 int expressions_count = ComputeExpressionsCount(); | 1213 int expressions_count = ComputeExpressionsCount(); |
1194 | 1214 |
1195 // Print stack-allocated local variables. | 1215 // Print stack-allocated local variables. |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1242 | 1262 |
1243 // Print the expression stack. | 1263 // Print the expression stack. |
1244 int expressions_start = stack_locals_count; | 1264 int expressions_start = stack_locals_count; |
1245 if (expressions_start < expressions_count) { | 1265 if (expressions_start < expressions_count) { |
1246 accumulator->Add(" // expression stack (top to bottom)\n"); | 1266 accumulator->Add(" // expression stack (top to bottom)\n"); |
1247 } | 1267 } |
1248 for (int i = expressions_count - 1; i >= expressions_start; i--) { | 1268 for (int i = expressions_count - 1; i >= expressions_start; i--) { |
1249 accumulator->Add(" [%02d] : %o\n", i, GetExpression(i)); | 1269 accumulator->Add(" [%02d] : %o\n", i, GetExpression(i)); |
1250 } | 1270 } |
1251 | 1271 |
1252 // Print details about the function. | 1272 PrintFunctionSource(accumulator, shared, code); |
1253 if (FLAG_max_stack_trace_source_length != 0 && code != NULL) { | |
1254 std::ostringstream os; | |
1255 SharedFunctionInfo* shared = function->shared(); | |
1256 os << "--------- s o u r c e c o d e ---------\n" | |
1257 << SourceCodeOf(shared, FLAG_max_stack_trace_source_length) | |
1258 << "\n-----------------------------------------\n"; | |
1259 accumulator->Add(os.str().c_str()); | |
1260 } | |
1261 | 1273 |
1262 accumulator->Add("}\n\n"); | 1274 accumulator->Add("}\n\n"); |
1263 } | 1275 } |
1264 | 1276 |
1265 | 1277 |
1266 void ArgumentsAdaptorFrame::Print(StringStream* accumulator, | 1278 void ArgumentsAdaptorFrame::Print(StringStream* accumulator, |
1267 PrintMode mode, | 1279 PrintMode mode, |
1268 int index) const { | 1280 int index) const { |
1269 int actual = ComputeParametersCount(); | 1281 int actual = ComputeParametersCount(); |
1270 int expected = -1; | 1282 int expected = -1; |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1524 for (StackFrameIterator it(isolate); !it.done(); it.Advance()) { | 1536 for (StackFrameIterator it(isolate); !it.done(); it.Advance()) { |
1525 StackFrame* frame = AllocateFrameCopy(it.frame(), zone); | 1537 StackFrame* frame = AllocateFrameCopy(it.frame(), zone); |
1526 list.Add(frame, zone); | 1538 list.Add(frame, zone); |
1527 } | 1539 } |
1528 return list.ToVector(); | 1540 return list.ToVector(); |
1529 } | 1541 } |
1530 | 1542 |
1531 | 1543 |
1532 } // namespace internal | 1544 } // namespace internal |
1533 } // namespace v8 | 1545 } // namespace v8 |
OLD | NEW |