| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 1026 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1037 | 1037 |
| 1038 | 1038 |
| 1039 // --- T h e A c t u a l T e s t s | 1039 // --- T h e A c t u a l T e s t s |
| 1040 | 1040 |
| 1041 | 1041 |
| 1042 // Test that the debug break function is the expected one for different kinds | 1042 // Test that the debug break function is the expected one for different kinds |
| 1043 // of break locations. | 1043 // of break locations. |
| 1044 TEST(DebugStub) { | 1044 TEST(DebugStub) { |
| 1045 using ::v8::internal::Builtins; | 1045 using ::v8::internal::Builtins; |
| 1046 using ::v8::internal::Isolate; | 1046 using ::v8::internal::Isolate; |
| 1047 v8::HandleScope scope; | |
| 1048 DebugLocalContext env; | 1047 DebugLocalContext env; |
| 1048 v8::HandleScope scope(env->GetIsolate()); |
| 1049 | 1049 |
| 1050 CheckDebugBreakFunction(&env, | 1050 CheckDebugBreakFunction(&env, |
| 1051 "function f1(){}", "f1", | 1051 "function f1(){}", "f1", |
| 1052 0, | 1052 0, |
| 1053 v8::internal::RelocInfo::JS_RETURN, | 1053 v8::internal::RelocInfo::JS_RETURN, |
| 1054 NULL); | 1054 NULL); |
| 1055 CheckDebugBreakFunction(&env, | 1055 CheckDebugBreakFunction(&env, |
| 1056 "function f2(){x=1;}", "f2", | 1056 "function f2(){x=1;}", "f2", |
| 1057 0, | 1057 0, |
| 1058 v8::internal::RelocInfo::CODE_TARGET_CONTEXT, | 1058 v8::internal::RelocInfo::CODE_TARGET_CONTEXT, |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1110 "function f4_4(){x(1,2,3,4);}", "f4_4", | 1110 "function f4_4(){x(1,2,3,4);}", "f4_4", |
| 1111 0, | 1111 0, |
| 1112 v8::internal::RelocInfo::CODE_TARGET_CONTEXT, | 1112 v8::internal::RelocInfo::CODE_TARGET_CONTEXT, |
| 1113 *debug_break_4); | 1113 *debug_break_4); |
| 1114 } | 1114 } |
| 1115 | 1115 |
| 1116 | 1116 |
| 1117 // Test that the debug info in the VM is in sync with the functions being | 1117 // Test that the debug info in the VM is in sync with the functions being |
| 1118 // debugged. | 1118 // debugged. |
| 1119 TEST(DebugInfo) { | 1119 TEST(DebugInfo) { |
| 1120 v8::HandleScope scope; | |
| 1121 DebugLocalContext env; | 1120 DebugLocalContext env; |
| 1121 v8::HandleScope scope(env->GetIsolate()); |
| 1122 // Create a couple of functions for the test. | 1122 // Create a couple of functions for the test. |
| 1123 v8::Local<v8::Function> foo = | 1123 v8::Local<v8::Function> foo = |
| 1124 CompileFunction(&env, "function foo(){}", "foo"); | 1124 CompileFunction(&env, "function foo(){}", "foo"); |
| 1125 v8::Local<v8::Function> bar = | 1125 v8::Local<v8::Function> bar = |
| 1126 CompileFunction(&env, "function bar(){}", "bar"); | 1126 CompileFunction(&env, "function bar(){}", "bar"); |
| 1127 // Initially no functions are debugged. | 1127 // Initially no functions are debugged. |
| 1128 CHECK_EQ(0, v8::internal::GetDebuggedFunctions()->length()); | 1128 CHECK_EQ(0, v8::internal::GetDebuggedFunctions()->length()); |
| 1129 CHECK(!HasDebugInfo(foo)); | 1129 CHECK(!HasDebugInfo(foo)); |
| 1130 CHECK(!HasDebugInfo(bar)); | 1130 CHECK(!HasDebugInfo(bar)); |
| 1131 // One function (foo) is debugged. | 1131 // One function (foo) is debugged. |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1147 ClearBreakPoint(bp2); | 1147 ClearBreakPoint(bp2); |
| 1148 CHECK_EQ(0, v8::internal::GetDebuggedFunctions()->length()); | 1148 CHECK_EQ(0, v8::internal::GetDebuggedFunctions()->length()); |
| 1149 CHECK(!HasDebugInfo(foo)); | 1149 CHECK(!HasDebugInfo(foo)); |
| 1150 CHECK(!HasDebugInfo(bar)); | 1150 CHECK(!HasDebugInfo(bar)); |
| 1151 } | 1151 } |
| 1152 | 1152 |
| 1153 | 1153 |
| 1154 // Test that a break point can be set at an IC store location. | 1154 // Test that a break point can be set at an IC store location. |
| 1155 TEST(BreakPointICStore) { | 1155 TEST(BreakPointICStore) { |
| 1156 break_point_hit_count = 0; | 1156 break_point_hit_count = 0; |
| 1157 v8::HandleScope scope; | |
| 1158 DebugLocalContext env; | 1157 DebugLocalContext env; |
| 1158 v8::HandleScope scope(env->GetIsolate()); |
| 1159 | 1159 |
| 1160 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, | 1160 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, |
| 1161 v8::Undefined()); | 1161 v8::Undefined()); |
| 1162 v8::Script::Compile(v8::String::New("function foo(){bar=0;}"))->Run(); | 1162 v8::Script::Compile(v8::String::New("function foo(){bar=0;}"))->Run(); |
| 1163 v8::Local<v8::Function> foo = | 1163 v8::Local<v8::Function> foo = |
| 1164 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("foo"))); | 1164 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("foo"))); |
| 1165 | 1165 |
| 1166 // Run without breakpoints. | 1166 // Run without breakpoints. |
| 1167 foo->Call(env->Global(), 0, NULL); | 1167 foo->Call(env->Global(), 0, NULL); |
| 1168 CHECK_EQ(0, break_point_hit_count); | 1168 CHECK_EQ(0, break_point_hit_count); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1180 CHECK_EQ(2, break_point_hit_count); | 1180 CHECK_EQ(2, break_point_hit_count); |
| 1181 | 1181 |
| 1182 v8::Debug::SetDebugEventListener(NULL); | 1182 v8::Debug::SetDebugEventListener(NULL); |
| 1183 CheckDebuggerUnloaded(); | 1183 CheckDebuggerUnloaded(); |
| 1184 } | 1184 } |
| 1185 | 1185 |
| 1186 | 1186 |
| 1187 // Test that a break point can be set at an IC load location. | 1187 // Test that a break point can be set at an IC load location. |
| 1188 TEST(BreakPointICLoad) { | 1188 TEST(BreakPointICLoad) { |
| 1189 break_point_hit_count = 0; | 1189 break_point_hit_count = 0; |
| 1190 v8::HandleScope scope; | |
| 1191 DebugLocalContext env; | 1190 DebugLocalContext env; |
| 1191 v8::HandleScope scope(env->GetIsolate()); |
| 1192 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, | 1192 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, |
| 1193 v8::Undefined()); | 1193 v8::Undefined()); |
| 1194 v8::Script::Compile(v8::String::New("bar=1"))->Run(); | 1194 v8::Script::Compile(v8::String::New("bar=1"))->Run(); |
| 1195 v8::Script::Compile(v8::String::New("function foo(){var x=bar;}"))->Run(); | 1195 v8::Script::Compile(v8::String::New("function foo(){var x=bar;}"))->Run(); |
| 1196 v8::Local<v8::Function> foo = | 1196 v8::Local<v8::Function> foo = |
| 1197 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("foo"))); | 1197 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("foo"))); |
| 1198 | 1198 |
| 1199 // Run without breakpoints. | 1199 // Run without breakpoints. |
| 1200 foo->Call(env->Global(), 0, NULL); | 1200 foo->Call(env->Global(), 0, NULL); |
| 1201 CHECK_EQ(0, break_point_hit_count); | 1201 CHECK_EQ(0, break_point_hit_count); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1213 CHECK_EQ(2, break_point_hit_count); | 1213 CHECK_EQ(2, break_point_hit_count); |
| 1214 | 1214 |
| 1215 v8::Debug::SetDebugEventListener(NULL); | 1215 v8::Debug::SetDebugEventListener(NULL); |
| 1216 CheckDebuggerUnloaded(); | 1216 CheckDebuggerUnloaded(); |
| 1217 } | 1217 } |
| 1218 | 1218 |
| 1219 | 1219 |
| 1220 // Test that a break point can be set at an IC call location. | 1220 // Test that a break point can be set at an IC call location. |
| 1221 TEST(BreakPointICCall) { | 1221 TEST(BreakPointICCall) { |
| 1222 break_point_hit_count = 0; | 1222 break_point_hit_count = 0; |
| 1223 v8::HandleScope scope; | |
| 1224 DebugLocalContext env; | 1223 DebugLocalContext env; |
| 1224 v8::HandleScope scope(env->GetIsolate()); |
| 1225 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, | 1225 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, |
| 1226 v8::Undefined()); | 1226 v8::Undefined()); |
| 1227 v8::Script::Compile(v8::String::New("function bar(){}"))->Run(); | 1227 v8::Script::Compile(v8::String::New("function bar(){}"))->Run(); |
| 1228 v8::Script::Compile(v8::String::New("function foo(){bar();}"))->Run(); | 1228 v8::Script::Compile(v8::String::New("function foo(){bar();}"))->Run(); |
| 1229 v8::Local<v8::Function> foo = | 1229 v8::Local<v8::Function> foo = |
| 1230 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("foo"))); | 1230 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("foo"))); |
| 1231 | 1231 |
| 1232 // Run without breakpoints. | 1232 // Run without breakpoints. |
| 1233 foo->Call(env->Global(), 0, NULL); | 1233 foo->Call(env->Global(), 0, NULL); |
| 1234 CHECK_EQ(0, break_point_hit_count); | 1234 CHECK_EQ(0, break_point_hit_count); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1246 CHECK_EQ(2, break_point_hit_count); | 1246 CHECK_EQ(2, break_point_hit_count); |
| 1247 | 1247 |
| 1248 v8::Debug::SetDebugEventListener(NULL); | 1248 v8::Debug::SetDebugEventListener(NULL); |
| 1249 CheckDebuggerUnloaded(); | 1249 CheckDebuggerUnloaded(); |
| 1250 } | 1250 } |
| 1251 | 1251 |
| 1252 | 1252 |
| 1253 // Test that a break point can be set at an IC call location and survive a GC. | 1253 // Test that a break point can be set at an IC call location and survive a GC. |
| 1254 TEST(BreakPointICCallWithGC) { | 1254 TEST(BreakPointICCallWithGC) { |
| 1255 break_point_hit_count = 0; | 1255 break_point_hit_count = 0; |
| 1256 v8::HandleScope scope; | |
| 1257 DebugLocalContext env; | 1256 DebugLocalContext env; |
| 1257 v8::HandleScope scope(env->GetIsolate()); |
| 1258 v8::Debug::SetDebugEventListener(DebugEventBreakPointCollectGarbage, | 1258 v8::Debug::SetDebugEventListener(DebugEventBreakPointCollectGarbage, |
| 1259 v8::Undefined()); | 1259 v8::Undefined()); |
| 1260 v8::Script::Compile(v8::String::New("function bar(){return 1;}"))->Run(); | 1260 v8::Script::Compile(v8::String::New("function bar(){return 1;}"))->Run(); |
| 1261 v8::Script::Compile(v8::String::New("function foo(){return bar();}"))->Run(); | 1261 v8::Script::Compile(v8::String::New("function foo(){return bar();}"))->Run(); |
| 1262 v8::Local<v8::Function> foo = | 1262 v8::Local<v8::Function> foo = |
| 1263 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("foo"))); | 1263 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("foo"))); |
| 1264 | 1264 |
| 1265 // Run without breakpoints. | 1265 // Run without breakpoints. |
| 1266 CHECK_EQ(1, foo->Call(env->Global(), 0, NULL)->Int32Value()); | 1266 CHECK_EQ(1, foo->Call(env->Global(), 0, NULL)->Int32Value()); |
| 1267 CHECK_EQ(0, break_point_hit_count); | 1267 CHECK_EQ(0, break_point_hit_count); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1279 CHECK_EQ(2, break_point_hit_count); | 1279 CHECK_EQ(2, break_point_hit_count); |
| 1280 | 1280 |
| 1281 v8::Debug::SetDebugEventListener(NULL); | 1281 v8::Debug::SetDebugEventListener(NULL); |
| 1282 CheckDebuggerUnloaded(); | 1282 CheckDebuggerUnloaded(); |
| 1283 } | 1283 } |
| 1284 | 1284 |
| 1285 | 1285 |
| 1286 // Test that a break point can be set at an IC call location and survive a GC. | 1286 // Test that a break point can be set at an IC call location and survive a GC. |
| 1287 TEST(BreakPointConstructCallWithGC) { | 1287 TEST(BreakPointConstructCallWithGC) { |
| 1288 break_point_hit_count = 0; | 1288 break_point_hit_count = 0; |
| 1289 v8::HandleScope scope; | |
| 1290 DebugLocalContext env; | 1289 DebugLocalContext env; |
| 1290 v8::HandleScope scope(env->GetIsolate()); |
| 1291 v8::Debug::SetDebugEventListener(DebugEventBreakPointCollectGarbage, | 1291 v8::Debug::SetDebugEventListener(DebugEventBreakPointCollectGarbage, |
| 1292 v8::Undefined()); | 1292 v8::Undefined()); |
| 1293 v8::Script::Compile(v8::String::New("function bar(){ this.x = 1;}"))->Run(); | 1293 v8::Script::Compile(v8::String::New("function bar(){ this.x = 1;}"))->Run(); |
| 1294 v8::Script::Compile(v8::String::New( | 1294 v8::Script::Compile(v8::String::New( |
| 1295 "function foo(){return new bar(1).x;}"))->Run(); | 1295 "function foo(){return new bar(1).x;}"))->Run(); |
| 1296 v8::Local<v8::Function> foo = | 1296 v8::Local<v8::Function> foo = |
| 1297 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("foo"))); | 1297 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("foo"))); |
| 1298 | 1298 |
| 1299 // Run without breakpoints. | 1299 // Run without breakpoints. |
| 1300 CHECK_EQ(1, foo->Call(env->Global(), 0, NULL)->Int32Value()); | 1300 CHECK_EQ(1, foo->Call(env->Global(), 0, NULL)->Int32Value()); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1313 CHECK_EQ(2, break_point_hit_count); | 1313 CHECK_EQ(2, break_point_hit_count); |
| 1314 | 1314 |
| 1315 v8::Debug::SetDebugEventListener(NULL); | 1315 v8::Debug::SetDebugEventListener(NULL); |
| 1316 CheckDebuggerUnloaded(); | 1316 CheckDebuggerUnloaded(); |
| 1317 } | 1317 } |
| 1318 | 1318 |
| 1319 | 1319 |
| 1320 // Test that a break point can be set at a return store location. | 1320 // Test that a break point can be set at a return store location. |
| 1321 TEST(BreakPointReturn) { | 1321 TEST(BreakPointReturn) { |
| 1322 break_point_hit_count = 0; | 1322 break_point_hit_count = 0; |
| 1323 v8::HandleScope scope; | |
| 1324 DebugLocalContext env; | 1323 DebugLocalContext env; |
| 1324 v8::HandleScope scope(env->GetIsolate()); |
| 1325 | 1325 |
| 1326 // Create a functions for checking the source line and column when hitting | 1326 // Create a functions for checking the source line and column when hitting |
| 1327 // a break point. | 1327 // a break point. |
| 1328 frame_source_line = CompileFunction(&env, | 1328 frame_source_line = CompileFunction(&env, |
| 1329 frame_source_line_source, | 1329 frame_source_line_source, |
| 1330 "frame_source_line"); | 1330 "frame_source_line"); |
| 1331 frame_source_column = CompileFunction(&env, | 1331 frame_source_column = CompileFunction(&env, |
| 1332 frame_source_column_source, | 1332 frame_source_column_source, |
| 1333 "frame_source_column"); | 1333 "frame_source_column"); |
| 1334 | 1334 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1371 break_point_hit_count = 0; | 1371 break_point_hit_count = 0; |
| 1372 for (int i = 0; i < call_count; i++) { | 1372 for (int i = 0; i < call_count; i++) { |
| 1373 f->Call(recv, 0, NULL); | 1373 f->Call(recv, 0, NULL); |
| 1374 CHECK_EQ((i + 1) * break_point_count, break_point_hit_count); | 1374 CHECK_EQ((i + 1) * break_point_count, break_point_hit_count); |
| 1375 } | 1375 } |
| 1376 } | 1376 } |
| 1377 | 1377 |
| 1378 // Test GC during break point processing. | 1378 // Test GC during break point processing. |
| 1379 TEST(GCDuringBreakPointProcessing) { | 1379 TEST(GCDuringBreakPointProcessing) { |
| 1380 break_point_hit_count = 0; | 1380 break_point_hit_count = 0; |
| 1381 v8::HandleScope scope; | |
| 1382 DebugLocalContext env; | 1381 DebugLocalContext env; |
| 1382 v8::HandleScope scope(env->GetIsolate()); |
| 1383 | 1383 |
| 1384 v8::Debug::SetDebugEventListener(DebugEventBreakPointCollectGarbage, | 1384 v8::Debug::SetDebugEventListener(DebugEventBreakPointCollectGarbage, |
| 1385 v8::Undefined()); | 1385 v8::Undefined()); |
| 1386 v8::Local<v8::Function> foo; | 1386 v8::Local<v8::Function> foo; |
| 1387 | 1387 |
| 1388 // Test IC store break point with garbage collection. | 1388 // Test IC store break point with garbage collection. |
| 1389 foo = CompileFunction(&env, "function foo(){bar=0;}", "foo"); | 1389 foo = CompileFunction(&env, "function foo(){bar=0;}", "foo"); |
| 1390 SetBreakPoint(foo, 0); | 1390 SetBreakPoint(foo, 0); |
| 1391 CallWithBreakPoints(env->Global(), foo, 1, 10); | 1391 CallWithBreakPoints(env->Global(), foo, 1, 10); |
| 1392 | 1392 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1435 HEAP->CollectAllGarbage(Heap::kNoGCFlags); | 1435 HEAP->CollectAllGarbage(Heap::kNoGCFlags); |
| 1436 f->Call(recv, 0, NULL); | 1436 f->Call(recv, 0, NULL); |
| 1437 CHECK_EQ(3 + i * 3, break_point_hit_count); | 1437 CHECK_EQ(3 + i * 3, break_point_hit_count); |
| 1438 } | 1438 } |
| 1439 } | 1439 } |
| 1440 | 1440 |
| 1441 | 1441 |
| 1442 // Test that a break point can be set at a return store location. | 1442 // Test that a break point can be set at a return store location. |
| 1443 TEST(BreakPointSurviveGC) { | 1443 TEST(BreakPointSurviveGC) { |
| 1444 break_point_hit_count = 0; | 1444 break_point_hit_count = 0; |
| 1445 v8::HandleScope scope; | |
| 1446 DebugLocalContext env; | 1445 DebugLocalContext env; |
| 1446 v8::HandleScope scope(env->GetIsolate()); |
| 1447 | 1447 |
| 1448 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, | 1448 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, |
| 1449 v8::Undefined()); | 1449 v8::Undefined()); |
| 1450 v8::Local<v8::Function> foo; | 1450 v8::Local<v8::Function> foo; |
| 1451 | 1451 |
| 1452 // Test IC store break point with garbage collection. | 1452 // Test IC store break point with garbage collection. |
| 1453 { | 1453 { |
| 1454 CompileFunction(&env, "function foo(){}", "foo"); | 1454 CompileFunction(&env, "function foo(){}", "foo"); |
| 1455 foo = CompileFunction(&env, "function foo(){bar=0;}", "foo"); | 1455 foo = CompileFunction(&env, "function foo(){bar=0;}", "foo"); |
| 1456 SetBreakPoint(foo, 0); | 1456 SetBreakPoint(foo, 0); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1493 | 1493 |
| 1494 | 1494 |
| 1495 v8::Debug::SetDebugEventListener(NULL); | 1495 v8::Debug::SetDebugEventListener(NULL); |
| 1496 CheckDebuggerUnloaded(); | 1496 CheckDebuggerUnloaded(); |
| 1497 } | 1497 } |
| 1498 | 1498 |
| 1499 | 1499 |
| 1500 // Test that break points can be set using the global Debug object. | 1500 // Test that break points can be set using the global Debug object. |
| 1501 TEST(BreakPointThroughJavaScript) { | 1501 TEST(BreakPointThroughJavaScript) { |
| 1502 break_point_hit_count = 0; | 1502 break_point_hit_count = 0; |
| 1503 v8::HandleScope scope; | |
| 1504 DebugLocalContext env; | 1503 DebugLocalContext env; |
| 1504 v8::HandleScope scope(env->GetIsolate()); |
| 1505 env.ExposeDebug(); | 1505 env.ExposeDebug(); |
| 1506 | 1506 |
| 1507 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, | 1507 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, |
| 1508 v8::Undefined()); | 1508 v8::Undefined()); |
| 1509 v8::Script::Compile(v8::String::New("function bar(){}"))->Run(); | 1509 v8::Script::Compile(v8::String::New("function bar(){}"))->Run(); |
| 1510 v8::Script::Compile(v8::String::New("function foo(){bar();bar();}"))->Run(); | 1510 v8::Script::Compile(v8::String::New("function foo(){bar();bar();}"))->Run(); |
| 1511 // 012345678901234567890 | 1511 // 012345678901234567890 |
| 1512 // 1 2 | 1512 // 1 2 |
| 1513 // Break points are set at position 3 and 9 | 1513 // Break points are set at position 3 and 9 |
| 1514 v8::Local<v8::Script> foo = v8::Script::Compile(v8::String::New("foo()")); | 1514 v8::Local<v8::Script> foo = v8::Script::Compile(v8::String::New("foo()")); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1549 // Make sure that the break point numbers are consecutive. | 1549 // Make sure that the break point numbers are consecutive. |
| 1550 CHECK_EQ(1, bp1); | 1550 CHECK_EQ(1, bp1); |
| 1551 CHECK_EQ(2, bp2); | 1551 CHECK_EQ(2, bp2); |
| 1552 } | 1552 } |
| 1553 | 1553 |
| 1554 | 1554 |
| 1555 // Test that break points on scripts identified by name can be set using the | 1555 // Test that break points on scripts identified by name can be set using the |
| 1556 // global Debug object. | 1556 // global Debug object. |
| 1557 TEST(ScriptBreakPointByNameThroughJavaScript) { | 1557 TEST(ScriptBreakPointByNameThroughJavaScript) { |
| 1558 break_point_hit_count = 0; | 1558 break_point_hit_count = 0; |
| 1559 v8::HandleScope scope; | |
| 1560 DebugLocalContext env; | 1559 DebugLocalContext env; |
| 1560 v8::HandleScope scope(env->GetIsolate()); |
| 1561 env.ExposeDebug(); | 1561 env.ExposeDebug(); |
| 1562 | 1562 |
| 1563 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, | 1563 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, |
| 1564 v8::Undefined()); | 1564 v8::Undefined()); |
| 1565 | 1565 |
| 1566 v8::Local<v8::String> script = v8::String::New( | 1566 v8::Local<v8::String> script = v8::String::New( |
| 1567 "function f() {\n" | 1567 "function f() {\n" |
| 1568 " function h() {\n" | 1568 " function h() {\n" |
| 1569 " a = 0; // line 2\n" | 1569 " a = 0; // line 2\n" |
| 1570 " }\n" | 1570 " }\n" |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1653 CHECK_EQ(2, sbp2); | 1653 CHECK_EQ(2, sbp2); |
| 1654 CHECK_EQ(3, sbp3); | 1654 CHECK_EQ(3, sbp3); |
| 1655 CHECK_EQ(4, sbp4); | 1655 CHECK_EQ(4, sbp4); |
| 1656 CHECK_EQ(5, sbp5); | 1656 CHECK_EQ(5, sbp5); |
| 1657 CHECK_EQ(6, sbp6); | 1657 CHECK_EQ(6, sbp6); |
| 1658 } | 1658 } |
| 1659 | 1659 |
| 1660 | 1660 |
| 1661 TEST(ScriptBreakPointByIdThroughJavaScript) { | 1661 TEST(ScriptBreakPointByIdThroughJavaScript) { |
| 1662 break_point_hit_count = 0; | 1662 break_point_hit_count = 0; |
| 1663 v8::HandleScope scope; | |
| 1664 DebugLocalContext env; | 1663 DebugLocalContext env; |
| 1664 v8::HandleScope scope(env->GetIsolate()); |
| 1665 env.ExposeDebug(); | 1665 env.ExposeDebug(); |
| 1666 | 1666 |
| 1667 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, | 1667 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, |
| 1668 v8::Undefined()); | 1668 v8::Undefined()); |
| 1669 | 1669 |
| 1670 v8::Local<v8::String> source = v8::String::New( | 1670 v8::Local<v8::String> source = v8::String::New( |
| 1671 "function f() {\n" | 1671 "function f() {\n" |
| 1672 " function h() {\n" | 1672 " function h() {\n" |
| 1673 " a = 0; // line 2\n" | 1673 " a = 0; // line 2\n" |
| 1674 " }\n" | 1674 " }\n" |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1762 CHECK_EQ(3, sbp3); | 1762 CHECK_EQ(3, sbp3); |
| 1763 CHECK_EQ(4, sbp4); | 1763 CHECK_EQ(4, sbp4); |
| 1764 CHECK_EQ(5, sbp5); | 1764 CHECK_EQ(5, sbp5); |
| 1765 CHECK_EQ(6, sbp6); | 1765 CHECK_EQ(6, sbp6); |
| 1766 } | 1766 } |
| 1767 | 1767 |
| 1768 | 1768 |
| 1769 // Test conditional script break points. | 1769 // Test conditional script break points. |
| 1770 TEST(EnableDisableScriptBreakPoint) { | 1770 TEST(EnableDisableScriptBreakPoint) { |
| 1771 break_point_hit_count = 0; | 1771 break_point_hit_count = 0; |
| 1772 v8::HandleScope scope; | |
| 1773 DebugLocalContext env; | 1772 DebugLocalContext env; |
| 1773 v8::HandleScope scope(env->GetIsolate()); |
| 1774 env.ExposeDebug(); | 1774 env.ExposeDebug(); |
| 1775 | 1775 |
| 1776 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, | 1776 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, |
| 1777 v8::Undefined()); | 1777 v8::Undefined()); |
| 1778 | 1778 |
| 1779 v8::Local<v8::String> script = v8::String::New( | 1779 v8::Local<v8::String> script = v8::String::New( |
| 1780 "function f() {\n" | 1780 "function f() {\n" |
| 1781 " a = 0; // line 1\n" | 1781 " a = 0; // line 1\n" |
| 1782 "};"); | 1782 "};"); |
| 1783 | 1783 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1819 CHECK_EQ(3, break_point_hit_count); | 1819 CHECK_EQ(3, break_point_hit_count); |
| 1820 | 1820 |
| 1821 v8::Debug::SetDebugEventListener(NULL); | 1821 v8::Debug::SetDebugEventListener(NULL); |
| 1822 CheckDebuggerUnloaded(); | 1822 CheckDebuggerUnloaded(); |
| 1823 } | 1823 } |
| 1824 | 1824 |
| 1825 | 1825 |
| 1826 // Test conditional script break points. | 1826 // Test conditional script break points. |
| 1827 TEST(ConditionalScriptBreakPoint) { | 1827 TEST(ConditionalScriptBreakPoint) { |
| 1828 break_point_hit_count = 0; | 1828 break_point_hit_count = 0; |
| 1829 v8::HandleScope scope; | |
| 1830 DebugLocalContext env; | 1829 DebugLocalContext env; |
| 1830 v8::HandleScope scope(env->GetIsolate()); |
| 1831 env.ExposeDebug(); | 1831 env.ExposeDebug(); |
| 1832 | 1832 |
| 1833 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, | 1833 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, |
| 1834 v8::Undefined()); | 1834 v8::Undefined()); |
| 1835 | 1835 |
| 1836 v8::Local<v8::String> script = v8::String::New( | 1836 v8::Local<v8::String> script = v8::String::New( |
| 1837 "count = 0;\n" | 1837 "count = 0;\n" |
| 1838 "function f() {\n" | 1838 "function f() {\n" |
| 1839 " g(count++); // line 2\n" | 1839 " g(count++); // line 2\n" |
| 1840 "};\n" | 1840 "};\n" |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1881 CHECK_EQ(5, break_point_hit_count); | 1881 CHECK_EQ(5, break_point_hit_count); |
| 1882 | 1882 |
| 1883 v8::Debug::SetDebugEventListener(NULL); | 1883 v8::Debug::SetDebugEventListener(NULL); |
| 1884 CheckDebuggerUnloaded(); | 1884 CheckDebuggerUnloaded(); |
| 1885 } | 1885 } |
| 1886 | 1886 |
| 1887 | 1887 |
| 1888 // Test ignore count on script break points. | 1888 // Test ignore count on script break points. |
| 1889 TEST(ScriptBreakPointIgnoreCount) { | 1889 TEST(ScriptBreakPointIgnoreCount) { |
| 1890 break_point_hit_count = 0; | 1890 break_point_hit_count = 0; |
| 1891 v8::HandleScope scope; | |
| 1892 DebugLocalContext env; | 1891 DebugLocalContext env; |
| 1892 v8::HandleScope scope(env->GetIsolate()); |
| 1893 env.ExposeDebug(); | 1893 env.ExposeDebug(); |
| 1894 | 1894 |
| 1895 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, | 1895 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, |
| 1896 v8::Undefined()); | 1896 v8::Undefined()); |
| 1897 | 1897 |
| 1898 v8::Local<v8::String> script = v8::String::New( | 1898 v8::Local<v8::String> script = v8::String::New( |
| 1899 "function f() {\n" | 1899 "function f() {\n" |
| 1900 " a = 0; // line 1\n" | 1900 " a = 0; // line 1\n" |
| 1901 "};"); | 1901 "};"); |
| 1902 | 1902 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1936 CHECK_EQ(5, break_point_hit_count); | 1936 CHECK_EQ(5, break_point_hit_count); |
| 1937 | 1937 |
| 1938 v8::Debug::SetDebugEventListener(NULL); | 1938 v8::Debug::SetDebugEventListener(NULL); |
| 1939 CheckDebuggerUnloaded(); | 1939 CheckDebuggerUnloaded(); |
| 1940 } | 1940 } |
| 1941 | 1941 |
| 1942 | 1942 |
| 1943 // Test that script break points survive when a script is reloaded. | 1943 // Test that script break points survive when a script is reloaded. |
| 1944 TEST(ScriptBreakPointReload) { | 1944 TEST(ScriptBreakPointReload) { |
| 1945 break_point_hit_count = 0; | 1945 break_point_hit_count = 0; |
| 1946 v8::HandleScope scope; | |
| 1947 DebugLocalContext env; | 1946 DebugLocalContext env; |
| 1947 v8::HandleScope scope(env->GetIsolate()); |
| 1948 env.ExposeDebug(); | 1948 env.ExposeDebug(); |
| 1949 | 1949 |
| 1950 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, | 1950 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, |
| 1951 v8::Undefined()); | 1951 v8::Undefined()); |
| 1952 | 1952 |
| 1953 v8::Local<v8::Function> f; | 1953 v8::Local<v8::Function> f; |
| 1954 v8::Local<v8::String> script = v8::String::New( | 1954 v8::Local<v8::String> script = v8::String::New( |
| 1955 "function f() {\n" | 1955 "function f() {\n" |
| 1956 " function h() {\n" | 1956 " function h() {\n" |
| 1957 " a = 0; // line 2\n" | 1957 " a = 0; // line 2\n" |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1995 CHECK_EQ(1, break_point_hit_count); | 1995 CHECK_EQ(1, break_point_hit_count); |
| 1996 | 1996 |
| 1997 v8::Debug::SetDebugEventListener(NULL); | 1997 v8::Debug::SetDebugEventListener(NULL); |
| 1998 CheckDebuggerUnloaded(); | 1998 CheckDebuggerUnloaded(); |
| 1999 } | 1999 } |
| 2000 | 2000 |
| 2001 | 2001 |
| 2002 // Test when several scripts has the same script data | 2002 // Test when several scripts has the same script data |
| 2003 TEST(ScriptBreakPointMultiple) { | 2003 TEST(ScriptBreakPointMultiple) { |
| 2004 break_point_hit_count = 0; | 2004 break_point_hit_count = 0; |
| 2005 v8::HandleScope scope; | |
| 2006 DebugLocalContext env; | 2005 DebugLocalContext env; |
| 2006 v8::HandleScope scope(env->GetIsolate()); |
| 2007 env.ExposeDebug(); | 2007 env.ExposeDebug(); |
| 2008 | 2008 |
| 2009 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, | 2009 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, |
| 2010 v8::Undefined()); | 2010 v8::Undefined()); |
| 2011 | 2011 |
| 2012 v8::Local<v8::Function> f; | 2012 v8::Local<v8::Function> f; |
| 2013 v8::Local<v8::String> script_f = v8::String::New( | 2013 v8::Local<v8::String> script_f = v8::String::New( |
| 2014 "function f() {\n" | 2014 "function f() {\n" |
| 2015 " a = 0; // line 1\n" | 2015 " a = 0; // line 1\n" |
| 2016 "}"); | 2016 "}"); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2061 CHECK_EQ(2, break_point_hit_count); | 2061 CHECK_EQ(2, break_point_hit_count); |
| 2062 | 2062 |
| 2063 v8::Debug::SetDebugEventListener(NULL); | 2063 v8::Debug::SetDebugEventListener(NULL); |
| 2064 CheckDebuggerUnloaded(); | 2064 CheckDebuggerUnloaded(); |
| 2065 } | 2065 } |
| 2066 | 2066 |
| 2067 | 2067 |
| 2068 // Test the script origin which has both name and line offset. | 2068 // Test the script origin which has both name and line offset. |
| 2069 TEST(ScriptBreakPointLineOffset) { | 2069 TEST(ScriptBreakPointLineOffset) { |
| 2070 break_point_hit_count = 0; | 2070 break_point_hit_count = 0; |
| 2071 v8::HandleScope scope; | |
| 2072 DebugLocalContext env; | 2071 DebugLocalContext env; |
| 2072 v8::HandleScope scope(env->GetIsolate()); |
| 2073 env.ExposeDebug(); | 2073 env.ExposeDebug(); |
| 2074 | 2074 |
| 2075 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, | 2075 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, |
| 2076 v8::Undefined()); | 2076 v8::Undefined()); |
| 2077 | 2077 |
| 2078 v8::Local<v8::Function> f; | 2078 v8::Local<v8::Function> f; |
| 2079 v8::Local<v8::String> script = v8::String::New( | 2079 v8::Local<v8::String> script = v8::String::New( |
| 2080 "function f() {\n" | 2080 "function f() {\n" |
| 2081 " a = 0; // line 8 as this script has line offset 7\n" | 2081 " a = 0; // line 8 as this script has line offset 7\n" |
| 2082 " b = 0; // line 9 as this script has line offset 7\n" | 2082 " b = 0; // line 9 as this script has line offset 7\n" |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2116 f->Call(env->Global(), 0, NULL); | 2116 f->Call(env->Global(), 0, NULL); |
| 2117 CHECK_EQ(1, break_point_hit_count); | 2117 CHECK_EQ(1, break_point_hit_count); |
| 2118 | 2118 |
| 2119 v8::Debug::SetDebugEventListener(NULL); | 2119 v8::Debug::SetDebugEventListener(NULL); |
| 2120 CheckDebuggerUnloaded(); | 2120 CheckDebuggerUnloaded(); |
| 2121 } | 2121 } |
| 2122 | 2122 |
| 2123 | 2123 |
| 2124 // Test script break points set on lines. | 2124 // Test script break points set on lines. |
| 2125 TEST(ScriptBreakPointLine) { | 2125 TEST(ScriptBreakPointLine) { |
| 2126 v8::HandleScope scope; | |
| 2127 DebugLocalContext env; | 2126 DebugLocalContext env; |
| 2127 v8::HandleScope scope(env->GetIsolate()); |
| 2128 env.ExposeDebug(); | 2128 env.ExposeDebug(); |
| 2129 | 2129 |
| 2130 // Create a function for checking the function when hitting a break point. | 2130 // Create a function for checking the function when hitting a break point. |
| 2131 frame_function_name = CompileFunction(&env, | 2131 frame_function_name = CompileFunction(&env, |
| 2132 frame_function_name_source, | 2132 frame_function_name_source, |
| 2133 "frame_function_name"); | 2133 "frame_function_name"); |
| 2134 | 2134 |
| 2135 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, | 2135 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, |
| 2136 v8::Undefined()); | 2136 v8::Undefined()); |
| 2137 | 2137 |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2222 v8::Script::Compile(script, &origin)->Run(); | 2222 v8::Script::Compile(script, &origin)->Run(); |
| 2223 CHECK_EQ(0, break_point_hit_count); | 2223 CHECK_EQ(0, break_point_hit_count); |
| 2224 | 2224 |
| 2225 v8::Debug::SetDebugEventListener(NULL); | 2225 v8::Debug::SetDebugEventListener(NULL); |
| 2226 CheckDebuggerUnloaded(); | 2226 CheckDebuggerUnloaded(); |
| 2227 } | 2227 } |
| 2228 | 2228 |
| 2229 | 2229 |
| 2230 // Test top level script break points set on lines. | 2230 // Test top level script break points set on lines. |
| 2231 TEST(ScriptBreakPointLineTopLevel) { | 2231 TEST(ScriptBreakPointLineTopLevel) { |
| 2232 v8::HandleScope scope; | |
| 2233 DebugLocalContext env; | 2232 DebugLocalContext env; |
| 2233 v8::HandleScope scope(env->GetIsolate()); |
| 2234 env.ExposeDebug(); | 2234 env.ExposeDebug(); |
| 2235 | 2235 |
| 2236 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, | 2236 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, |
| 2237 v8::Undefined()); | 2237 v8::Undefined()); |
| 2238 | 2238 |
| 2239 v8::Local<v8::String> script = v8::String::New( | 2239 v8::Local<v8::String> script = v8::String::New( |
| 2240 "function f() {\n" | 2240 "function f() {\n" |
| 2241 " a = 1; // line 1\n" | 2241 " a = 1; // line 1\n" |
| 2242 "}\n" | 2242 "}\n" |
| 2243 "a = 2; // line 3\n"); | 2243 "a = 2; // line 3\n"); |
| 2244 v8::Local<v8::Function> f; | 2244 v8::Local<v8::Function> f; |
| 2245 { | 2245 { |
| 2246 v8::HandleScope scope; | 2246 v8::HandleScope scope(env->GetIsolate()); |
| 2247 v8::Script::Compile(script, v8::String::New("test.html"))->Run(); | 2247 v8::Script::Compile(script, v8::String::New("test.html"))->Run(); |
| 2248 } | 2248 } |
| 2249 f = v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("f"))); | 2249 f = v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("f"))); |
| 2250 | 2250 |
| 2251 HEAP->CollectAllGarbage(Heap::kNoGCFlags); | 2251 HEAP->CollectAllGarbage(Heap::kNoGCFlags); |
| 2252 | 2252 |
| 2253 SetScriptBreakPointByNameFromJS("test.html", 3, -1); | 2253 SetScriptBreakPointByNameFromJS("test.html", 3, -1); |
| 2254 | 2254 |
| 2255 // Call f and check that there was no break points. | 2255 // Call f and check that there was no break points. |
| 2256 break_point_hit_count = 0; | 2256 break_point_hit_count = 0; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 2268 CHECK_EQ(0, break_point_hit_count); | 2268 CHECK_EQ(0, break_point_hit_count); |
| 2269 | 2269 |
| 2270 v8::Debug::SetDebugEventListener(NULL); | 2270 v8::Debug::SetDebugEventListener(NULL); |
| 2271 CheckDebuggerUnloaded(); | 2271 CheckDebuggerUnloaded(); |
| 2272 } | 2272 } |
| 2273 | 2273 |
| 2274 | 2274 |
| 2275 // Test that it is possible to add and remove break points in a top level | 2275 // Test that it is possible to add and remove break points in a top level |
| 2276 // function which has no references but has not been collected yet. | 2276 // function which has no references but has not been collected yet. |
| 2277 TEST(ScriptBreakPointTopLevelCrash) { | 2277 TEST(ScriptBreakPointTopLevelCrash) { |
| 2278 v8::HandleScope scope; | |
| 2279 DebugLocalContext env; | 2278 DebugLocalContext env; |
| 2279 v8::HandleScope scope(env->GetIsolate()); |
| 2280 env.ExposeDebug(); | 2280 env.ExposeDebug(); |
| 2281 | 2281 |
| 2282 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, | 2282 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, |
| 2283 v8::Undefined()); | 2283 v8::Undefined()); |
| 2284 | 2284 |
| 2285 v8::Local<v8::String> script_source = v8::String::New( | 2285 v8::Local<v8::String> script_source = v8::String::New( |
| 2286 "function f() {\n" | 2286 "function f() {\n" |
| 2287 " return 0;\n" | 2287 " return 0;\n" |
| 2288 "}\n" | 2288 "}\n" |
| 2289 "f()"); | 2289 "f()"); |
| 2290 | 2290 |
| 2291 int sbp1 = SetScriptBreakPointByNameFromJS("test.html", 3, -1); | 2291 int sbp1 = SetScriptBreakPointByNameFromJS("test.html", 3, -1); |
| 2292 { | 2292 { |
| 2293 v8::HandleScope scope; | 2293 v8::HandleScope scope(env->GetIsolate()); |
| 2294 break_point_hit_count = 0; | 2294 break_point_hit_count = 0; |
| 2295 v8::Script::Compile(script_source, v8::String::New("test.html"))->Run(); | 2295 v8::Script::Compile(script_source, v8::String::New("test.html"))->Run(); |
| 2296 CHECK_EQ(1, break_point_hit_count); | 2296 CHECK_EQ(1, break_point_hit_count); |
| 2297 } | 2297 } |
| 2298 | 2298 |
| 2299 int sbp2 = SetScriptBreakPointByNameFromJS("test.html", 3, -1); | 2299 int sbp2 = SetScriptBreakPointByNameFromJS("test.html", 3, -1); |
| 2300 ClearBreakPointFromJS(sbp1); | 2300 ClearBreakPointFromJS(sbp1); |
| 2301 ClearBreakPointFromJS(sbp2); | 2301 ClearBreakPointFromJS(sbp2); |
| 2302 | 2302 |
| 2303 v8::Debug::SetDebugEventListener(NULL); | 2303 v8::Debug::SetDebugEventListener(NULL); |
| 2304 CheckDebuggerUnloaded(); | 2304 CheckDebuggerUnloaded(); |
| 2305 } | 2305 } |
| 2306 | 2306 |
| 2307 | 2307 |
| 2308 // Test that it is possible to remove the last break point for a function | 2308 // Test that it is possible to remove the last break point for a function |
| 2309 // inside the break handling of that break point. | 2309 // inside the break handling of that break point. |
| 2310 TEST(RemoveBreakPointInBreak) { | 2310 TEST(RemoveBreakPointInBreak) { |
| 2311 v8::HandleScope scope; | |
| 2312 DebugLocalContext env; | 2311 DebugLocalContext env; |
| 2312 v8::HandleScope scope(env->GetIsolate()); |
| 2313 | 2313 |
| 2314 v8::Local<v8::Function> foo = | 2314 v8::Local<v8::Function> foo = |
| 2315 CompileFunction(&env, "function foo(){a=1;}", "foo"); | 2315 CompileFunction(&env, "function foo(){a=1;}", "foo"); |
| 2316 debug_event_remove_break_point = SetBreakPoint(foo, 0); | 2316 debug_event_remove_break_point = SetBreakPoint(foo, 0); |
| 2317 | 2317 |
| 2318 // Register the debug event listener pasing the function | 2318 // Register the debug event listener pasing the function |
| 2319 v8::Debug::SetDebugEventListener(DebugEventRemoveBreakPoint, foo); | 2319 v8::Debug::SetDebugEventListener(DebugEventRemoveBreakPoint, foo); |
| 2320 | 2320 |
| 2321 break_point_hit_count = 0; | 2321 break_point_hit_count = 0; |
| 2322 foo->Call(env->Global(), 0, NULL); | 2322 foo->Call(env->Global(), 0, NULL); |
| 2323 CHECK_EQ(1, break_point_hit_count); | 2323 CHECK_EQ(1, break_point_hit_count); |
| 2324 | 2324 |
| 2325 break_point_hit_count = 0; | 2325 break_point_hit_count = 0; |
| 2326 foo->Call(env->Global(), 0, NULL); | 2326 foo->Call(env->Global(), 0, NULL); |
| 2327 CHECK_EQ(0, break_point_hit_count); | 2327 CHECK_EQ(0, break_point_hit_count); |
| 2328 | 2328 |
| 2329 v8::Debug::SetDebugEventListener(NULL); | 2329 v8::Debug::SetDebugEventListener(NULL); |
| 2330 CheckDebuggerUnloaded(); | 2330 CheckDebuggerUnloaded(); |
| 2331 } | 2331 } |
| 2332 | 2332 |
| 2333 | 2333 |
| 2334 // Test that the debugger statement causes a break. | 2334 // Test that the debugger statement causes a break. |
| 2335 TEST(DebuggerStatement) { | 2335 TEST(DebuggerStatement) { |
| 2336 break_point_hit_count = 0; | 2336 break_point_hit_count = 0; |
| 2337 v8::HandleScope scope; | |
| 2338 DebugLocalContext env; | 2337 DebugLocalContext env; |
| 2338 v8::HandleScope scope(env->GetIsolate()); |
| 2339 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, | 2339 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, |
| 2340 v8::Undefined()); | 2340 v8::Undefined()); |
| 2341 v8::Script::Compile(v8::String::New("function bar(){debugger}"))->Run(); | 2341 v8::Script::Compile(v8::String::New("function bar(){debugger}"))->Run(); |
| 2342 v8::Script::Compile(v8::String::New( | 2342 v8::Script::Compile(v8::String::New( |
| 2343 "function foo(){debugger;debugger;}"))->Run(); | 2343 "function foo(){debugger;debugger;}"))->Run(); |
| 2344 v8::Local<v8::Function> foo = | 2344 v8::Local<v8::Function> foo = |
| 2345 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("foo"))); | 2345 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("foo"))); |
| 2346 v8::Local<v8::Function> bar = | 2346 v8::Local<v8::Function> bar = |
| 2347 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("bar"))); | 2347 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("bar"))); |
| 2348 | 2348 |
| 2349 // Run function with debugger statement | 2349 // Run function with debugger statement |
| 2350 bar->Call(env->Global(), 0, NULL); | 2350 bar->Call(env->Global(), 0, NULL); |
| 2351 CHECK_EQ(1, break_point_hit_count); | 2351 CHECK_EQ(1, break_point_hit_count); |
| 2352 | 2352 |
| 2353 // Run function with two debugger statement | 2353 // Run function with two debugger statement |
| 2354 foo->Call(env->Global(), 0, NULL); | 2354 foo->Call(env->Global(), 0, NULL); |
| 2355 CHECK_EQ(3, break_point_hit_count); | 2355 CHECK_EQ(3, break_point_hit_count); |
| 2356 | 2356 |
| 2357 v8::Debug::SetDebugEventListener(NULL); | 2357 v8::Debug::SetDebugEventListener(NULL); |
| 2358 CheckDebuggerUnloaded(); | 2358 CheckDebuggerUnloaded(); |
| 2359 } | 2359 } |
| 2360 | 2360 |
| 2361 | 2361 |
| 2362 // Test setting a breakpoint on the debugger statement. | 2362 // Test setting a breakpoint on the debugger statement. |
| 2363 TEST(DebuggerStatementBreakpoint) { | 2363 TEST(DebuggerStatementBreakpoint) { |
| 2364 break_point_hit_count = 0; | 2364 break_point_hit_count = 0; |
| 2365 v8::HandleScope scope; | |
| 2366 DebugLocalContext env; | 2365 DebugLocalContext env; |
| 2366 v8::HandleScope scope(env->GetIsolate()); |
| 2367 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, | 2367 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, |
| 2368 v8::Undefined()); | 2368 v8::Undefined()); |
| 2369 v8::Script::Compile(v8::String::New("function foo(){debugger;}"))->Run(); | 2369 v8::Script::Compile(v8::String::New("function foo(){debugger;}"))->Run(); |
| 2370 v8::Local<v8::Function> foo = | 2370 v8::Local<v8::Function> foo = |
| 2371 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("foo"))); | 2371 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("foo"))); |
| 2372 | 2372 |
| 2373 // The debugger statement triggers breakpint hit | 2373 // The debugger statement triggers breakpint hit |
| 2374 foo->Call(env->Global(), 0, NULL); | 2374 foo->Call(env->Global(), 0, NULL); |
| 2375 CHECK_EQ(1, break_point_hit_count); | 2375 CHECK_EQ(1, break_point_hit_count); |
| 2376 | 2376 |
| 2377 int bp = SetBreakPoint(foo, 0); | 2377 int bp = SetBreakPoint(foo, 0); |
| 2378 | 2378 |
| 2379 // Set breakpoint does not duplicate hits | 2379 // Set breakpoint does not duplicate hits |
| 2380 foo->Call(env->Global(), 0, NULL); | 2380 foo->Call(env->Global(), 0, NULL); |
| 2381 CHECK_EQ(2, break_point_hit_count); | 2381 CHECK_EQ(2, break_point_hit_count); |
| 2382 | 2382 |
| 2383 ClearBreakPoint(bp); | 2383 ClearBreakPoint(bp); |
| 2384 v8::Debug::SetDebugEventListener(NULL); | 2384 v8::Debug::SetDebugEventListener(NULL); |
| 2385 CheckDebuggerUnloaded(); | 2385 CheckDebuggerUnloaded(); |
| 2386 } | 2386 } |
| 2387 | 2387 |
| 2388 | 2388 |
| 2389 // Test that the evaluation of expressions when a break point is hit generates | 2389 // Test that the evaluation of expressions when a break point is hit generates |
| 2390 // the correct results. | 2390 // the correct results. |
| 2391 TEST(DebugEvaluate) { | 2391 TEST(DebugEvaluate) { |
| 2392 v8::HandleScope scope; | |
| 2393 DebugLocalContext env; | 2392 DebugLocalContext env; |
| 2393 v8::HandleScope scope(env->GetIsolate()); |
| 2394 env.ExposeDebug(); | 2394 env.ExposeDebug(); |
| 2395 | 2395 |
| 2396 // Create a function for checking the evaluation when hitting a break point. | 2396 // Create a function for checking the evaluation when hitting a break point. |
| 2397 evaluate_check_function = CompileFunction(&env, | 2397 evaluate_check_function = CompileFunction(&env, |
| 2398 evaluate_check_source, | 2398 evaluate_check_source, |
| 2399 "evaluate_check"); | 2399 "evaluate_check"); |
| 2400 // Register the debug event listener | 2400 // Register the debug event listener |
| 2401 v8::Debug::SetDebugEventListener(DebugEventEvaluate); | 2401 v8::Debug::SetDebugEventListener(DebugEventEvaluate); |
| 2402 | 2402 |
| 2403 // Different expected vaules of x and a when in a break point (u = undefined, | 2403 // Different expected vaules of x and a when in a break point (u = undefined, |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2504 | 2504 |
| 2505 | 2505 |
| 2506 int debugEventCount = 0; | 2506 int debugEventCount = 0; |
| 2507 static void CheckDebugEvent(const v8::Debug::EventDetails& eventDetails) { | 2507 static void CheckDebugEvent(const v8::Debug::EventDetails& eventDetails) { |
| 2508 if (eventDetails.GetEvent() == v8::Break) ++debugEventCount; | 2508 if (eventDetails.GetEvent() == v8::Break) ++debugEventCount; |
| 2509 } | 2509 } |
| 2510 | 2510 |
| 2511 // Test that the conditional breakpoints work event if code generation from | 2511 // Test that the conditional breakpoints work event if code generation from |
| 2512 // strings is prohibited in the debugee context. | 2512 // strings is prohibited in the debugee context. |
| 2513 TEST(ConditionalBreakpointWithCodeGenerationDisallowed) { | 2513 TEST(ConditionalBreakpointWithCodeGenerationDisallowed) { |
| 2514 v8::HandleScope scope; | |
| 2515 DebugLocalContext env; | 2514 DebugLocalContext env; |
| 2515 v8::HandleScope scope(env->GetIsolate()); |
| 2516 env.ExposeDebug(); | 2516 env.ExposeDebug(); |
| 2517 | 2517 |
| 2518 v8::Debug::SetDebugEventListener2(CheckDebugEvent); | 2518 v8::Debug::SetDebugEventListener2(CheckDebugEvent); |
| 2519 | 2519 |
| 2520 v8::Local<v8::Function> foo = CompileFunction(&env, | 2520 v8::Local<v8::Function> foo = CompileFunction(&env, |
| 2521 "function foo(x) {\n" | 2521 "function foo(x) {\n" |
| 2522 " var s = 'String value2';\n" | 2522 " var s = 'String value2';\n" |
| 2523 " return s + x;\n" | 2523 " return s + x;\n" |
| 2524 "}", | 2524 "}", |
| 2525 "foo"); | 2525 "foo"); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 2536 CheckDebuggerUnloaded(); | 2536 CheckDebuggerUnloaded(); |
| 2537 } | 2537 } |
| 2538 | 2538 |
| 2539 | 2539 |
| 2540 bool checkedDebugEvals = true; | 2540 bool checkedDebugEvals = true; |
| 2541 v8::Handle<v8::Function> checkGlobalEvalFunction; | 2541 v8::Handle<v8::Function> checkGlobalEvalFunction; |
| 2542 v8::Handle<v8::Function> checkFrameEvalFunction; | 2542 v8::Handle<v8::Function> checkFrameEvalFunction; |
| 2543 static void CheckDebugEval(const v8::Debug::EventDetails& eventDetails) { | 2543 static void CheckDebugEval(const v8::Debug::EventDetails& eventDetails) { |
| 2544 if (eventDetails.GetEvent() == v8::Break) { | 2544 if (eventDetails.GetEvent() == v8::Break) { |
| 2545 ++debugEventCount; | 2545 ++debugEventCount; |
| 2546 v8::HandleScope handleScope; | 2546 v8::HandleScope handleScope(v8::Isolate::GetCurrent()); |
| 2547 | 2547 |
| 2548 v8::Handle<v8::Value> args[] = { eventDetails.GetExecutionState() }; | 2548 v8::Handle<v8::Value> args[] = { eventDetails.GetExecutionState() }; |
| 2549 CHECK(checkGlobalEvalFunction->Call( | 2549 CHECK(checkGlobalEvalFunction->Call( |
| 2550 eventDetails.GetEventContext()->Global(), 1, args)->IsTrue()); | 2550 eventDetails.GetEventContext()->Global(), 1, args)->IsTrue()); |
| 2551 CHECK(checkFrameEvalFunction->Call( | 2551 CHECK(checkFrameEvalFunction->Call( |
| 2552 eventDetails.GetEventContext()->Global(), 1, args)->IsTrue()); | 2552 eventDetails.GetEventContext()->Global(), 1, args)->IsTrue()); |
| 2553 } | 2553 } |
| 2554 } | 2554 } |
| 2555 | 2555 |
| 2556 // Test that the evaluation of expressions when a break point is hit generates | 2556 // Test that the evaluation of expressions when a break point is hit generates |
| 2557 // the correct results in case code generation from strings is disallowed in the | 2557 // the correct results in case code generation from strings is disallowed in the |
| 2558 // debugee context. | 2558 // debugee context. |
| 2559 TEST(DebugEvaluateWithCodeGenerationDisallowed) { | 2559 TEST(DebugEvaluateWithCodeGenerationDisallowed) { |
| 2560 v8::HandleScope scope; | |
| 2561 DebugLocalContext env; | 2560 DebugLocalContext env; |
| 2561 v8::HandleScope scope(env->GetIsolate()); |
| 2562 env.ExposeDebug(); | 2562 env.ExposeDebug(); |
| 2563 | 2563 |
| 2564 v8::Debug::SetDebugEventListener2(CheckDebugEval); | 2564 v8::Debug::SetDebugEventListener2(CheckDebugEval); |
| 2565 | 2565 |
| 2566 v8::Local<v8::Function> foo = CompileFunction(&env, | 2566 v8::Local<v8::Function> foo = CompileFunction(&env, |
| 2567 "var global = 'Global';\n" | 2567 "var global = 'Global';\n" |
| 2568 "function foo(x) {\n" | 2568 "function foo(x) {\n" |
| 2569 " var local = 'Local';\n" | 2569 " var local = 'Local';\n" |
| 2570 " debugger;\n" | 2570 " debugger;\n" |
| 2571 " return local + x;\n" | 2571 " return local + x;\n" |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2692 if (res) { | 2692 if (res) { |
| 2693 process_debug_messages_data.next(); | 2693 process_debug_messages_data.next(); |
| 2694 } | 2694 } |
| 2695 } | 2695 } |
| 2696 | 2696 |
| 2697 // Test that the evaluation of expressions works even from ProcessDebugMessages | 2697 // Test that the evaluation of expressions works even from ProcessDebugMessages |
| 2698 // i.e. with empty stack. | 2698 // i.e. with empty stack. |
| 2699 TEST(DebugEvaluateWithoutStack) { | 2699 TEST(DebugEvaluateWithoutStack) { |
| 2700 v8::Debug::SetMessageHandler(DebugProcessDebugMessagesHandler); | 2700 v8::Debug::SetMessageHandler(DebugProcessDebugMessagesHandler); |
| 2701 | 2701 |
| 2702 v8::HandleScope scope; | |
| 2703 DebugLocalContext env; | 2702 DebugLocalContext env; |
| 2703 v8::HandleScope scope(env->GetIsolate()); |
| 2704 | 2704 |
| 2705 const char* source = | 2705 const char* source = |
| 2706 "var v1 = 'Pinguin';\n function getAnimal() { return 'Capy' + 'bara'; }"; | 2706 "var v1 = 'Pinguin';\n function getAnimal() { return 'Capy' + 'bara'; }"; |
| 2707 | 2707 |
| 2708 v8::Script::Compile(v8::String::New(source))->Run(); | 2708 v8::Script::Compile(v8::String::New(source))->Run(); |
| 2709 | 2709 |
| 2710 v8::Debug::ProcessDebugMessages(); | 2710 v8::Debug::ProcessDebugMessages(); |
| 2711 | 2711 |
| 2712 const int kBufferSize = 1000; | 2712 const int kBufferSize = 1000; |
| 2713 uint16_t buffer[kBufferSize]; | 2713 uint16_t buffer[kBufferSize]; |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2752 CHECK_EQ(strcmp("805", process_debug_messages_data.results[2].buffer), 0); | 2752 CHECK_EQ(strcmp("805", process_debug_messages_data.results[2].buffer), 0); |
| 2753 | 2753 |
| 2754 v8::Debug::SetMessageHandler(NULL); | 2754 v8::Debug::SetMessageHandler(NULL); |
| 2755 v8::Debug::SetDebugEventListener(NULL); | 2755 v8::Debug::SetDebugEventListener(NULL); |
| 2756 CheckDebuggerUnloaded(); | 2756 CheckDebuggerUnloaded(); |
| 2757 } | 2757 } |
| 2758 | 2758 |
| 2759 | 2759 |
| 2760 // Simple test of the stepping mechanism using only store ICs. | 2760 // Simple test of the stepping mechanism using only store ICs. |
| 2761 TEST(DebugStepLinear) { | 2761 TEST(DebugStepLinear) { |
| 2762 v8::HandleScope scope; | |
| 2763 DebugLocalContext env; | 2762 DebugLocalContext env; |
| 2763 v8::HandleScope scope(env->GetIsolate()); |
| 2764 | 2764 |
| 2765 // Create a function for testing stepping. | 2765 // Create a function for testing stepping. |
| 2766 v8::Local<v8::Function> foo = CompileFunction(&env, | 2766 v8::Local<v8::Function> foo = CompileFunction(&env, |
| 2767 "function foo(){a=1;b=1;c=1;}", | 2767 "function foo(){a=1;b=1;c=1;}", |
| 2768 "foo"); | 2768 "foo"); |
| 2769 | 2769 |
| 2770 // Run foo to allow it to get optimized. | 2770 // Run foo to allow it to get optimized. |
| 2771 CompileRun("a=0; b=0; c=0; foo();"); | 2771 CompileRun("a=0; b=0; c=0; foo();"); |
| 2772 | 2772 |
| 2773 SetBreakPoint(foo, 3); | 2773 SetBreakPoint(foo, 3); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 2795 // Without stepping only active break points are hit. | 2795 // Without stepping only active break points are hit. |
| 2796 CHECK_EQ(1, break_point_hit_count); | 2796 CHECK_EQ(1, break_point_hit_count); |
| 2797 | 2797 |
| 2798 v8::Debug::SetDebugEventListener(NULL); | 2798 v8::Debug::SetDebugEventListener(NULL); |
| 2799 CheckDebuggerUnloaded(); | 2799 CheckDebuggerUnloaded(); |
| 2800 } | 2800 } |
| 2801 | 2801 |
| 2802 | 2802 |
| 2803 // Test of the stepping mechanism for keyed load in a loop. | 2803 // Test of the stepping mechanism for keyed load in a loop. |
| 2804 TEST(DebugStepKeyedLoadLoop) { | 2804 TEST(DebugStepKeyedLoadLoop) { |
| 2805 v8::HandleScope scope; | |
| 2806 DebugLocalContext env; | 2805 DebugLocalContext env; |
| 2806 v8::HandleScope scope(env->GetIsolate()); |
| 2807 | 2807 |
| 2808 // Register a debug event listener which steps and counts. | 2808 // Register a debug event listener which steps and counts. |
| 2809 v8::Debug::SetDebugEventListener(DebugEventStep); | 2809 v8::Debug::SetDebugEventListener(DebugEventStep); |
| 2810 | 2810 |
| 2811 // Create a function for testing stepping of keyed load. The statement 'y=1' | 2811 // Create a function for testing stepping of keyed load. The statement 'y=1' |
| 2812 // is there to have more than one breakable statement in the loop, TODO(315). | 2812 // is there to have more than one breakable statement in the loop, TODO(315). |
| 2813 v8::Local<v8::Function> foo = CompileFunction( | 2813 v8::Local<v8::Function> foo = CompileFunction( |
| 2814 &env, | 2814 &env, |
| 2815 "function foo(a) {\n" | 2815 "function foo(a) {\n" |
| 2816 " var x;\n" | 2816 " var x;\n" |
| (...skipping 26 matching lines...) Expand all Loading... |
| 2843 // With stepping all break locations are hit. | 2843 // With stepping all break locations are hit. |
| 2844 CHECK_EQ(34, break_point_hit_count); | 2844 CHECK_EQ(34, break_point_hit_count); |
| 2845 | 2845 |
| 2846 v8::Debug::SetDebugEventListener(NULL); | 2846 v8::Debug::SetDebugEventListener(NULL); |
| 2847 CheckDebuggerUnloaded(); | 2847 CheckDebuggerUnloaded(); |
| 2848 } | 2848 } |
| 2849 | 2849 |
| 2850 | 2850 |
| 2851 // Test of the stepping mechanism for keyed store in a loop. | 2851 // Test of the stepping mechanism for keyed store in a loop. |
| 2852 TEST(DebugStepKeyedStoreLoop) { | 2852 TEST(DebugStepKeyedStoreLoop) { |
| 2853 v8::HandleScope scope; | |
| 2854 DebugLocalContext env; | 2853 DebugLocalContext env; |
| 2854 v8::HandleScope scope(env->GetIsolate()); |
| 2855 | 2855 |
| 2856 // Register a debug event listener which steps and counts. | 2856 // Register a debug event listener which steps and counts. |
| 2857 v8::Debug::SetDebugEventListener(DebugEventStep); | 2857 v8::Debug::SetDebugEventListener(DebugEventStep); |
| 2858 | 2858 |
| 2859 // Create a function for testing stepping of keyed store. The statement 'y=1' | 2859 // Create a function for testing stepping of keyed store. The statement 'y=1' |
| 2860 // is there to have more than one breakable statement in the loop, TODO(315). | 2860 // is there to have more than one breakable statement in the loop, TODO(315). |
| 2861 v8::Local<v8::Function> foo = CompileFunction( | 2861 v8::Local<v8::Function> foo = CompileFunction( |
| 2862 &env, | 2862 &env, |
| 2863 "function foo(a) {\n" | 2863 "function foo(a) {\n" |
| 2864 " var len = a.length;\n" | 2864 " var len = a.length;\n" |
| (...skipping 25 matching lines...) Expand all Loading... |
| 2890 // With stepping all break locations are hit. | 2890 // With stepping all break locations are hit. |
| 2891 CHECK_EQ(33, break_point_hit_count); | 2891 CHECK_EQ(33, break_point_hit_count); |
| 2892 | 2892 |
| 2893 v8::Debug::SetDebugEventListener(NULL); | 2893 v8::Debug::SetDebugEventListener(NULL); |
| 2894 CheckDebuggerUnloaded(); | 2894 CheckDebuggerUnloaded(); |
| 2895 } | 2895 } |
| 2896 | 2896 |
| 2897 | 2897 |
| 2898 // Test of the stepping mechanism for named load in a loop. | 2898 // Test of the stepping mechanism for named load in a loop. |
| 2899 TEST(DebugStepNamedLoadLoop) { | 2899 TEST(DebugStepNamedLoadLoop) { |
| 2900 v8::HandleScope scope; | |
| 2901 DebugLocalContext env; | 2900 DebugLocalContext env; |
| 2901 v8::HandleScope scope(env->GetIsolate()); |
| 2902 | 2902 |
| 2903 // Register a debug event listener which steps and counts. | 2903 // Register a debug event listener which steps and counts. |
| 2904 v8::Debug::SetDebugEventListener(DebugEventStep); | 2904 v8::Debug::SetDebugEventListener(DebugEventStep); |
| 2905 | 2905 |
| 2906 // Create a function for testing stepping of named load. | 2906 // Create a function for testing stepping of named load. |
| 2907 v8::Local<v8::Function> foo = CompileFunction( | 2907 v8::Local<v8::Function> foo = CompileFunction( |
| 2908 &env, | 2908 &env, |
| 2909 "function foo() {\n" | 2909 "function foo() {\n" |
| 2910 " var a = [];\n" | 2910 " var a = [];\n" |
| 2911 " var s = \"\";\n" | 2911 " var s = \"\";\n" |
| (...skipping 21 matching lines...) Expand all Loading... |
| 2933 | 2933 |
| 2934 // With stepping all break locations are hit. | 2934 // With stepping all break locations are hit. |
| 2935 CHECK_EQ(54, break_point_hit_count); | 2935 CHECK_EQ(54, break_point_hit_count); |
| 2936 | 2936 |
| 2937 v8::Debug::SetDebugEventListener(NULL); | 2937 v8::Debug::SetDebugEventListener(NULL); |
| 2938 CheckDebuggerUnloaded(); | 2938 CheckDebuggerUnloaded(); |
| 2939 } | 2939 } |
| 2940 | 2940 |
| 2941 | 2941 |
| 2942 static void DoDebugStepNamedStoreLoop(int expected) { | 2942 static void DoDebugStepNamedStoreLoop(int expected) { |
| 2943 v8::HandleScope scope; | |
| 2944 DebugLocalContext env; | 2943 DebugLocalContext env; |
| 2944 v8::HandleScope scope(env->GetIsolate()); |
| 2945 | 2945 |
| 2946 // Register a debug event listener which steps and counts. | 2946 // Register a debug event listener which steps and counts. |
| 2947 v8::Debug::SetDebugEventListener(DebugEventStep); | 2947 v8::Debug::SetDebugEventListener(DebugEventStep); |
| 2948 | 2948 |
| 2949 // Create a function for testing stepping of named store. | 2949 // Create a function for testing stepping of named store. |
| 2950 v8::Local<v8::Function> foo = CompileFunction( | 2950 v8::Local<v8::Function> foo = CompileFunction( |
| 2951 &env, | 2951 &env, |
| 2952 "function foo() {\n" | 2952 "function foo() {\n" |
| 2953 " var a = {a:1};\n" | 2953 " var a = {a:1};\n" |
| 2954 " for (var i = 0; i < 10; i++) {\n" | 2954 " for (var i = 0; i < 10; i++) {\n" |
| (...skipping 20 matching lines...) Expand all Loading... |
| 2975 | 2975 |
| 2976 | 2976 |
| 2977 // Test of the stepping mechanism for named load in a loop. | 2977 // Test of the stepping mechanism for named load in a loop. |
| 2978 TEST(DebugStepNamedStoreLoop) { | 2978 TEST(DebugStepNamedStoreLoop) { |
| 2979 DoDebugStepNamedStoreLoop(23); | 2979 DoDebugStepNamedStoreLoop(23); |
| 2980 } | 2980 } |
| 2981 | 2981 |
| 2982 | 2982 |
| 2983 // Test the stepping mechanism with different ICs. | 2983 // Test the stepping mechanism with different ICs. |
| 2984 TEST(DebugStepLinearMixedICs) { | 2984 TEST(DebugStepLinearMixedICs) { |
| 2985 v8::HandleScope scope; | |
| 2986 DebugLocalContext env; | 2985 DebugLocalContext env; |
| 2986 v8::HandleScope scope(env->GetIsolate()); |
| 2987 | 2987 |
| 2988 // Register a debug event listener which steps and counts. | 2988 // Register a debug event listener which steps and counts. |
| 2989 v8::Debug::SetDebugEventListener(DebugEventStep); | 2989 v8::Debug::SetDebugEventListener(DebugEventStep); |
| 2990 | 2990 |
| 2991 // Create a function for testing stepping. | 2991 // Create a function for testing stepping. |
| 2992 v8::Local<v8::Function> foo = CompileFunction(&env, | 2992 v8::Local<v8::Function> foo = CompileFunction(&env, |
| 2993 "function bar() {};" | 2993 "function bar() {};" |
| 2994 "function foo() {" | 2994 "function foo() {" |
| 2995 " var x;" | 2995 " var x;" |
| 2996 " var index='name';" | 2996 " var index='name';" |
| (...skipping 24 matching lines...) Expand all Loading... |
| 3021 | 3021 |
| 3022 // Without stepping only active break points are hit. | 3022 // Without stepping only active break points are hit. |
| 3023 CHECK_EQ(1, break_point_hit_count); | 3023 CHECK_EQ(1, break_point_hit_count); |
| 3024 | 3024 |
| 3025 v8::Debug::SetDebugEventListener(NULL); | 3025 v8::Debug::SetDebugEventListener(NULL); |
| 3026 CheckDebuggerUnloaded(); | 3026 CheckDebuggerUnloaded(); |
| 3027 } | 3027 } |
| 3028 | 3028 |
| 3029 | 3029 |
| 3030 TEST(DebugStepDeclarations) { | 3030 TEST(DebugStepDeclarations) { |
| 3031 v8::HandleScope scope; | |
| 3032 DebugLocalContext env; | 3031 DebugLocalContext env; |
| 3032 v8::HandleScope scope(env->GetIsolate()); |
| 3033 | 3033 |
| 3034 // Register a debug event listener which steps and counts. | 3034 // Register a debug event listener which steps and counts. |
| 3035 v8::Debug::SetDebugEventListener(DebugEventStep); | 3035 v8::Debug::SetDebugEventListener(DebugEventStep); |
| 3036 | 3036 |
| 3037 // Create a function for testing stepping. Run it to allow it to get | 3037 // Create a function for testing stepping. Run it to allow it to get |
| 3038 // optimized. | 3038 // optimized. |
| 3039 const char* src = "function foo() { " | 3039 const char* src = "function foo() { " |
| 3040 " var a;" | 3040 " var a;" |
| 3041 " var b = 1;" | 3041 " var b = 1;" |
| 3042 " var c = foo;" | 3042 " var c = foo;" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 3054 foo->Call(env->Global(), 0, NULL); | 3054 foo->Call(env->Global(), 0, NULL); |
| 3055 CHECK_EQ(6, break_point_hit_count); | 3055 CHECK_EQ(6, break_point_hit_count); |
| 3056 | 3056 |
| 3057 // Get rid of the debug event listener. | 3057 // Get rid of the debug event listener. |
| 3058 v8::Debug::SetDebugEventListener(NULL); | 3058 v8::Debug::SetDebugEventListener(NULL); |
| 3059 CheckDebuggerUnloaded(); | 3059 CheckDebuggerUnloaded(); |
| 3060 } | 3060 } |
| 3061 | 3061 |
| 3062 | 3062 |
| 3063 TEST(DebugStepLocals) { | 3063 TEST(DebugStepLocals) { |
| 3064 v8::HandleScope scope; | |
| 3065 DebugLocalContext env; | 3064 DebugLocalContext env; |
| 3065 v8::HandleScope scope(env->GetIsolate()); |
| 3066 | 3066 |
| 3067 // Register a debug event listener which steps and counts. | 3067 // Register a debug event listener which steps and counts. |
| 3068 v8::Debug::SetDebugEventListener(DebugEventStep); | 3068 v8::Debug::SetDebugEventListener(DebugEventStep); |
| 3069 | 3069 |
| 3070 // Create a function for testing stepping. Run it to allow it to get | 3070 // Create a function for testing stepping. Run it to allow it to get |
| 3071 // optimized. | 3071 // optimized. |
| 3072 const char* src = "function foo() { " | 3072 const char* src = "function foo() { " |
| 3073 " var a,b;" | 3073 " var a,b;" |
| 3074 " a = 1;" | 3074 " a = 1;" |
| 3075 " b = a + 2;" | 3075 " b = a + 2;" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 3087 foo->Call(env->Global(), 0, NULL); | 3087 foo->Call(env->Global(), 0, NULL); |
| 3088 CHECK_EQ(6, break_point_hit_count); | 3088 CHECK_EQ(6, break_point_hit_count); |
| 3089 | 3089 |
| 3090 // Get rid of the debug event listener. | 3090 // Get rid of the debug event listener. |
| 3091 v8::Debug::SetDebugEventListener(NULL); | 3091 v8::Debug::SetDebugEventListener(NULL); |
| 3092 CheckDebuggerUnloaded(); | 3092 CheckDebuggerUnloaded(); |
| 3093 } | 3093 } |
| 3094 | 3094 |
| 3095 | 3095 |
| 3096 TEST(DebugStepIf) { | 3096 TEST(DebugStepIf) { |
| 3097 v8::HandleScope scope; | |
| 3098 DebugLocalContext env; | 3097 DebugLocalContext env; |
| 3098 v8::HandleScope scope(env->GetIsolate()); |
| 3099 | 3099 |
| 3100 // Register a debug event listener which steps and counts. | 3100 // Register a debug event listener which steps and counts. |
| 3101 v8::Debug::SetDebugEventListener(DebugEventStep); | 3101 v8::Debug::SetDebugEventListener(DebugEventStep); |
| 3102 | 3102 |
| 3103 // Create a function for testing stepping. Run it to allow it to get | 3103 // Create a function for testing stepping. Run it to allow it to get |
| 3104 // optimized. | 3104 // optimized. |
| 3105 const int argc = 1; | 3105 const int argc = 1; |
| 3106 const char* src = "function foo(x) { " | 3106 const char* src = "function foo(x) { " |
| 3107 " a = 1;" | 3107 " a = 1;" |
| 3108 " if (x) {" | 3108 " if (x) {" |
| (...skipping 21 matching lines...) Expand all Loading... |
| 3130 foo->Call(env->Global(), argc, argv_false); | 3130 foo->Call(env->Global(), argc, argv_false); |
| 3131 CHECK_EQ(5, break_point_hit_count); | 3131 CHECK_EQ(5, break_point_hit_count); |
| 3132 | 3132 |
| 3133 // Get rid of the debug event listener. | 3133 // Get rid of the debug event listener. |
| 3134 v8::Debug::SetDebugEventListener(NULL); | 3134 v8::Debug::SetDebugEventListener(NULL); |
| 3135 CheckDebuggerUnloaded(); | 3135 CheckDebuggerUnloaded(); |
| 3136 } | 3136 } |
| 3137 | 3137 |
| 3138 | 3138 |
| 3139 TEST(DebugStepSwitch) { | 3139 TEST(DebugStepSwitch) { |
| 3140 v8::HandleScope scope; | |
| 3141 DebugLocalContext env; | 3140 DebugLocalContext env; |
| 3141 v8::HandleScope scope(env->GetIsolate()); |
| 3142 | 3142 |
| 3143 // Register a debug event listener which steps and counts. | 3143 // Register a debug event listener which steps and counts. |
| 3144 v8::Debug::SetDebugEventListener(DebugEventStep); | 3144 v8::Debug::SetDebugEventListener(DebugEventStep); |
| 3145 | 3145 |
| 3146 // Create a function for testing stepping. Run it to allow it to get | 3146 // Create a function for testing stepping. Run it to allow it to get |
| 3147 // optimized. | 3147 // optimized. |
| 3148 const int argc = 1; | 3148 const int argc = 1; |
| 3149 const char* src = "function foo(x) { " | 3149 const char* src = "function foo(x) { " |
| 3150 " a = 1;" | 3150 " a = 1;" |
| 3151 " switch (x) {" | 3151 " switch (x) {" |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3186 foo->Call(env->Global(), argc, argv_3); | 3186 foo->Call(env->Global(), argc, argv_3); |
| 3187 CHECK_EQ(7, break_point_hit_count); | 3187 CHECK_EQ(7, break_point_hit_count); |
| 3188 | 3188 |
| 3189 // Get rid of the debug event listener. | 3189 // Get rid of the debug event listener. |
| 3190 v8::Debug::SetDebugEventListener(NULL); | 3190 v8::Debug::SetDebugEventListener(NULL); |
| 3191 CheckDebuggerUnloaded(); | 3191 CheckDebuggerUnloaded(); |
| 3192 } | 3192 } |
| 3193 | 3193 |
| 3194 | 3194 |
| 3195 TEST(DebugStepWhile) { | 3195 TEST(DebugStepWhile) { |
| 3196 v8::HandleScope scope; | |
| 3197 DebugLocalContext env; | 3196 DebugLocalContext env; |
| 3197 v8::HandleScope scope(env->GetIsolate()); |
| 3198 | 3198 |
| 3199 // Register a debug event listener which steps and counts. | 3199 // Register a debug event listener which steps and counts. |
| 3200 v8::Debug::SetDebugEventListener(DebugEventStep); | 3200 v8::Debug::SetDebugEventListener(DebugEventStep); |
| 3201 | 3201 |
| 3202 // Create a function for testing stepping. Run it to allow it to get | 3202 // Create a function for testing stepping. Run it to allow it to get |
| 3203 // optimized. | 3203 // optimized. |
| 3204 const int argc = 1; | 3204 const int argc = 1; |
| 3205 const char* src = "function foo(x) { " | 3205 const char* src = "function foo(x) { " |
| 3206 " var a = 0;" | 3206 " var a = 0;" |
| 3207 " while (a < x) {" | 3207 " while (a < x) {" |
| (...skipping 18 matching lines...) Expand all Loading... |
| 3226 foo->Call(env->Global(), argc, argv_100); | 3226 foo->Call(env->Global(), argc, argv_100); |
| 3227 CHECK_EQ(202, break_point_hit_count); | 3227 CHECK_EQ(202, break_point_hit_count); |
| 3228 | 3228 |
| 3229 // Get rid of the debug event listener. | 3229 // Get rid of the debug event listener. |
| 3230 v8::Debug::SetDebugEventListener(NULL); | 3230 v8::Debug::SetDebugEventListener(NULL); |
| 3231 CheckDebuggerUnloaded(); | 3231 CheckDebuggerUnloaded(); |
| 3232 } | 3232 } |
| 3233 | 3233 |
| 3234 | 3234 |
| 3235 TEST(DebugStepDoWhile) { | 3235 TEST(DebugStepDoWhile) { |
| 3236 v8::HandleScope scope; | |
| 3237 DebugLocalContext env; | 3236 DebugLocalContext env; |
| 3237 v8::HandleScope scope(env->GetIsolate()); |
| 3238 | 3238 |
| 3239 // Register a debug event listener which steps and counts. | 3239 // Register a debug event listener which steps and counts. |
| 3240 v8::Debug::SetDebugEventListener(DebugEventStep); | 3240 v8::Debug::SetDebugEventListener(DebugEventStep); |
| 3241 | 3241 |
| 3242 // Create a function for testing stepping. Run it to allow it to get | 3242 // Create a function for testing stepping. Run it to allow it to get |
| 3243 // optimized. | 3243 // optimized. |
| 3244 const int argc = 1; | 3244 const int argc = 1; |
| 3245 const char* src = "function foo(x) { " | 3245 const char* src = "function foo(x) { " |
| 3246 " var a = 0;" | 3246 " var a = 0;" |
| 3247 " do {" | 3247 " do {" |
| (...skipping 18 matching lines...) Expand all Loading... |
| 3266 foo->Call(env->Global(), argc, argv_100); | 3266 foo->Call(env->Global(), argc, argv_100); |
| 3267 CHECK_EQ(202, break_point_hit_count); | 3267 CHECK_EQ(202, break_point_hit_count); |
| 3268 | 3268 |
| 3269 // Get rid of the debug event listener. | 3269 // Get rid of the debug event listener. |
| 3270 v8::Debug::SetDebugEventListener(NULL); | 3270 v8::Debug::SetDebugEventListener(NULL); |
| 3271 CheckDebuggerUnloaded(); | 3271 CheckDebuggerUnloaded(); |
| 3272 } | 3272 } |
| 3273 | 3273 |
| 3274 | 3274 |
| 3275 TEST(DebugStepFor) { | 3275 TEST(DebugStepFor) { |
| 3276 v8::HandleScope scope; | |
| 3277 DebugLocalContext env; | 3276 DebugLocalContext env; |
| 3277 v8::HandleScope scope(env->GetIsolate()); |
| 3278 | 3278 |
| 3279 // Register a debug event listener which steps and counts. | 3279 // Register a debug event listener which steps and counts. |
| 3280 v8::Debug::SetDebugEventListener(DebugEventStep); | 3280 v8::Debug::SetDebugEventListener(DebugEventStep); |
| 3281 | 3281 |
| 3282 // Create a function for testing stepping. Run it to allow it to get | 3282 // Create a function for testing stepping. Run it to allow it to get |
| 3283 // optimized. | 3283 // optimized. |
| 3284 const int argc = 1; | 3284 const int argc = 1; |
| 3285 const char* src = "function foo(x) { " | 3285 const char* src = "function foo(x) { " |
| 3286 " a = 1;" | 3286 " a = 1;" |
| 3287 " for (i = 0; i < x; i++) {" | 3287 " for (i = 0; i < x; i++) {" |
| (...skipping 19 matching lines...) Expand all Loading... |
| 3307 foo->Call(env->Global(), argc, argv_100); | 3307 foo->Call(env->Global(), argc, argv_100); |
| 3308 CHECK_EQ(203, break_point_hit_count); | 3308 CHECK_EQ(203, break_point_hit_count); |
| 3309 | 3309 |
| 3310 // Get rid of the debug event listener. | 3310 // Get rid of the debug event listener. |
| 3311 v8::Debug::SetDebugEventListener(NULL); | 3311 v8::Debug::SetDebugEventListener(NULL); |
| 3312 CheckDebuggerUnloaded(); | 3312 CheckDebuggerUnloaded(); |
| 3313 } | 3313 } |
| 3314 | 3314 |
| 3315 | 3315 |
| 3316 TEST(DebugStepForContinue) { | 3316 TEST(DebugStepForContinue) { |
| 3317 v8::HandleScope scope; | |
| 3318 DebugLocalContext env; | 3317 DebugLocalContext env; |
| 3318 v8::HandleScope scope(env->GetIsolate()); |
| 3319 | 3319 |
| 3320 // Register a debug event listener which steps and counts. | 3320 // Register a debug event listener which steps and counts. |
| 3321 v8::Debug::SetDebugEventListener(DebugEventStep); | 3321 v8::Debug::SetDebugEventListener(DebugEventStep); |
| 3322 | 3322 |
| 3323 // Create a function for testing stepping. Run it to allow it to get | 3323 // Create a function for testing stepping. Run it to allow it to get |
| 3324 // optimized. | 3324 // optimized. |
| 3325 const int argc = 1; | 3325 const int argc = 1; |
| 3326 const char* src = "function foo(x) { " | 3326 const char* src = "function foo(x) { " |
| 3327 " var a = 0;" | 3327 " var a = 0;" |
| 3328 " var b = 0;" | 3328 " var b = 0;" |
| (...skipping 29 matching lines...) Expand all Loading... |
| 3358 CHECK_EQ(50, result->Int32Value()); | 3358 CHECK_EQ(50, result->Int32Value()); |
| 3359 CHECK_EQ(456, break_point_hit_count); | 3359 CHECK_EQ(456, break_point_hit_count); |
| 3360 | 3360 |
| 3361 // Get rid of the debug event listener. | 3361 // Get rid of the debug event listener. |
| 3362 v8::Debug::SetDebugEventListener(NULL); | 3362 v8::Debug::SetDebugEventListener(NULL); |
| 3363 CheckDebuggerUnloaded(); | 3363 CheckDebuggerUnloaded(); |
| 3364 } | 3364 } |
| 3365 | 3365 |
| 3366 | 3366 |
| 3367 TEST(DebugStepForBreak) { | 3367 TEST(DebugStepForBreak) { |
| 3368 v8::HandleScope scope; | |
| 3369 DebugLocalContext env; | 3368 DebugLocalContext env; |
| 3369 v8::HandleScope scope(env->GetIsolate()); |
| 3370 | 3370 |
| 3371 // Register a debug event listener which steps and counts. | 3371 // Register a debug event listener which steps and counts. |
| 3372 v8::Debug::SetDebugEventListener(DebugEventStep); | 3372 v8::Debug::SetDebugEventListener(DebugEventStep); |
| 3373 | 3373 |
| 3374 // Create a function for testing stepping. Run it to allow it to get | 3374 // Create a function for testing stepping. Run it to allow it to get |
| 3375 // optimized. | 3375 // optimized. |
| 3376 const int argc = 1; | 3376 const int argc = 1; |
| 3377 const char* src = "function foo(x) { " | 3377 const char* src = "function foo(x) { " |
| 3378 " var a = 0;" | 3378 " var a = 0;" |
| 3379 " var b = 0;" | 3379 " var b = 0;" |
| (...skipping 30 matching lines...) Expand all Loading... |
| 3410 CHECK_EQ(99, result->Int32Value()); | 3410 CHECK_EQ(99, result->Int32Value()); |
| 3411 CHECK_EQ(504, break_point_hit_count); | 3411 CHECK_EQ(504, break_point_hit_count); |
| 3412 | 3412 |
| 3413 // Get rid of the debug event listener. | 3413 // Get rid of the debug event listener. |
| 3414 v8::Debug::SetDebugEventListener(NULL); | 3414 v8::Debug::SetDebugEventListener(NULL); |
| 3415 CheckDebuggerUnloaded(); | 3415 CheckDebuggerUnloaded(); |
| 3416 } | 3416 } |
| 3417 | 3417 |
| 3418 | 3418 |
| 3419 TEST(DebugStepForIn) { | 3419 TEST(DebugStepForIn) { |
| 3420 v8::HandleScope scope; | |
| 3421 DebugLocalContext env; | 3420 DebugLocalContext env; |
| 3421 v8::HandleScope scope(env->GetIsolate()); |
| 3422 | 3422 |
| 3423 // Register a debug event listener which steps and counts. | 3423 // Register a debug event listener which steps and counts. |
| 3424 v8::Debug::SetDebugEventListener(DebugEventStep); | 3424 v8::Debug::SetDebugEventListener(DebugEventStep); |
| 3425 | 3425 |
| 3426 // Create a function for testing stepping. Run it to allow it to get | 3426 // Create a function for testing stepping. Run it to allow it to get |
| 3427 // optimized. | 3427 // optimized. |
| 3428 v8::Local<v8::Function> foo; | 3428 v8::Local<v8::Function> foo; |
| 3429 const char* src_1 = "function foo() { " | 3429 const char* src_1 = "function foo() { " |
| 3430 " var a = [1, 2];" | 3430 " var a = [1, 2];" |
| 3431 " for (x in a) {" | 3431 " for (x in a) {" |
| (...skipping 26 matching lines...) Expand all Loading... |
| 3458 foo->Call(env->Global(), 0, NULL); | 3458 foo->Call(env->Global(), 0, NULL); |
| 3459 CHECK_EQ(8, break_point_hit_count); | 3459 CHECK_EQ(8, break_point_hit_count); |
| 3460 | 3460 |
| 3461 // Get rid of the debug event listener. | 3461 // Get rid of the debug event listener. |
| 3462 v8::Debug::SetDebugEventListener(NULL); | 3462 v8::Debug::SetDebugEventListener(NULL); |
| 3463 CheckDebuggerUnloaded(); | 3463 CheckDebuggerUnloaded(); |
| 3464 } | 3464 } |
| 3465 | 3465 |
| 3466 | 3466 |
| 3467 TEST(DebugStepWith) { | 3467 TEST(DebugStepWith) { |
| 3468 v8::HandleScope scope; | |
| 3469 DebugLocalContext env; | 3468 DebugLocalContext env; |
| 3469 v8::HandleScope scope(env->GetIsolate()); |
| 3470 | 3470 |
| 3471 // Register a debug event listener which steps and counts. | 3471 // Register a debug event listener which steps and counts. |
| 3472 v8::Debug::SetDebugEventListener(DebugEventStep); | 3472 v8::Debug::SetDebugEventListener(DebugEventStep); |
| 3473 | 3473 |
| 3474 // Create a function for testing stepping. Run it to allow it to get | 3474 // Create a function for testing stepping. Run it to allow it to get |
| 3475 // optimized. | 3475 // optimized. |
| 3476 const char* src = "function foo(x) { " | 3476 const char* src = "function foo(x) { " |
| 3477 " var a = {};" | 3477 " var a = {};" |
| 3478 " with (a) {}" | 3478 " with (a) {}" |
| 3479 " with (b) {}" | 3479 " with (b) {}" |
| 3480 "}" | 3480 "}" |
| 3481 "foo()"; | 3481 "foo()"; |
| 3482 env->Global()->Set(v8::String::New("b"), v8::Object::New()); | 3482 env->Global()->Set(v8::String::New("b"), v8::Object::New()); |
| 3483 v8::Local<v8::Function> foo = CompileFunction(&env, src, "foo"); | 3483 v8::Local<v8::Function> foo = CompileFunction(&env, src, "foo"); |
| 3484 v8::Handle<v8::Value> result; | 3484 v8::Handle<v8::Value> result; |
| 3485 SetBreakPoint(foo, 8); // "var a = {};" | 3485 SetBreakPoint(foo, 8); // "var a = {};" |
| 3486 | 3486 |
| 3487 step_action = StepIn; | 3487 step_action = StepIn; |
| 3488 break_point_hit_count = 0; | 3488 break_point_hit_count = 0; |
| 3489 foo->Call(env->Global(), 0, NULL); | 3489 foo->Call(env->Global(), 0, NULL); |
| 3490 CHECK_EQ(4, break_point_hit_count); | 3490 CHECK_EQ(4, break_point_hit_count); |
| 3491 | 3491 |
| 3492 // Get rid of the debug event listener. | 3492 // Get rid of the debug event listener. |
| 3493 v8::Debug::SetDebugEventListener(NULL); | 3493 v8::Debug::SetDebugEventListener(NULL); |
| 3494 CheckDebuggerUnloaded(); | 3494 CheckDebuggerUnloaded(); |
| 3495 } | 3495 } |
| 3496 | 3496 |
| 3497 | 3497 |
| 3498 TEST(DebugConditional) { | 3498 TEST(DebugConditional) { |
| 3499 v8::HandleScope scope; | |
| 3500 DebugLocalContext env; | 3499 DebugLocalContext env; |
| 3500 v8::HandleScope scope(env->GetIsolate()); |
| 3501 | 3501 |
| 3502 // Register a debug event listener which steps and counts. | 3502 // Register a debug event listener which steps and counts. |
| 3503 v8::Debug::SetDebugEventListener(DebugEventStep); | 3503 v8::Debug::SetDebugEventListener(DebugEventStep); |
| 3504 | 3504 |
| 3505 // Create a function for testing stepping. Run it to allow it to get | 3505 // Create a function for testing stepping. Run it to allow it to get |
| 3506 // optimized. | 3506 // optimized. |
| 3507 const char* src = "function foo(x) { " | 3507 const char* src = "function foo(x) { " |
| 3508 " var a;" | 3508 " var a;" |
| 3509 " a = x ? 1 : 2;" | 3509 " a = x ? 1 : 2;" |
| 3510 " return a;" | 3510 " return a;" |
| (...skipping 14 matching lines...) Expand all Loading... |
| 3525 foo->Call(env->Global(), argc, argv_true); | 3525 foo->Call(env->Global(), argc, argv_true); |
| 3526 CHECK_EQ(5, break_point_hit_count); | 3526 CHECK_EQ(5, break_point_hit_count); |
| 3527 | 3527 |
| 3528 // Get rid of the debug event listener. | 3528 // Get rid of the debug event listener. |
| 3529 v8::Debug::SetDebugEventListener(NULL); | 3529 v8::Debug::SetDebugEventListener(NULL); |
| 3530 CheckDebuggerUnloaded(); | 3530 CheckDebuggerUnloaded(); |
| 3531 } | 3531 } |
| 3532 | 3532 |
| 3533 | 3533 |
| 3534 TEST(StepInOutSimple) { | 3534 TEST(StepInOutSimple) { |
| 3535 v8::HandleScope scope; | |
| 3536 DebugLocalContext env; | 3535 DebugLocalContext env; |
| 3536 v8::HandleScope scope(env->GetIsolate()); |
| 3537 | 3537 |
| 3538 // Create a function for checking the function when hitting a break point. | 3538 // Create a function for checking the function when hitting a break point. |
| 3539 frame_function_name = CompileFunction(&env, | 3539 frame_function_name = CompileFunction(&env, |
| 3540 frame_function_name_source, | 3540 frame_function_name_source, |
| 3541 "frame_function_name"); | 3541 "frame_function_name"); |
| 3542 | 3542 |
| 3543 // Register a debug event listener which steps and counts. | 3543 // Register a debug event listener which steps and counts. |
| 3544 v8::Debug::SetDebugEventListener(DebugEventStepSequence); | 3544 v8::Debug::SetDebugEventListener(DebugEventStepSequence); |
| 3545 | 3545 |
| 3546 // Create a function for testing stepping. Run it to allow it to get | 3546 // Create a function for testing stepping. Run it to allow it to get |
| (...skipping 29 matching lines...) Expand all Loading... |
| 3576 CHECK_EQ(StrLength(expected_step_sequence), | 3576 CHECK_EQ(StrLength(expected_step_sequence), |
| 3577 break_point_hit_count); | 3577 break_point_hit_count); |
| 3578 | 3578 |
| 3579 // Get rid of the debug event listener. | 3579 // Get rid of the debug event listener. |
| 3580 v8::Debug::SetDebugEventListener(NULL); | 3580 v8::Debug::SetDebugEventListener(NULL); |
| 3581 CheckDebuggerUnloaded(); | 3581 CheckDebuggerUnloaded(); |
| 3582 } | 3582 } |
| 3583 | 3583 |
| 3584 | 3584 |
| 3585 TEST(StepInOutTree) { | 3585 TEST(StepInOutTree) { |
| 3586 v8::HandleScope scope; | |
| 3587 DebugLocalContext env; | 3586 DebugLocalContext env; |
| 3587 v8::HandleScope scope(env->GetIsolate()); |
| 3588 | 3588 |
| 3589 // Create a function for checking the function when hitting a break point. | 3589 // Create a function for checking the function when hitting a break point. |
| 3590 frame_function_name = CompileFunction(&env, | 3590 frame_function_name = CompileFunction(&env, |
| 3591 frame_function_name_source, | 3591 frame_function_name_source, |
| 3592 "frame_function_name"); | 3592 "frame_function_name"); |
| 3593 | 3593 |
| 3594 // Register a debug event listener which steps and counts. | 3594 // Register a debug event listener which steps and counts. |
| 3595 v8::Debug::SetDebugEventListener(DebugEventStepSequence); | 3595 v8::Debug::SetDebugEventListener(DebugEventStepSequence); |
| 3596 | 3596 |
| 3597 // Create a function for testing stepping. Run it to allow it to get | 3597 // Create a function for testing stepping. Run it to allow it to get |
| (...skipping 30 matching lines...) Expand all Loading... |
| 3628 CHECK_EQ(StrLength(expected_step_sequence), | 3628 CHECK_EQ(StrLength(expected_step_sequence), |
| 3629 break_point_hit_count); | 3629 break_point_hit_count); |
| 3630 | 3630 |
| 3631 // Get rid of the debug event listener. | 3631 // Get rid of the debug event listener. |
| 3632 v8::Debug::SetDebugEventListener(NULL); | 3632 v8::Debug::SetDebugEventListener(NULL); |
| 3633 CheckDebuggerUnloaded(true); | 3633 CheckDebuggerUnloaded(true); |
| 3634 } | 3634 } |
| 3635 | 3635 |
| 3636 | 3636 |
| 3637 TEST(StepInOutBranch) { | 3637 TEST(StepInOutBranch) { |
| 3638 v8::HandleScope scope; | |
| 3639 DebugLocalContext env; | 3638 DebugLocalContext env; |
| 3639 v8::HandleScope scope(env->GetIsolate()); |
| 3640 | 3640 |
| 3641 // Create a function for checking the function when hitting a break point. | 3641 // Create a function for checking the function when hitting a break point. |
| 3642 frame_function_name = CompileFunction(&env, | 3642 frame_function_name = CompileFunction(&env, |
| 3643 frame_function_name_source, | 3643 frame_function_name_source, |
| 3644 "frame_function_name"); | 3644 "frame_function_name"); |
| 3645 | 3645 |
| 3646 // Register a debug event listener which steps and counts. | 3646 // Register a debug event listener which steps and counts. |
| 3647 v8::Debug::SetDebugEventListener(DebugEventStepSequence); | 3647 v8::Debug::SetDebugEventListener(DebugEventStepSequence); |
| 3648 | 3648 |
| 3649 // Create a function for testing stepping. Run it to allow it to get | 3649 // Create a function for testing stepping. Run it to allow it to get |
| (...skipping 14 matching lines...) Expand all Loading... |
| 3664 break_point_hit_count); | 3664 break_point_hit_count); |
| 3665 | 3665 |
| 3666 // Get rid of the debug event listener. | 3666 // Get rid of the debug event listener. |
| 3667 v8::Debug::SetDebugEventListener(NULL); | 3667 v8::Debug::SetDebugEventListener(NULL); |
| 3668 CheckDebuggerUnloaded(); | 3668 CheckDebuggerUnloaded(); |
| 3669 } | 3669 } |
| 3670 | 3670 |
| 3671 | 3671 |
| 3672 // Test that step in does not step into native functions. | 3672 // Test that step in does not step into native functions. |
| 3673 TEST(DebugStepNatives) { | 3673 TEST(DebugStepNatives) { |
| 3674 v8::HandleScope scope; | |
| 3675 DebugLocalContext env; | 3674 DebugLocalContext env; |
| 3675 v8::HandleScope scope(env->GetIsolate()); |
| 3676 | 3676 |
| 3677 // Create a function for testing stepping. | 3677 // Create a function for testing stepping. |
| 3678 v8::Local<v8::Function> foo = CompileFunction( | 3678 v8::Local<v8::Function> foo = CompileFunction( |
| 3679 &env, | 3679 &env, |
| 3680 "function foo(){debugger;Math.sin(1);}", | 3680 "function foo(){debugger;Math.sin(1);}", |
| 3681 "foo"); | 3681 "foo"); |
| 3682 | 3682 |
| 3683 // Register a debug event listener which steps and counts. | 3683 // Register a debug event listener which steps and counts. |
| 3684 v8::Debug::SetDebugEventListener(DebugEventStep); | 3684 v8::Debug::SetDebugEventListener(DebugEventStep); |
| 3685 | 3685 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 3702 // Without stepping only active break points are hit. | 3702 // Without stepping only active break points are hit. |
| 3703 CHECK_EQ(1, break_point_hit_count); | 3703 CHECK_EQ(1, break_point_hit_count); |
| 3704 | 3704 |
| 3705 v8::Debug::SetDebugEventListener(NULL); | 3705 v8::Debug::SetDebugEventListener(NULL); |
| 3706 CheckDebuggerUnloaded(); | 3706 CheckDebuggerUnloaded(); |
| 3707 } | 3707 } |
| 3708 | 3708 |
| 3709 | 3709 |
| 3710 // Test that step in works with function.apply. | 3710 // Test that step in works with function.apply. |
| 3711 TEST(DebugStepFunctionApply) { | 3711 TEST(DebugStepFunctionApply) { |
| 3712 v8::HandleScope scope; | |
| 3713 DebugLocalContext env; | 3712 DebugLocalContext env; |
| 3713 v8::HandleScope scope(env->GetIsolate()); |
| 3714 | 3714 |
| 3715 // Create a function for testing stepping. | 3715 // Create a function for testing stepping. |
| 3716 v8::Local<v8::Function> foo = CompileFunction( | 3716 v8::Local<v8::Function> foo = CompileFunction( |
| 3717 &env, | 3717 &env, |
| 3718 "function bar(x, y, z) { if (x == 1) { a = y; b = z; } }" | 3718 "function bar(x, y, z) { if (x == 1) { a = y; b = z; } }" |
| 3719 "function foo(){ debugger; bar.apply(this, [1,2,3]); }", | 3719 "function foo(){ debugger; bar.apply(this, [1,2,3]); }", |
| 3720 "foo"); | 3720 "foo"); |
| 3721 | 3721 |
| 3722 // Register a debug event listener which steps and counts. | 3722 // Register a debug event listener which steps and counts. |
| 3723 v8::Debug::SetDebugEventListener(DebugEventStep); | 3723 v8::Debug::SetDebugEventListener(DebugEventStep); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 3741 // Without stepping only the debugger statement is hit. | 3741 // Without stepping only the debugger statement is hit. |
| 3742 CHECK_EQ(1, break_point_hit_count); | 3742 CHECK_EQ(1, break_point_hit_count); |
| 3743 | 3743 |
| 3744 v8::Debug::SetDebugEventListener(NULL); | 3744 v8::Debug::SetDebugEventListener(NULL); |
| 3745 CheckDebuggerUnloaded(); | 3745 CheckDebuggerUnloaded(); |
| 3746 } | 3746 } |
| 3747 | 3747 |
| 3748 | 3748 |
| 3749 // Test that step in works with function.call. | 3749 // Test that step in works with function.call. |
| 3750 TEST(DebugStepFunctionCall) { | 3750 TEST(DebugStepFunctionCall) { |
| 3751 v8::HandleScope scope; | |
| 3752 DebugLocalContext env; | 3751 DebugLocalContext env; |
| 3752 v8::HandleScope scope(env->GetIsolate()); |
| 3753 | 3753 |
| 3754 // Create a function for testing stepping. | 3754 // Create a function for testing stepping. |
| 3755 v8::Local<v8::Function> foo = CompileFunction( | 3755 v8::Local<v8::Function> foo = CompileFunction( |
| 3756 &env, | 3756 &env, |
| 3757 "function bar(x, y, z) { if (x == 1) { a = y; b = z; } }" | 3757 "function bar(x, y, z) { if (x == 1) { a = y; b = z; } }" |
| 3758 "function foo(a){ debugger;" | 3758 "function foo(a){ debugger;" |
| 3759 " if (a) {" | 3759 " if (a) {" |
| 3760 " bar.call(this, 1, 2, 3);" | 3760 " bar.call(this, 1, 2, 3);" |
| 3761 " } else {" | 3761 " } else {" |
| 3762 " bar.call(this, 0);" | 3762 " bar.call(this, 0);" |
| (...skipping 29 matching lines...) Expand all Loading... |
| 3792 // Without stepping only the debugger statement is hit. | 3792 // Without stepping only the debugger statement is hit. |
| 3793 CHECK_EQ(1, break_point_hit_count); | 3793 CHECK_EQ(1, break_point_hit_count); |
| 3794 | 3794 |
| 3795 v8::Debug::SetDebugEventListener(NULL); | 3795 v8::Debug::SetDebugEventListener(NULL); |
| 3796 CheckDebuggerUnloaded(); | 3796 CheckDebuggerUnloaded(); |
| 3797 } | 3797 } |
| 3798 | 3798 |
| 3799 | 3799 |
| 3800 // Tests that breakpoint will be hit if it's set in script. | 3800 // Tests that breakpoint will be hit if it's set in script. |
| 3801 TEST(PauseInScript) { | 3801 TEST(PauseInScript) { |
| 3802 v8::HandleScope scope; | |
| 3803 DebugLocalContext env; | 3802 DebugLocalContext env; |
| 3803 v8::HandleScope scope(env->GetIsolate()); |
| 3804 env.ExposeDebug(); | 3804 env.ExposeDebug(); |
| 3805 | 3805 |
| 3806 // Register a debug event listener which counts. | 3806 // Register a debug event listener which counts. |
| 3807 v8::Debug::SetDebugEventListener(DebugEventCounter); | 3807 v8::Debug::SetDebugEventListener(DebugEventCounter); |
| 3808 | 3808 |
| 3809 // Create a script that returns a function. | 3809 // Create a script that returns a function. |
| 3810 const char* src = "(function (evt) {})"; | 3810 const char* src = "(function (evt) {})"; |
| 3811 const char* script_name = "StepInHandlerTest"; | 3811 const char* script_name = "StepInHandlerTest"; |
| 3812 | 3812 |
| 3813 // Set breakpoint in the script. | 3813 // Set breakpoint in the script. |
| (...skipping 14 matching lines...) Expand all Loading... |
| 3828 } | 3828 } |
| 3829 | 3829 |
| 3830 | 3830 |
| 3831 // Test break on exceptions. For each exception break combination the number | 3831 // Test break on exceptions. For each exception break combination the number |
| 3832 // of debug event exception callbacks and message callbacks are collected. The | 3832 // of debug event exception callbacks and message callbacks are collected. The |
| 3833 // number of debug event exception callbacks are used to check that the | 3833 // number of debug event exception callbacks are used to check that the |
| 3834 // debugger is called correctly and the number of message callbacks is used to | 3834 // debugger is called correctly and the number of message callbacks is used to |
| 3835 // check that uncaught exceptions are still returned even if there is a break | 3835 // check that uncaught exceptions are still returned even if there is a break |
| 3836 // for them. | 3836 // for them. |
| 3837 TEST(BreakOnException) { | 3837 TEST(BreakOnException) { |
| 3838 v8::HandleScope scope; | |
| 3839 DebugLocalContext env; | 3838 DebugLocalContext env; |
| 3839 v8::HandleScope scope(env->GetIsolate()); |
| 3840 env.ExposeDebug(); | 3840 env.ExposeDebug(); |
| 3841 | 3841 |
| 3842 v8::internal::Isolate::Current()->TraceException(false); | 3842 v8::internal::Isolate::Current()->TraceException(false); |
| 3843 | 3843 |
| 3844 // Create functions for testing break on exception. | 3844 // Create functions for testing break on exception. |
| 3845 CompileFunction(&env, "function throws(){throw 1;}", "throws"); | 3845 CompileFunction(&env, "function throws(){throw 1;}", "throws"); |
| 3846 v8::Local<v8::Function> caught = | 3846 v8::Local<v8::Function> caught = |
| 3847 CompileFunction(&env, | 3847 CompileFunction(&env, |
| 3848 "function caught(){try {throws();} catch(e) {};}", | 3848 "function caught(){try {throws();} catch(e) {};}", |
| 3849 "caught"); | 3849 "caught"); |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3972 v8::Debug::SetDebugEventListener(NULL); | 3972 v8::Debug::SetDebugEventListener(NULL); |
| 3973 CheckDebuggerUnloaded(); | 3973 CheckDebuggerUnloaded(); |
| 3974 v8::V8::RemoveMessageListeners(MessageCallbackCount); | 3974 v8::V8::RemoveMessageListeners(MessageCallbackCount); |
| 3975 } | 3975 } |
| 3976 | 3976 |
| 3977 | 3977 |
| 3978 // Test break on exception from compiler errors. When compiling using | 3978 // Test break on exception from compiler errors. When compiling using |
| 3979 // v8::Script::Compile there is no JavaScript stack whereas when compiling using | 3979 // v8::Script::Compile there is no JavaScript stack whereas when compiling using |
| 3980 // eval there are JavaScript frames. | 3980 // eval there are JavaScript frames. |
| 3981 TEST(BreakOnCompileException) { | 3981 TEST(BreakOnCompileException) { |
| 3982 v8::HandleScope scope; | |
| 3983 DebugLocalContext env; | 3982 DebugLocalContext env; |
| 3983 v8::HandleScope scope(env->GetIsolate()); |
| 3984 | 3984 |
| 3985 // For this test, we want to break on uncaught exceptions: | 3985 // For this test, we want to break on uncaught exceptions: |
| 3986 ChangeBreakOnException(false, true); | 3986 ChangeBreakOnException(false, true); |
| 3987 | 3987 |
| 3988 v8::internal::Isolate::Current()->TraceException(false); | 3988 v8::internal::Isolate::Current()->TraceException(false); |
| 3989 | 3989 |
| 3990 // Create a function for checking the function when hitting a break point. | 3990 // Create a function for checking the function when hitting a break point. |
| 3991 frame_count = CompileFunction(&env, frame_count_source, "frame_count"); | 3991 frame_count = CompileFunction(&env, frame_count_source, "frame_count"); |
| 3992 | 3992 |
| 3993 v8::V8::AddMessageListener(MessageCallbackCount); | 3993 v8::V8::AddMessageListener(MessageCallbackCount); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4026 // Throws SyntaxError: Unexpected identifier | 4026 // Throws SyntaxError: Unexpected identifier |
| 4027 v8::Script::Compile(v8::String::New("eval('x x')"))->Run(); | 4027 v8::Script::Compile(v8::String::New("eval('x x')"))->Run(); |
| 4028 CHECK_EQ(4, exception_hit_count); | 4028 CHECK_EQ(4, exception_hit_count); |
| 4029 CHECK_EQ(4, uncaught_exception_hit_count); | 4029 CHECK_EQ(4, uncaught_exception_hit_count); |
| 4030 CHECK_EQ(4, message_callback_count); | 4030 CHECK_EQ(4, message_callback_count); |
| 4031 CHECK_EQ(1, last_js_stack_height); | 4031 CHECK_EQ(1, last_js_stack_height); |
| 4032 } | 4032 } |
| 4033 | 4033 |
| 4034 | 4034 |
| 4035 TEST(StepWithException) { | 4035 TEST(StepWithException) { |
| 4036 v8::HandleScope scope; | |
| 4037 DebugLocalContext env; | 4036 DebugLocalContext env; |
| 4037 v8::HandleScope scope(env->GetIsolate()); |
| 4038 | 4038 |
| 4039 // For this test, we want to break on uncaught exceptions: | 4039 // For this test, we want to break on uncaught exceptions: |
| 4040 ChangeBreakOnException(false, true); | 4040 ChangeBreakOnException(false, true); |
| 4041 | 4041 |
| 4042 // Create a function for checking the function when hitting a break point. | 4042 // Create a function for checking the function when hitting a break point. |
| 4043 frame_function_name = CompileFunction(&env, | 4043 frame_function_name = CompileFunction(&env, |
| 4044 frame_function_name_source, | 4044 frame_function_name_source, |
| 4045 "frame_function_name"); | 4045 "frame_function_name"); |
| 4046 | 4046 |
| 4047 // Register a debug event listener which steps and counts. | 4047 // Register a debug event listener which steps and counts. |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4119 // Get rid of the debug event listener. | 4119 // Get rid of the debug event listener. |
| 4120 v8::Debug::SetDebugEventListener(NULL); | 4120 v8::Debug::SetDebugEventListener(NULL); |
| 4121 CheckDebuggerUnloaded(); | 4121 CheckDebuggerUnloaded(); |
| 4122 } | 4122 } |
| 4123 | 4123 |
| 4124 | 4124 |
| 4125 TEST(DebugBreak) { | 4125 TEST(DebugBreak) { |
| 4126 #ifdef VERIFY_HEAP | 4126 #ifdef VERIFY_HEAP |
| 4127 i::FLAG_verify_heap = true; | 4127 i::FLAG_verify_heap = true; |
| 4128 #endif | 4128 #endif |
| 4129 v8::HandleScope scope; | |
| 4130 DebugLocalContext env; | 4129 DebugLocalContext env; |
| 4130 v8::HandleScope scope(env->GetIsolate()); |
| 4131 | 4131 |
| 4132 // Register a debug event listener which sets the break flag and counts. | 4132 // Register a debug event listener which sets the break flag and counts. |
| 4133 v8::Debug::SetDebugEventListener(DebugEventBreak); | 4133 v8::Debug::SetDebugEventListener(DebugEventBreak); |
| 4134 | 4134 |
| 4135 // Create a function for testing stepping. | 4135 // Create a function for testing stepping. |
| 4136 const char* src = "function f0() {}" | 4136 const char* src = "function f0() {}" |
| 4137 "function f1(x1) {}" | 4137 "function f1(x1) {}" |
| 4138 "function f2(x1,x2) {}" | 4138 "function f2(x1,x2) {}" |
| 4139 "function f3(x1,x2,x3) {}"; | 4139 "function f3(x1,x2,x3) {}"; |
| 4140 v8::Local<v8::Function> f0 = CompileFunction(&env, src, "f0"); | 4140 v8::Local<v8::Function> f0 = CompileFunction(&env, src, "f0"); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 4171 | 4171 |
| 4172 // Get rid of the debug event listener. | 4172 // Get rid of the debug event listener. |
| 4173 v8::Debug::SetDebugEventListener(NULL); | 4173 v8::Debug::SetDebugEventListener(NULL); |
| 4174 CheckDebuggerUnloaded(); | 4174 CheckDebuggerUnloaded(); |
| 4175 } | 4175 } |
| 4176 | 4176 |
| 4177 | 4177 |
| 4178 // Test to ensure that JavaScript code keeps running while the debug break | 4178 // Test to ensure that JavaScript code keeps running while the debug break |
| 4179 // through the stack limit flag is set but breaks are disabled. | 4179 // through the stack limit flag is set but breaks are disabled. |
| 4180 TEST(DisableBreak) { | 4180 TEST(DisableBreak) { |
| 4181 v8::HandleScope scope; | |
| 4182 DebugLocalContext env; | 4181 DebugLocalContext env; |
| 4182 v8::HandleScope scope(env->GetIsolate()); |
| 4183 | 4183 |
| 4184 // Register a debug event listener which sets the break flag and counts. | 4184 // Register a debug event listener which sets the break flag and counts. |
| 4185 v8::Debug::SetDebugEventListener(DebugEventCounter); | 4185 v8::Debug::SetDebugEventListener(DebugEventCounter); |
| 4186 | 4186 |
| 4187 // Create a function for testing stepping. | 4187 // Create a function for testing stepping. |
| 4188 const char* src = "function f() {g()};function g(){i=0; while(i<10){i++}}"; | 4188 const char* src = "function f() {g()};function g(){i=0; while(i<10){i++}}"; |
| 4189 v8::Local<v8::Function> f = CompileFunction(&env, src, "f"); | 4189 v8::Local<v8::Function> f = CompileFunction(&env, src, "f"); |
| 4190 | 4190 |
| 4191 // Set the debug break flag. | 4191 // Set the debug break flag. |
| 4192 v8::Debug::DebugBreak(); | 4192 v8::Debug::DebugBreak(); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 4212 } | 4212 } |
| 4213 | 4213 |
| 4214 static const char* kSimpleExtensionSource = | 4214 static const char* kSimpleExtensionSource = |
| 4215 "(function Foo() {" | 4215 "(function Foo() {" |
| 4216 " return 4;" | 4216 " return 4;" |
| 4217 "})() "; | 4217 "})() "; |
| 4218 | 4218 |
| 4219 // http://crbug.com/28933 | 4219 // http://crbug.com/28933 |
| 4220 // Test that debug break is disabled when bootstrapper is active. | 4220 // Test that debug break is disabled when bootstrapper is active. |
| 4221 TEST(NoBreakWhenBootstrapping) { | 4221 TEST(NoBreakWhenBootstrapping) { |
| 4222 v8::HandleScope scope; | 4222 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
| 4223 | 4223 |
| 4224 // Register a debug event listener which sets the break flag and counts. | 4224 // Register a debug event listener which sets the break flag and counts. |
| 4225 v8::Debug::SetDebugEventListener(DebugEventCounter); | 4225 v8::Debug::SetDebugEventListener(DebugEventCounter); |
| 4226 | 4226 |
| 4227 // Set the debug break flag. | 4227 // Set the debug break flag. |
| 4228 v8::Debug::DebugBreak(); | 4228 v8::Debug::DebugBreak(); |
| 4229 break_point_hit_count = 0; | 4229 break_point_hit_count = 0; |
| 4230 { | 4230 { |
| 4231 // Create a context with an extension to make sure that some JavaScript | 4231 // Create a context with an extension to make sure that some JavaScript |
| 4232 // code is executed during bootstrapping. | 4232 // code is executed during bootstrapping. |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4280 | 4280 |
| 4281 | 4281 |
| 4282 static v8::Handle<v8::Value> IndexedGetter(uint32_t index, | 4282 static v8::Handle<v8::Value> IndexedGetter(uint32_t index, |
| 4283 const v8::AccessorInfo& info) { | 4283 const v8::AccessorInfo& info) { |
| 4284 return v8::Number::New(index + 1); | 4284 return v8::Number::New(index + 1); |
| 4285 } | 4285 } |
| 4286 | 4286 |
| 4287 | 4287 |
| 4288 TEST(InterceptorPropertyMirror) { | 4288 TEST(InterceptorPropertyMirror) { |
| 4289 // Create a V8 environment with debug access. | 4289 // Create a V8 environment with debug access. |
| 4290 v8::HandleScope scope; | |
| 4291 DebugLocalContext env; | 4290 DebugLocalContext env; |
| 4291 v8::HandleScope scope(env->GetIsolate()); |
| 4292 env.ExposeDebug(); | 4292 env.ExposeDebug(); |
| 4293 | 4293 |
| 4294 // Create object with named interceptor. | 4294 // Create object with named interceptor. |
| 4295 v8::Handle<v8::ObjectTemplate> named = v8::ObjectTemplate::New(); | 4295 v8::Handle<v8::ObjectTemplate> named = v8::ObjectTemplate::New(); |
| 4296 named->SetNamedPropertyHandler(NamedGetter, NULL, NULL, NULL, NamedEnum); | 4296 named->SetNamedPropertyHandler(NamedGetter, NULL, NULL, NULL, NamedEnum); |
| 4297 env->Global()->Set(v8::String::New("intercepted_named"), | 4297 env->Global()->Set(v8::String::New("intercepted_named"), |
| 4298 named->NewInstance()); | 4298 named->NewInstance()); |
| 4299 | 4299 |
| 4300 // Create object with indexed interceptor. | 4300 // Create object with indexed interceptor. |
| 4301 v8::Handle<v8::ObjectTemplate> indexed = v8::ObjectTemplate::New(); | 4301 v8::Handle<v8::ObjectTemplate> indexed = v8::ObjectTemplate::New(); |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4411 source = "both_values[3].name() == 1"; | 4411 source = "both_values[3].name() == 1"; |
| 4412 CHECK(CompileRun(source)->BooleanValue()); | 4412 CHECK(CompileRun(source)->BooleanValue()); |
| 4413 | 4413 |
| 4414 source = "both_values[4].name() == 10"; | 4414 source = "both_values[4].name() == 10"; |
| 4415 CHECK(CompileRun(source)->BooleanValue()); | 4415 CHECK(CompileRun(source)->BooleanValue()); |
| 4416 } | 4416 } |
| 4417 | 4417 |
| 4418 | 4418 |
| 4419 TEST(HiddenPrototypePropertyMirror) { | 4419 TEST(HiddenPrototypePropertyMirror) { |
| 4420 // Create a V8 environment with debug access. | 4420 // Create a V8 environment with debug access. |
| 4421 v8::HandleScope scope; | |
| 4422 DebugLocalContext env; | 4421 DebugLocalContext env; |
| 4422 v8::HandleScope scope(env->GetIsolate()); |
| 4423 env.ExposeDebug(); | 4423 env.ExposeDebug(); |
| 4424 | 4424 |
| 4425 v8::Handle<v8::FunctionTemplate> t0 = v8::FunctionTemplate::New(); | 4425 v8::Handle<v8::FunctionTemplate> t0 = v8::FunctionTemplate::New(); |
| 4426 t0->InstanceTemplate()->Set(v8::String::New("x"), v8::Number::New(0)); | 4426 t0->InstanceTemplate()->Set(v8::String::New("x"), v8::Number::New(0)); |
| 4427 v8::Handle<v8::FunctionTemplate> t1 = v8::FunctionTemplate::New(); | 4427 v8::Handle<v8::FunctionTemplate> t1 = v8::FunctionTemplate::New(); |
| 4428 t1->SetHiddenPrototype(true); | 4428 t1->SetHiddenPrototype(true); |
| 4429 t1->InstanceTemplate()->Set(v8::String::New("y"), v8::Number::New(1)); | 4429 t1->InstanceTemplate()->Set(v8::String::New("y"), v8::Number::New(1)); |
| 4430 v8::Handle<v8::FunctionTemplate> t2 = v8::FunctionTemplate::New(); | 4430 v8::Handle<v8::FunctionTemplate> t2 = v8::FunctionTemplate::New(); |
| 4431 t2->SetHiddenPrototype(true); | 4431 t2->SetHiddenPrototype(true); |
| 4432 t2->InstanceTemplate()->Set(v8::String::New("z"), v8::Number::New(2)); | 4432 t2->InstanceTemplate()->Set(v8::String::New("z"), v8::Number::New(2)); |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4512 | 4512 |
| 4513 | 4513 |
| 4514 static v8::Handle<v8::Value> ProtperyXNativeGetter( | 4514 static v8::Handle<v8::Value> ProtperyXNativeGetter( |
| 4515 v8::Local<v8::String> property, const v8::AccessorInfo& info) { | 4515 v8::Local<v8::String> property, const v8::AccessorInfo& info) { |
| 4516 return v8::Integer::New(10); | 4516 return v8::Integer::New(10); |
| 4517 } | 4517 } |
| 4518 | 4518 |
| 4519 | 4519 |
| 4520 TEST(NativeGetterPropertyMirror) { | 4520 TEST(NativeGetterPropertyMirror) { |
| 4521 // Create a V8 environment with debug access. | 4521 // Create a V8 environment with debug access. |
| 4522 v8::HandleScope scope; | |
| 4523 DebugLocalContext env; | 4522 DebugLocalContext env; |
| 4523 v8::HandleScope scope(env->GetIsolate()); |
| 4524 env.ExposeDebug(); | 4524 env.ExposeDebug(); |
| 4525 | 4525 |
| 4526 v8::Handle<v8::String> name = v8::String::New("x"); | 4526 v8::Handle<v8::String> name = v8::String::New("x"); |
| 4527 // Create object with named accessor. | 4527 // Create object with named accessor. |
| 4528 v8::Handle<v8::ObjectTemplate> named = v8::ObjectTemplate::New(); | 4528 v8::Handle<v8::ObjectTemplate> named = v8::ObjectTemplate::New(); |
| 4529 named->SetAccessor(name, &ProtperyXNativeGetter, NULL, | 4529 named->SetAccessor(name, &ProtperyXNativeGetter, NULL, |
| 4530 v8::Handle<v8::Value>(), v8::DEFAULT, v8::None); | 4530 v8::Handle<v8::Value>(), v8::DEFAULT, v8::None); |
| 4531 | 4531 |
| 4532 // Create object with named property getter. | 4532 // Create object with named property getter. |
| 4533 env->Global()->Set(v8::String::New("instance"), named->NewInstance()); | 4533 env->Global()->Set(v8::String::New("instance"), named->NewInstance()); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 4549 | 4549 |
| 4550 | 4550 |
| 4551 static v8::Handle<v8::Value> ProtperyXNativeGetterThrowingError( | 4551 static v8::Handle<v8::Value> ProtperyXNativeGetterThrowingError( |
| 4552 v8::Local<v8::String> property, const v8::AccessorInfo& info) { | 4552 v8::Local<v8::String> property, const v8::AccessorInfo& info) { |
| 4553 return CompileRun("throw new Error('Error message');"); | 4553 return CompileRun("throw new Error('Error message');"); |
| 4554 } | 4554 } |
| 4555 | 4555 |
| 4556 | 4556 |
| 4557 TEST(NativeGetterThrowingErrorPropertyMirror) { | 4557 TEST(NativeGetterThrowingErrorPropertyMirror) { |
| 4558 // Create a V8 environment with debug access. | 4558 // Create a V8 environment with debug access. |
| 4559 v8::HandleScope scope; | |
| 4560 DebugLocalContext env; | 4559 DebugLocalContext env; |
| 4560 v8::HandleScope scope(env->GetIsolate()); |
| 4561 env.ExposeDebug(); | 4561 env.ExposeDebug(); |
| 4562 | 4562 |
| 4563 v8::Handle<v8::String> name = v8::String::New("x"); | 4563 v8::Handle<v8::String> name = v8::String::New("x"); |
| 4564 // Create object with named accessor. | 4564 // Create object with named accessor. |
| 4565 v8::Handle<v8::ObjectTemplate> named = v8::ObjectTemplate::New(); | 4565 v8::Handle<v8::ObjectTemplate> named = v8::ObjectTemplate::New(); |
| 4566 named->SetAccessor(name, &ProtperyXNativeGetterThrowingError, NULL, | 4566 named->SetAccessor(name, &ProtperyXNativeGetterThrowingError, NULL, |
| 4567 v8::Handle<v8::Value>(), v8::DEFAULT, v8::None); | 4567 v8::Handle<v8::Value>(), v8::DEFAULT, v8::None); |
| 4568 | 4568 |
| 4569 // Create object with named property getter. | 4569 // Create object with named property getter. |
| 4570 env->Global()->Set(v8::String::New("instance"), named->NewInstance()); | 4570 env->Global()->Set(v8::String::New("instance"), named->NewInstance()); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 4584 "instance_mirror.property('x').value().message() == 'Error message'")-> | 4584 "instance_mirror.property('x').value().message() == 'Error message'")-> |
| 4585 BooleanValue()); | 4585 BooleanValue()); |
| 4586 } | 4586 } |
| 4587 | 4587 |
| 4588 | 4588 |
| 4589 // Test that hidden properties object is not returned as an unnamed property | 4589 // Test that hidden properties object is not returned as an unnamed property |
| 4590 // among regular properties. | 4590 // among regular properties. |
| 4591 // See http://crbug.com/26491 | 4591 // See http://crbug.com/26491 |
| 4592 TEST(NoHiddenProperties) { | 4592 TEST(NoHiddenProperties) { |
| 4593 // Create a V8 environment with debug access. | 4593 // Create a V8 environment with debug access. |
| 4594 v8::HandleScope scope; | |
| 4595 DebugLocalContext env; | 4594 DebugLocalContext env; |
| 4595 v8::HandleScope scope(env->GetIsolate()); |
| 4596 env.ExposeDebug(); | 4596 env.ExposeDebug(); |
| 4597 | 4597 |
| 4598 // Create an object in the global scope. | 4598 // Create an object in the global scope. |
| 4599 const char* source = "var obj = {a: 1};"; | 4599 const char* source = "var obj = {a: 1};"; |
| 4600 v8::Script::Compile(v8::String::New(source))->Run(); | 4600 v8::Script::Compile(v8::String::New(source))->Run(); |
| 4601 v8::Local<v8::Object> obj = v8::Local<v8::Object>::Cast( | 4601 v8::Local<v8::Object> obj = v8::Local<v8::Object>::Cast( |
| 4602 env->Global()->Get(v8::String::New("obj"))); | 4602 env->Global()->Get(v8::String::New("obj"))); |
| 4603 // Set a hidden property on the object. | 4603 // Set a hidden property on the object. |
| 4604 obj->SetHiddenValue(v8::String::New("v8::test-debug::a"), | 4604 obj->SetHiddenValue(v8::String::New("v8::test-debug::a"), |
| 4605 v8::Int32::New(11)); | 4605 v8::Int32::New(11)); |
| (...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4931 } | 4931 } |
| 4932 // Main thread continues running source_3 to end, waits for this thread. | 4932 // Main thread continues running source_3 to end, waits for this thread. |
| 4933 } | 4933 } |
| 4934 | 4934 |
| 4935 | 4935 |
| 4936 // This thread runs the v8 engine. | 4936 // This thread runs the v8 engine. |
| 4937 TEST(MessageQueues) { | 4937 TEST(MessageQueues) { |
| 4938 MessageQueueDebuggerThread message_queue_debugger_thread; | 4938 MessageQueueDebuggerThread message_queue_debugger_thread; |
| 4939 | 4939 |
| 4940 // Create a V8 environment | 4940 // Create a V8 environment |
| 4941 v8::HandleScope scope; | |
| 4942 DebugLocalContext env; | 4941 DebugLocalContext env; |
| 4942 v8::HandleScope scope(env->GetIsolate()); |
| 4943 message_queue_barriers.Initialize(); | 4943 message_queue_barriers.Initialize(); |
| 4944 v8::Debug::SetMessageHandler(MessageHandler); | 4944 v8::Debug::SetMessageHandler(MessageHandler); |
| 4945 message_queue_debugger_thread.Start(); | 4945 message_queue_debugger_thread.Start(); |
| 4946 | 4946 |
| 4947 const char* source_1 = "a = 3; b = 4; c = new Object(); c.d = 5;"; | 4947 const char* source_1 = "a = 3; b = 4; c = new Object(); c.d = 5;"; |
| 4948 const char* source_2 = "e = 17;"; | 4948 const char* source_2 = "e = 17;"; |
| 4949 const char* source_3 = "a = 4; debugger; a = 5; a = 6; a = 7;"; | 4949 const char* source_3 = "a = 4; debugger; a = 5; a = 6; a = 7;"; |
| 4950 | 4950 |
| 4951 // See MessageQueueDebuggerThread::Run for interleaved sequence of | 4951 // See MessageQueueDebuggerThread::Run for interleaved sequence of |
| 4952 // API calls and events in the two threads. | 4952 // API calls and events in the two threads. |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5023 const v8::Debug::Message& message) { | 5023 const v8::Debug::Message& message) { |
| 5024 if (message.GetClientData() != NULL) { | 5024 if (message.GetClientData() != NULL) { |
| 5025 handled_client_data_instances_count++; | 5025 handled_client_data_instances_count++; |
| 5026 } | 5026 } |
| 5027 } | 5027 } |
| 5028 | 5028 |
| 5029 | 5029 |
| 5030 // Tests that all client data passed to the debugger are sent to the handler. | 5030 // Tests that all client data passed to the debugger are sent to the handler. |
| 5031 TEST(SendClientDataToHandler) { | 5031 TEST(SendClientDataToHandler) { |
| 5032 // Create a V8 environment | 5032 // Create a V8 environment |
| 5033 v8::HandleScope scope; | |
| 5034 DebugLocalContext env; | 5033 DebugLocalContext env; |
| 5034 v8::HandleScope scope(env->GetIsolate()); |
| 5035 TestClientData::ResetCounters(); | 5035 TestClientData::ResetCounters(); |
| 5036 handled_client_data_instances_count = 0; | 5036 handled_client_data_instances_count = 0; |
| 5037 v8::Debug::SetMessageHandler2(MessageHandlerCountingClientData); | 5037 v8::Debug::SetMessageHandler2(MessageHandlerCountingClientData); |
| 5038 const char* source_1 = "a = 3; b = 4; c = new Object(); c.d = 5;"; | 5038 const char* source_1 = "a = 3; b = 4; c = new Object(); c.d = 5;"; |
| 5039 const int kBufferSize = 1000; | 5039 const int kBufferSize = 1000; |
| 5040 uint16_t buffer[kBufferSize]; | 5040 uint16_t buffer[kBufferSize]; |
| 5041 const char* command_1 = | 5041 const char* command_1 = |
| 5042 "{\"seq\":117," | 5042 "{\"seq\":117," |
| 5043 "\"type\":\"request\"," | 5043 "\"type\":\"request\"," |
| 5044 "\"command\":\"evaluate\"," | 5044 "\"command\":\"evaluate\"," |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5129 " if ( x == 1 ) {\n" | 5129 " if ( x == 1 ) {\n" |
| 5130 " ThreadedAtBarrier1();\n" | 5130 " ThreadedAtBarrier1();\n" |
| 5131 " }\n" | 5131 " }\n" |
| 5132 " x = x + 1;\n" | 5132 " x = x + 1;\n" |
| 5133 " }\n" | 5133 " }\n" |
| 5134 "}\n" | 5134 "}\n" |
| 5135 "\n" | 5135 "\n" |
| 5136 "foo();\n"; | 5136 "foo();\n"; |
| 5137 | 5137 |
| 5138 v8::V8::Initialize(); | 5138 v8::V8::Initialize(); |
| 5139 v8::HandleScope scope; | |
| 5140 DebugLocalContext env; | 5139 DebugLocalContext env; |
| 5140 v8::HandleScope scope(env->GetIsolate()); |
| 5141 v8::Debug::SetMessageHandler2(&ThreadedMessageHandler); | 5141 v8::Debug::SetMessageHandler2(&ThreadedMessageHandler); |
| 5142 v8::Handle<v8::ObjectTemplate> global_template = v8::ObjectTemplate::New(); | 5142 v8::Handle<v8::ObjectTemplate> global_template = v8::ObjectTemplate::New(); |
| 5143 global_template->Set(v8::String::New("ThreadedAtBarrier1"), | 5143 global_template->Set(v8::String::New("ThreadedAtBarrier1"), |
| 5144 v8::FunctionTemplate::New(ThreadedAtBarrier1)); | 5144 v8::FunctionTemplate::New(ThreadedAtBarrier1)); |
| 5145 v8::Handle<v8::Context> context = v8::Context::New(NULL, global_template); | 5145 v8::Handle<v8::Context> context = v8::Context::New(NULL, global_template); |
| 5146 v8::Context::Scope context_scope(context); | 5146 v8::Context::Scope context_scope(context); |
| 5147 | 5147 |
| 5148 CompileRun(source); | 5148 CompileRun(source); |
| 5149 } | 5149 } |
| 5150 | 5150 |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5242 " x = y_global;" | 5242 " x = y_global;" |
| 5243 " var z = 3;" | 5243 " var z = 3;" |
| 5244 " x += 100;\n" | 5244 " x += 100;\n" |
| 5245 " return x;\n" | 5245 " return x;\n" |
| 5246 "}\n" | 5246 "}\n" |
| 5247 "\n"; | 5247 "\n"; |
| 5248 const char* source_2 = "cat(17);\n" | 5248 const char* source_2 = "cat(17);\n" |
| 5249 "cat(19);\n"; | 5249 "cat(19);\n"; |
| 5250 | 5250 |
| 5251 v8::V8::Initialize(); | 5251 v8::V8::Initialize(); |
| 5252 v8::HandleScope scope; | |
| 5253 DebugLocalContext env; | 5252 DebugLocalContext env; |
| 5253 v8::HandleScope scope(env->GetIsolate()); |
| 5254 v8::Debug::SetMessageHandler2(&BreakpointsMessageHandler); | 5254 v8::Debug::SetMessageHandler2(&BreakpointsMessageHandler); |
| 5255 | 5255 |
| 5256 CompileRun(source_1); | 5256 CompileRun(source_1); |
| 5257 breakpoints_barriers->barrier_1.Wait(); | 5257 breakpoints_barriers->barrier_1.Wait(); |
| 5258 breakpoints_barriers->barrier_2.Wait(); | 5258 breakpoints_barriers->barrier_2.Wait(); |
| 5259 CompileRun(source_2); | 5259 CompileRun(source_2); |
| 5260 } | 5260 } |
| 5261 | 5261 |
| 5262 | 5262 |
| 5263 void BreakpointsDebuggerThread::Run() { | 5263 void BreakpointsDebuggerThread::Run() { |
| (...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5501 CHECK(v8::Debug::Call(debugger_call_with_closure)->IsNumber()); | 5501 CHECK(v8::Debug::Call(debugger_call_with_closure)->IsNumber()); |
| 5502 CHECK_EQ(3, v8::Debug::Call(debugger_call_with_closure)->Int32Value()); | 5502 CHECK_EQ(3, v8::Debug::Call(debugger_call_with_closure)->Int32Value()); |
| 5503 return v8::Undefined(); | 5503 return v8::Undefined(); |
| 5504 } | 5504 } |
| 5505 | 5505 |
| 5506 | 5506 |
| 5507 // Test functions called through the debugger. | 5507 // Test functions called through the debugger. |
| 5508 TEST(CallFunctionInDebugger) { | 5508 TEST(CallFunctionInDebugger) { |
| 5509 // Create and enter a context with the functions CheckFrameCount, | 5509 // Create and enter a context with the functions CheckFrameCount, |
| 5510 // CheckSourceLine and CheckDataParameter installed. | 5510 // CheckSourceLine and CheckDataParameter installed. |
| 5511 v8::HandleScope scope; | 5511 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
| 5512 v8::Handle<v8::ObjectTemplate> global_template = v8::ObjectTemplate::New(); | 5512 v8::Handle<v8::ObjectTemplate> global_template = v8::ObjectTemplate::New(); |
| 5513 global_template->Set(v8::String::New("CheckFrameCount"), | 5513 global_template->Set(v8::String::New("CheckFrameCount"), |
| 5514 v8::FunctionTemplate::New(CheckFrameCount)); | 5514 v8::FunctionTemplate::New(CheckFrameCount)); |
| 5515 global_template->Set(v8::String::New("CheckSourceLine"), | 5515 global_template->Set(v8::String::New("CheckSourceLine"), |
| 5516 v8::FunctionTemplate::New(CheckSourceLine)); | 5516 v8::FunctionTemplate::New(CheckSourceLine)); |
| 5517 global_template->Set(v8::String::New("CheckDataParameter"), | 5517 global_template->Set(v8::String::New("CheckDataParameter"), |
| 5518 v8::FunctionTemplate::New(CheckDataParameter)); | 5518 v8::FunctionTemplate::New(CheckDataParameter)); |
| 5519 global_template->Set(v8::String::New("CheckClosure"), | 5519 global_template->Set(v8::String::New("CheckClosure"), |
| 5520 v8::FunctionTemplate::New(CheckClosure)); | 5520 v8::FunctionTemplate::New(CheckClosure)); |
| 5521 v8::Handle<v8::Context> context = v8::Context::New(NULL, global_template); | 5521 v8::Handle<v8::Context> context = v8::Context::New(NULL, global_template); |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5597 DebugLocalContext env; | 5597 DebugLocalContext env; |
| 5598 | 5598 |
| 5599 // Check debugger is unloaded before it is used. | 5599 // Check debugger is unloaded before it is used. |
| 5600 CheckDebuggerUnloaded(); | 5600 CheckDebuggerUnloaded(); |
| 5601 | 5601 |
| 5602 // Set a debug event listener. | 5602 // Set a debug event listener. |
| 5603 break_point_hit_count = 0; | 5603 break_point_hit_count = 0; |
| 5604 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, | 5604 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, |
| 5605 v8::Undefined()); | 5605 v8::Undefined()); |
| 5606 { | 5606 { |
| 5607 v8::HandleScope scope; | 5607 v8::HandleScope scope(env->GetIsolate()); |
| 5608 // Create a couple of functions for the test. | 5608 // Create a couple of functions for the test. |
| 5609 v8::Local<v8::Function> foo = | 5609 v8::Local<v8::Function> foo = |
| 5610 CompileFunction(&env, "function foo(){x=1}", "foo"); | 5610 CompileFunction(&env, "function foo(){x=1}", "foo"); |
| 5611 v8::Local<v8::Function> bar = | 5611 v8::Local<v8::Function> bar = |
| 5612 CompileFunction(&env, "function bar(){y=2}", "bar"); | 5612 CompileFunction(&env, "function bar(){y=2}", "bar"); |
| 5613 | 5613 |
| 5614 // Set some break points. | 5614 // Set some break points. |
| 5615 SetBreakPoint(foo, 0); | 5615 SetBreakPoint(foo, 0); |
| 5616 SetBreakPoint(foo, 4); | 5616 SetBreakPoint(foo, 4); |
| 5617 SetBreakPoint(bar, 0); | 5617 SetBreakPoint(bar, 0); |
| 5618 SetBreakPoint(bar, 4); | 5618 SetBreakPoint(bar, 4); |
| 5619 | 5619 |
| 5620 // Make sure that the break points are there. | 5620 // Make sure that the break points are there. |
| 5621 break_point_hit_count = 0; | 5621 break_point_hit_count = 0; |
| 5622 foo->Call(env->Global(), 0, NULL); | 5622 foo->Call(env->Global(), 0, NULL); |
| 5623 CHECK_EQ(2, break_point_hit_count); | 5623 CHECK_EQ(2, break_point_hit_count); |
| 5624 bar->Call(env->Global(), 0, NULL); | 5624 bar->Call(env->Global(), 0, NULL); |
| 5625 CHECK_EQ(4, break_point_hit_count); | 5625 CHECK_EQ(4, break_point_hit_count); |
| 5626 } | 5626 } |
| 5627 | 5627 |
| 5628 // Remove the debug event listener without clearing breakpoints. Do this | 5628 // Remove the debug event listener without clearing breakpoints. Do this |
| 5629 // outside a handle scope. | 5629 // outside a handle scope. |
| 5630 v8::Debug::SetDebugEventListener(NULL); | 5630 v8::Debug::SetDebugEventListener(NULL); |
| 5631 CheckDebuggerUnloaded(true); | 5631 CheckDebuggerUnloaded(true); |
| 5632 | 5632 |
| 5633 // Now set a debug message handler. | 5633 // Now set a debug message handler. |
| 5634 break_point_hit_count = 0; | 5634 break_point_hit_count = 0; |
| 5635 v8::Debug::SetMessageHandler2(MessageHandlerBreakPointHitCount); | 5635 v8::Debug::SetMessageHandler2(MessageHandlerBreakPointHitCount); |
| 5636 { | 5636 { |
| 5637 v8::HandleScope scope; | 5637 v8::HandleScope scope(env->GetIsolate()); |
| 5638 | 5638 |
| 5639 // Get the test functions again. | 5639 // Get the test functions again. |
| 5640 v8::Local<v8::Function> foo(v8::Local<v8::Function>::Cast( | 5640 v8::Local<v8::Function> foo(v8::Local<v8::Function>::Cast( |
| 5641 env->Global()->Get(v8::String::New("foo")))); | 5641 env->Global()->Get(v8::String::New("foo")))); |
| 5642 | 5642 |
| 5643 foo->Call(env->Global(), 0, NULL); | 5643 foo->Call(env->Global(), 0, NULL); |
| 5644 CHECK_EQ(0, break_point_hit_count); | 5644 CHECK_EQ(0, break_point_hit_count); |
| 5645 | 5645 |
| 5646 // Set break points and run again. | 5646 // Set break points and run again. |
| 5647 SetBreakPoint(foo, 0); | 5647 SetBreakPoint(foo, 0); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5680 Utf16ToAscii(*json, json.length(), print_buffer); | 5680 Utf16ToAscii(*json, json.length(), print_buffer); |
| 5681 if (IsExceptionEventMessage(print_buffer)) { | 5681 if (IsExceptionEventMessage(print_buffer)) { |
| 5682 // Send a continue command for exception events. | 5682 // Send a continue command for exception events. |
| 5683 SendContinueCommand(); | 5683 SendContinueCommand(); |
| 5684 } | 5684 } |
| 5685 } | 5685 } |
| 5686 | 5686 |
| 5687 | 5687 |
| 5688 // Test clearing the debug message handler. | 5688 // Test clearing the debug message handler. |
| 5689 TEST(DebuggerClearMessageHandler) { | 5689 TEST(DebuggerClearMessageHandler) { |
| 5690 v8::HandleScope scope; | |
| 5691 DebugLocalContext env; | 5690 DebugLocalContext env; |
| 5691 v8::HandleScope scope(env->GetIsolate()); |
| 5692 | 5692 |
| 5693 // Check debugger is unloaded before it is used. | 5693 // Check debugger is unloaded before it is used. |
| 5694 CheckDebuggerUnloaded(); | 5694 CheckDebuggerUnloaded(); |
| 5695 | 5695 |
| 5696 // Set a debug message handler. | 5696 // Set a debug message handler. |
| 5697 v8::Debug::SetMessageHandler2(MessageHandlerHitCount); | 5697 v8::Debug::SetMessageHandler2(MessageHandlerHitCount); |
| 5698 | 5698 |
| 5699 // Run code to throw a unhandled exception. This should end up in the message | 5699 // Run code to throw a unhandled exception. This should end up in the message |
| 5700 // handler. | 5700 // handler. |
| 5701 CompileRun("throw 1"); | 5701 CompileRun("throw 1"); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 5723 const v8::Debug::Message& message) { | 5723 const v8::Debug::Message& message) { |
| 5724 message_handler_hit_count++; | 5724 message_handler_hit_count++; |
| 5725 | 5725 |
| 5726 // Clear debug message handler. | 5726 // Clear debug message handler. |
| 5727 v8::Debug::SetMessageHandler(NULL); | 5727 v8::Debug::SetMessageHandler(NULL); |
| 5728 } | 5728 } |
| 5729 | 5729 |
| 5730 | 5730 |
| 5731 // Test clearing the debug message handler while processing a debug event. | 5731 // Test clearing the debug message handler while processing a debug event. |
| 5732 TEST(DebuggerClearMessageHandlerWhileActive) { | 5732 TEST(DebuggerClearMessageHandlerWhileActive) { |
| 5733 v8::HandleScope scope; | |
| 5734 DebugLocalContext env; | 5733 DebugLocalContext env; |
| 5734 v8::HandleScope scope(env->GetIsolate()); |
| 5735 | 5735 |
| 5736 // Check debugger is unloaded before it is used. | 5736 // Check debugger is unloaded before it is used. |
| 5737 CheckDebuggerUnloaded(); | 5737 CheckDebuggerUnloaded(); |
| 5738 | 5738 |
| 5739 // Set a debug message handler. | 5739 // Set a debug message handler. |
| 5740 v8::Debug::SetMessageHandler2(MessageHandlerClearingMessageHandler); | 5740 v8::Debug::SetMessageHandler2(MessageHandlerClearingMessageHandler); |
| 5741 | 5741 |
| 5742 // Run code to throw a unhandled exception. This should end up in the message | 5742 // Run code to throw a unhandled exception. This should end up in the message |
| 5743 // handler. | 5743 // handler. |
| 5744 CompileRun("throw 1"); | 5744 CompileRun("throw 1"); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5787 " var x = new_value;\n" | 5787 " var x = new_value;\n" |
| 5788 " y_global = 4;\n" | 5788 " y_global = 4;\n" |
| 5789 " x = 3 * x + 1;\n" | 5789 " x = 3 * x + 1;\n" |
| 5790 " y_global = 5;\n" | 5790 " y_global = 5;\n" |
| 5791 " return x;\n" | 5791 " return x;\n" |
| 5792 "}\n" | 5792 "}\n" |
| 5793 "\n"; | 5793 "\n"; |
| 5794 const char* source_2 = "cat(17);\n"; | 5794 const char* source_2 = "cat(17);\n"; |
| 5795 | 5795 |
| 5796 v8::V8::Initialize(); | 5796 v8::V8::Initialize(); |
| 5797 v8::HandleScope scope; | |
| 5798 DebugLocalContext env; | 5797 DebugLocalContext env; |
| 5798 v8::HandleScope scope(env->GetIsolate()); |
| 5799 | 5799 |
| 5800 // Set up message and host dispatch handlers. | 5800 // Set up message and host dispatch handlers. |
| 5801 v8::Debug::SetMessageHandler2(HostDispatchMessageHandler); | 5801 v8::Debug::SetMessageHandler2(HostDispatchMessageHandler); |
| 5802 v8::Debug::SetHostDispatchHandler(HostDispatchDispatchHandler, 10 /* ms */); | 5802 v8::Debug::SetHostDispatchHandler(HostDispatchDispatchHandler, 10 /* ms */); |
| 5803 | 5803 |
| 5804 CompileRun(source_1); | 5804 CompileRun(source_1); |
| 5805 host_dispatch_barriers->barrier_1.Wait(); | 5805 host_dispatch_barriers->barrier_1.Wait(); |
| 5806 host_dispatch_barriers->barrier_2.Wait(); | 5806 host_dispatch_barriers->barrier_2.Wait(); |
| 5807 CompileRun(source_2); | 5807 CompileRun(source_2); |
| 5808 } | 5808 } |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5875 Barriers* debug_message_dispatch_barriers; | 5875 Barriers* debug_message_dispatch_barriers; |
| 5876 | 5876 |
| 5877 | 5877 |
| 5878 static void DebugMessageHandler() { | 5878 static void DebugMessageHandler() { |
| 5879 debug_message_dispatch_barriers->semaphore_1->Signal(); | 5879 debug_message_dispatch_barriers->semaphore_1->Signal(); |
| 5880 } | 5880 } |
| 5881 | 5881 |
| 5882 | 5882 |
| 5883 void DebugMessageDispatchV8Thread::Run() { | 5883 void DebugMessageDispatchV8Thread::Run() { |
| 5884 v8::V8::Initialize(); | 5884 v8::V8::Initialize(); |
| 5885 v8::HandleScope scope; | |
| 5886 DebugLocalContext env; | 5885 DebugLocalContext env; |
| 5886 v8::HandleScope scope(env->GetIsolate()); |
| 5887 | 5887 |
| 5888 // Set up debug message dispatch handler. | 5888 // Set up debug message dispatch handler. |
| 5889 v8::Debug::SetDebugMessageDispatchHandler(DebugMessageHandler); | 5889 v8::Debug::SetDebugMessageDispatchHandler(DebugMessageHandler); |
| 5890 | 5890 |
| 5891 CompileRun("var y = 1 + 2;\n"); | 5891 CompileRun("var y = 1 + 2;\n"); |
| 5892 debug_message_dispatch_barriers->barrier_1.Wait(); | 5892 debug_message_dispatch_barriers->barrier_1.Wait(); |
| 5893 debug_message_dispatch_barriers->semaphore_1->Wait(); | 5893 debug_message_dispatch_barriers->semaphore_1->Wait(); |
| 5894 debug_message_dispatch_barriers->barrier_2.Wait(); | 5894 debug_message_dispatch_barriers->barrier_2.Wait(); |
| 5895 } | 5895 } |
| 5896 | 5896 |
| (...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6102 EmptyExternalStringResource() { empty_[0] = 0; } | 6102 EmptyExternalStringResource() { empty_[0] = 0; } |
| 6103 virtual ~EmptyExternalStringResource() {} | 6103 virtual ~EmptyExternalStringResource() {} |
| 6104 virtual size_t length() const { return empty_.length(); } | 6104 virtual size_t length() const { return empty_.length(); } |
| 6105 virtual const uint16_t* data() const { return empty_.start(); } | 6105 virtual const uint16_t* data() const { return empty_.start(); } |
| 6106 private: | 6106 private: |
| 6107 ::v8::internal::EmbeddedVector<uint16_t, 1> empty_; | 6107 ::v8::internal::EmbeddedVector<uint16_t, 1> empty_; |
| 6108 }; | 6108 }; |
| 6109 | 6109 |
| 6110 | 6110 |
| 6111 TEST(DebugGetLoadedScripts) { | 6111 TEST(DebugGetLoadedScripts) { |
| 6112 v8::HandleScope scope; | |
| 6113 DebugLocalContext env; | 6112 DebugLocalContext env; |
| 6113 v8::HandleScope scope(env->GetIsolate()); |
| 6114 env.ExposeDebug(); | 6114 env.ExposeDebug(); |
| 6115 | 6115 |
| 6116 EmptyExternalStringResource source_ext_str; | 6116 EmptyExternalStringResource source_ext_str; |
| 6117 v8::Local<v8::String> source = v8::String::NewExternal(&source_ext_str); | 6117 v8::Local<v8::String> source = v8::String::NewExternal(&source_ext_str); |
| 6118 v8::Handle<v8::Script> evil_script(v8::Script::Compile(source)); | 6118 v8::Handle<v8::Script> evil_script(v8::Script::Compile(source)); |
| 6119 // "use" evil_script to make the compiler happy. | 6119 // "use" evil_script to make the compiler happy. |
| 6120 (void) evil_script; | 6120 (void) evil_script; |
| 6121 Handle<i::ExternalTwoByteString> i_source( | 6121 Handle<i::ExternalTwoByteString> i_source( |
| 6122 i::ExternalTwoByteString::cast(*v8::Utils::OpenHandle(*source))); | 6122 i::ExternalTwoByteString::cast(*v8::Utils::OpenHandle(*source))); |
| 6123 // This situation can happen if source was an external string disposed | 6123 // This situation can happen if source was an external string disposed |
| (...skipping 11 matching lines...) Expand all Loading... |
| 6135 // Must not crash while accessing line_ends. | 6135 // Must not crash while accessing line_ends. |
| 6136 i::FLAG_allow_natives_syntax = allow_natives_syntax; | 6136 i::FLAG_allow_natives_syntax = allow_natives_syntax; |
| 6137 | 6137 |
| 6138 // Some scripts are retrieved - at least the number of native scripts. | 6138 // Some scripts are retrieved - at least the number of native scripts. |
| 6139 CHECK_GT((*env)->Global()->Get(v8::String::New("count"))->Int32Value(), 8); | 6139 CHECK_GT((*env)->Global()->Get(v8::String::New("count"))->Int32Value(), 8); |
| 6140 } | 6140 } |
| 6141 | 6141 |
| 6142 | 6142 |
| 6143 // Test script break points set on lines. | 6143 // Test script break points set on lines. |
| 6144 TEST(ScriptNameAndData) { | 6144 TEST(ScriptNameAndData) { |
| 6145 v8::HandleScope scope; | |
| 6146 DebugLocalContext env; | 6145 DebugLocalContext env; |
| 6146 v8::HandleScope scope(env->GetIsolate()); |
| 6147 env.ExposeDebug(); | 6147 env.ExposeDebug(); |
| 6148 | 6148 |
| 6149 // Create functions for retrieving script name and data for the function on | 6149 // Create functions for retrieving script name and data for the function on |
| 6150 // the top frame when hitting a break point. | 6150 // the top frame when hitting a break point. |
| 6151 frame_script_name = CompileFunction(&env, | 6151 frame_script_name = CompileFunction(&env, |
| 6152 frame_script_name_source, | 6152 frame_script_name_source, |
| 6153 "frame_script_name"); | 6153 "frame_script_name"); |
| 6154 frame_script_data = CompileFunction(&env, | 6154 frame_script_data = CompileFunction(&env, |
| 6155 frame_script_data_source, | 6155 frame_script_data_source, |
| 6156 "frame_script_data"); | 6156 "frame_script_data"); |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6235 if (IsBreakEventMessage(print_buffer)) { | 6235 if (IsBreakEventMessage(print_buffer)) { |
| 6236 SendContinueCommand(); | 6236 SendContinueCommand(); |
| 6237 } | 6237 } |
| 6238 } | 6238 } |
| 6239 | 6239 |
| 6240 | 6240 |
| 6241 // Test which creates two contexts and sets different embedder data on each. | 6241 // Test which creates two contexts and sets different embedder data on each. |
| 6242 // Checks that this data is set correctly and that when the debug message | 6242 // Checks that this data is set correctly and that when the debug message |
| 6243 // handler is called the expected context is the one active. | 6243 // handler is called the expected context is the one active. |
| 6244 TEST(ContextData) { | 6244 TEST(ContextData) { |
| 6245 v8::HandleScope scope; | 6245 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
| 6246 | 6246 |
| 6247 v8::Debug::SetMessageHandler2(ContextCheckMessageHandler); | 6247 v8::Debug::SetMessageHandler2(ContextCheckMessageHandler); |
| 6248 | 6248 |
| 6249 // Create two contexts. | 6249 // Create two contexts. |
| 6250 v8::Persistent<v8::Context> context_1; | 6250 v8::Persistent<v8::Context> context_1; |
| 6251 v8::Persistent<v8::Context> context_2; | 6251 v8::Persistent<v8::Context> context_2; |
| 6252 v8::Handle<v8::ObjectTemplate> global_template = | 6252 v8::Handle<v8::ObjectTemplate> global_template = |
| 6253 v8::Handle<v8::ObjectTemplate>(); | 6253 v8::Handle<v8::ObjectTemplate>(); |
| 6254 v8::Handle<v8::Value> global_object = v8::Handle<v8::Value>(); | 6254 v8::Handle<v8::Value> global_object = v8::Handle<v8::Value>(); |
| 6255 context_1 = v8::Context::New(NULL, global_template, global_object); | 6255 context_1 = v8::Context::New(NULL, global_template, global_object); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6311 // Issue a continue command if this event will not cause the VM to start | 6311 // Issue a continue command if this event will not cause the VM to start |
| 6312 // running. | 6312 // running. |
| 6313 if (!message.WillStartRunning()) { | 6313 if (!message.WillStartRunning()) { |
| 6314 SendContinueCommand(); | 6314 SendContinueCommand(); |
| 6315 } | 6315 } |
| 6316 } | 6316 } |
| 6317 | 6317 |
| 6318 | 6318 |
| 6319 // Test that a debug break can be scheduled while in a message handler. | 6319 // Test that a debug break can be scheduled while in a message handler. |
| 6320 TEST(DebugBreakInMessageHandler) { | 6320 TEST(DebugBreakInMessageHandler) { |
| 6321 v8::HandleScope scope; | |
| 6322 DebugLocalContext env; | 6321 DebugLocalContext env; |
| 6322 v8::HandleScope scope(env->GetIsolate()); |
| 6323 | 6323 |
| 6324 v8::Debug::SetMessageHandler2(DebugBreakMessageHandler); | 6324 v8::Debug::SetMessageHandler2(DebugBreakMessageHandler); |
| 6325 | 6325 |
| 6326 // Test functions. | 6326 // Test functions. |
| 6327 const char* script = "function f() { debugger; g(); } function g() { }"; | 6327 const char* script = "function f() { debugger; g(); } function g() { }"; |
| 6328 CompileRun(script); | 6328 CompileRun(script); |
| 6329 v8::Local<v8::Function> f = | 6329 v8::Local<v8::Function> f = |
| 6330 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("f"))); | 6330 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("f"))); |
| 6331 v8::Local<v8::Function> g = | 6331 v8::Local<v8::Function> g = |
| 6332 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("g"))); | 6332 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("g"))); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6372 // Keep forcing breaks. | 6372 // Keep forcing breaks. |
| 6373 if (break_point_hit_count < 20) { | 6373 if (break_point_hit_count < 20) { |
| 6374 v8::Debug::DebugBreak(); | 6374 v8::Debug::DebugBreak(); |
| 6375 } | 6375 } |
| 6376 } | 6376 } |
| 6377 } | 6377 } |
| 6378 | 6378 |
| 6379 | 6379 |
| 6380 TEST(RegExpDebugBreak) { | 6380 TEST(RegExpDebugBreak) { |
| 6381 // This test only applies to native regexps. | 6381 // This test only applies to native regexps. |
| 6382 v8::HandleScope scope; | |
| 6383 DebugLocalContext env; | 6382 DebugLocalContext env; |
| 6383 v8::HandleScope scope(env->GetIsolate()); |
| 6384 | 6384 |
| 6385 // Create a function for checking the function when hitting a break point. | 6385 // Create a function for checking the function when hitting a break point. |
| 6386 frame_function_name = CompileFunction(&env, | 6386 frame_function_name = CompileFunction(&env, |
| 6387 frame_function_name_source, | 6387 frame_function_name_source, |
| 6388 "frame_function_name"); | 6388 "frame_function_name"); |
| 6389 | 6389 |
| 6390 // Test RegExp which matches white spaces and comments at the begining of a | 6390 // Test RegExp which matches white spaces and comments at the begining of a |
| 6391 // source line. | 6391 // source line. |
| 6392 const char* script = | 6392 const char* script = |
| 6393 "var sourceLineBeginningSkip = /^(?:[ \\v\\h]*(?:\\/\\*.*?\\*\\/)*)*/;\n" | 6393 "var sourceLineBeginningSkip = /^(?:[ \\v\\h]*(?:\\/\\*.*?\\*\\/)*)*/;\n" |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6439 f->Call(context_1->Global(), 0, NULL); | 6439 f->Call(context_1->Global(), 0, NULL); |
| 6440 } | 6440 } |
| 6441 } | 6441 } |
| 6442 | 6442 |
| 6443 | 6443 |
| 6444 // Test which creates a context and sets embedder data on it. Checks that this | 6444 // Test which creates a context and sets embedder data on it. Checks that this |
| 6445 // data is set correctly and that when the debug message handler is called for | 6445 // data is set correctly and that when the debug message handler is called for |
| 6446 // break event in an eval statement the expected context is the one returned by | 6446 // break event in an eval statement the expected context is the one returned by |
| 6447 // Message.GetEventContext. | 6447 // Message.GetEventContext. |
| 6448 TEST(EvalContextData) { | 6448 TEST(EvalContextData) { |
| 6449 v8::HandleScope scope; | 6449 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
| 6450 v8::Debug::SetMessageHandler2(ContextCheckMessageHandler); | 6450 v8::Debug::SetMessageHandler2(ContextCheckMessageHandler); |
| 6451 | 6451 |
| 6452 ExecuteScriptForContextCheck(); | 6452 ExecuteScriptForContextCheck(); |
| 6453 | 6453 |
| 6454 // One time compile event and one time break event. | 6454 // One time compile event and one time break event. |
| 6455 CHECK_GT(message_handler_hit_count, 2); | 6455 CHECK_GT(message_handler_hit_count, 2); |
| 6456 v8::Debug::SetMessageHandler2(NULL); | 6456 v8::Debug::SetMessageHandler2(NULL); |
| 6457 CheckDebuggerUnloaded(); | 6457 CheckDebuggerUnloaded(); |
| 6458 } | 6458 } |
| 6459 | 6459 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6502 // send continue. | 6502 // send continue. |
| 6503 SendContinueCommand(); | 6503 SendContinueCommand(); |
| 6504 continue_command_send_count++; | 6504 continue_command_send_count++; |
| 6505 } | 6505 } |
| 6506 } | 6506 } |
| 6507 | 6507 |
| 6508 | 6508 |
| 6509 // Tests that context returned for break event is correct when the event occurs | 6509 // Tests that context returned for break event is correct when the event occurs |
| 6510 // in 'evaluate' debugger request. | 6510 // in 'evaluate' debugger request. |
| 6511 TEST(NestedBreakEventContextData) { | 6511 TEST(NestedBreakEventContextData) { |
| 6512 v8::HandleScope scope; | 6512 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
| 6513 break_count = 0; | 6513 break_count = 0; |
| 6514 message_handler_hit_count = 0; | 6514 message_handler_hit_count = 0; |
| 6515 v8::Debug::SetMessageHandler2(DebugEvalContextCheckMessageHandler); | 6515 v8::Debug::SetMessageHandler2(DebugEvalContextCheckMessageHandler); |
| 6516 | 6516 |
| 6517 ExecuteScriptForContextCheck(); | 6517 ExecuteScriptForContextCheck(); |
| 6518 | 6518 |
| 6519 // One time compile event and two times break event. | 6519 // One time compile event and two times break event. |
| 6520 CHECK_GT(message_handler_hit_count, 3); | 6520 CHECK_GT(message_handler_hit_count, 3); |
| 6521 | 6521 |
| 6522 // One break from the source and another from the evaluate request. | 6522 // One break from the source and another from the evaluate request. |
| (...skipping 14 matching lines...) Expand all Loading... |
| 6537 script_collected_count++; | 6537 script_collected_count++; |
| 6538 } | 6538 } |
| 6539 } | 6539 } |
| 6540 | 6540 |
| 6541 | 6541 |
| 6542 // Test that scripts collected are reported through the debug event listener. | 6542 // Test that scripts collected are reported through the debug event listener. |
| 6543 TEST(ScriptCollectedEvent) { | 6543 TEST(ScriptCollectedEvent) { |
| 6544 v8::internal::Debug* debug = v8::internal::Isolate::Current()->debug(); | 6544 v8::internal::Debug* debug = v8::internal::Isolate::Current()->debug(); |
| 6545 break_point_hit_count = 0; | 6545 break_point_hit_count = 0; |
| 6546 script_collected_count = 0; | 6546 script_collected_count = 0; |
| 6547 v8::HandleScope scope; | |
| 6548 DebugLocalContext env; | 6547 DebugLocalContext env; |
| 6548 v8::HandleScope scope(env->GetIsolate()); |
| 6549 | 6549 |
| 6550 // Request the loaded scripts to initialize the debugger script cache. | 6550 // Request the loaded scripts to initialize the debugger script cache. |
| 6551 debug->GetLoadedScripts(); | 6551 debug->GetLoadedScripts(); |
| 6552 | 6552 |
| 6553 // Do garbage collection to ensure that only the script in this test will be | 6553 // Do garbage collection to ensure that only the script in this test will be |
| 6554 // collected afterwards. | 6554 // collected afterwards. |
| 6555 HEAP->CollectAllGarbage(Heap::kNoGCFlags); | 6555 HEAP->CollectAllGarbage(Heap::kNoGCFlags); |
| 6556 | 6556 |
| 6557 script_collected_count = 0; | 6557 script_collected_count = 0; |
| 6558 v8::Debug::SetDebugEventListener(DebugEventScriptCollectedEvent, | 6558 v8::Debug::SetDebugEventListener(DebugEventScriptCollectedEvent, |
| (...skipping 22 matching lines...) Expand all Loading... |
| 6581 script_collected_message_count++; | 6581 script_collected_message_count++; |
| 6582 v8::Handle<v8::Context> context = message.GetEventContext(); | 6582 v8::Handle<v8::Context> context = message.GetEventContext(); |
| 6583 CHECK(context.IsEmpty()); | 6583 CHECK(context.IsEmpty()); |
| 6584 } | 6584 } |
| 6585 } | 6585 } |
| 6586 | 6586 |
| 6587 | 6587 |
| 6588 // Test that GetEventContext doesn't fail and return empty handle for | 6588 // Test that GetEventContext doesn't fail and return empty handle for |
| 6589 // ScriptCollected events. | 6589 // ScriptCollected events. |
| 6590 TEST(ScriptCollectedEventContext) { | 6590 TEST(ScriptCollectedEventContext) { |
| 6591 v8::internal::Debug* debug = v8::internal::Isolate::Current()->debug(); | 6591 v8::Isolate* isolate = v8::Isolate::GetCurrent(); |
| 6592 v8::internal::Debug* debug = |
| 6593 reinterpret_cast<v8::internal::Isolate*>(isolate)->debug(); |
| 6592 script_collected_message_count = 0; | 6594 script_collected_message_count = 0; |
| 6593 v8::HandleScope scope; | 6595 v8::HandleScope scope(isolate); |
| 6594 | 6596 |
| 6595 { // Scope for the DebugLocalContext. | 6597 { // Scope for the DebugLocalContext. |
| 6596 DebugLocalContext env; | 6598 DebugLocalContext env; |
| 6597 | 6599 |
| 6598 // Request the loaded scripts to initialize the debugger script cache. | 6600 // Request the loaded scripts to initialize the debugger script cache. |
| 6599 debug->GetLoadedScripts(); | 6601 debug->GetLoadedScripts(); |
| 6600 | 6602 |
| 6601 // Do garbage collection to ensure that only the script in this test will be | 6603 // Do garbage collection to ensure that only the script in this test will be |
| 6602 // collected afterwards. | 6604 // collected afterwards. |
| 6603 HEAP->CollectAllGarbage(Heap::kNoGCFlags); | 6605 HEAP->CollectAllGarbage(Heap::kNoGCFlags); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 6629 } else if (message.GetEvent() == v8::Break) { | 6631 } else if (message.GetEvent() == v8::Break) { |
| 6630 SendContinueCommand(); | 6632 SendContinueCommand(); |
| 6631 } | 6633 } |
| 6632 } | 6634 } |
| 6633 } | 6635 } |
| 6634 | 6636 |
| 6635 | 6637 |
| 6636 // Tests that after compile event is sent as many times as there are scripts | 6638 // Tests that after compile event is sent as many times as there are scripts |
| 6637 // compiled. | 6639 // compiled. |
| 6638 TEST(AfterCompileMessageWhenMessageHandlerIsReset) { | 6640 TEST(AfterCompileMessageWhenMessageHandlerIsReset) { |
| 6639 v8::HandleScope scope; | |
| 6640 DebugLocalContext env; | 6641 DebugLocalContext env; |
| 6642 v8::HandleScope scope(env->GetIsolate()); |
| 6641 after_compile_message_count = 0; | 6643 after_compile_message_count = 0; |
| 6642 const char* script = "var a=1"; | 6644 const char* script = "var a=1"; |
| 6643 | 6645 |
| 6644 v8::Debug::SetMessageHandler2(AfterCompileMessageHandler); | 6646 v8::Debug::SetMessageHandler2(AfterCompileMessageHandler); |
| 6645 v8::Script::Compile(v8::String::New(script))->Run(); | 6647 v8::Script::Compile(v8::String::New(script))->Run(); |
| 6646 v8::Debug::SetMessageHandler2(NULL); | 6648 v8::Debug::SetMessageHandler2(NULL); |
| 6647 | 6649 |
| 6648 v8::Debug::SetMessageHandler2(AfterCompileMessageHandler); | 6650 v8::Debug::SetMessageHandler2(AfterCompileMessageHandler); |
| 6649 v8::Debug::DebugBreak(); | 6651 v8::Debug::DebugBreak(); |
| 6650 v8::Script::Compile(v8::String::New(script))->Run(); | 6652 v8::Script::Compile(v8::String::New(script))->Run(); |
| 6651 | 6653 |
| 6652 // Setting listener to NULL should cause debugger unload. | 6654 // Setting listener to NULL should cause debugger unload. |
| 6653 v8::Debug::SetMessageHandler2(NULL); | 6655 v8::Debug::SetMessageHandler2(NULL); |
| 6654 CheckDebuggerUnloaded(); | 6656 CheckDebuggerUnloaded(); |
| 6655 | 6657 |
| 6656 // Compilation cache should be disabled when debugger is active. | 6658 // Compilation cache should be disabled when debugger is active. |
| 6657 CHECK_EQ(2, after_compile_message_count); | 6659 CHECK_EQ(2, after_compile_message_count); |
| 6658 } | 6660 } |
| 6659 | 6661 |
| 6660 | 6662 |
| 6661 // Tests that break event is sent when message handler is reset. | 6663 // Tests that break event is sent when message handler is reset. |
| 6662 TEST(BreakMessageWhenMessageHandlerIsReset) { | 6664 TEST(BreakMessageWhenMessageHandlerIsReset) { |
| 6663 v8::HandleScope scope; | |
| 6664 DebugLocalContext env; | 6665 DebugLocalContext env; |
| 6666 v8::HandleScope scope(env->GetIsolate()); |
| 6665 after_compile_message_count = 0; | 6667 after_compile_message_count = 0; |
| 6666 const char* script = "function f() {};"; | 6668 const char* script = "function f() {};"; |
| 6667 | 6669 |
| 6668 v8::Debug::SetMessageHandler2(AfterCompileMessageHandler); | 6670 v8::Debug::SetMessageHandler2(AfterCompileMessageHandler); |
| 6669 v8::Script::Compile(v8::String::New(script))->Run(); | 6671 v8::Script::Compile(v8::String::New(script))->Run(); |
| 6670 v8::Debug::SetMessageHandler2(NULL); | 6672 v8::Debug::SetMessageHandler2(NULL); |
| 6671 | 6673 |
| 6672 v8::Debug::SetMessageHandler2(AfterCompileMessageHandler); | 6674 v8::Debug::SetMessageHandler2(AfterCompileMessageHandler); |
| 6673 v8::Debug::DebugBreak(); | 6675 v8::Debug::DebugBreak(); |
| 6674 v8::Local<v8::Function> f = | 6676 v8::Local<v8::Function> f = |
| (...skipping 13 matching lines...) Expand all Loading... |
| 6688 static void ExceptionMessageHandler(const v8::Debug::Message& message) { | 6690 static void ExceptionMessageHandler(const v8::Debug::Message& message) { |
| 6689 if (message.IsEvent() && message.GetEvent() == v8::Exception) { | 6691 if (message.IsEvent() && message.GetEvent() == v8::Exception) { |
| 6690 exception_event_count++; | 6692 exception_event_count++; |
| 6691 SendContinueCommand(); | 6693 SendContinueCommand(); |
| 6692 } | 6694 } |
| 6693 } | 6695 } |
| 6694 | 6696 |
| 6695 | 6697 |
| 6696 // Tests that exception event is sent when message handler is reset. | 6698 // Tests that exception event is sent when message handler is reset. |
| 6697 TEST(ExceptionMessageWhenMessageHandlerIsReset) { | 6699 TEST(ExceptionMessageWhenMessageHandlerIsReset) { |
| 6698 v8::HandleScope scope; | |
| 6699 DebugLocalContext env; | 6700 DebugLocalContext env; |
| 6701 v8::HandleScope scope(env->GetIsolate()); |
| 6700 | 6702 |
| 6701 // For this test, we want to break on uncaught exceptions: | 6703 // For this test, we want to break on uncaught exceptions: |
| 6702 ChangeBreakOnException(false, true); | 6704 ChangeBreakOnException(false, true); |
| 6703 | 6705 |
| 6704 exception_event_count = 0; | 6706 exception_event_count = 0; |
| 6705 const char* script = "function f() {throw new Error()};"; | 6707 const char* script = "function f() {throw new Error()};"; |
| 6706 | 6708 |
| 6707 v8::Debug::SetMessageHandler2(AfterCompileMessageHandler); | 6709 v8::Debug::SetMessageHandler2(AfterCompileMessageHandler); |
| 6708 v8::Script::Compile(v8::String::New(script))->Run(); | 6710 v8::Script::Compile(v8::String::New(script))->Run(); |
| 6709 v8::Debug::SetMessageHandler2(NULL); | 6711 v8::Debug::SetMessageHandler2(NULL); |
| 6710 | 6712 |
| 6711 v8::Debug::SetMessageHandler2(ExceptionMessageHandler); | 6713 v8::Debug::SetMessageHandler2(ExceptionMessageHandler); |
| 6712 v8::Local<v8::Function> f = | 6714 v8::Local<v8::Function> f = |
| 6713 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("f"))); | 6715 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("f"))); |
| 6714 f->Call(env->Global(), 0, NULL); | 6716 f->Call(env->Global(), 0, NULL); |
| 6715 | 6717 |
| 6716 // Setting message handler to NULL should cause debugger unload. | 6718 // Setting message handler to NULL should cause debugger unload. |
| 6717 v8::Debug::SetMessageHandler2(NULL); | 6719 v8::Debug::SetMessageHandler2(NULL); |
| 6718 CheckDebuggerUnloaded(); | 6720 CheckDebuggerUnloaded(); |
| 6719 | 6721 |
| 6720 CHECK_EQ(1, exception_event_count); | 6722 CHECK_EQ(1, exception_event_count); |
| 6721 } | 6723 } |
| 6722 | 6724 |
| 6723 | 6725 |
| 6724 // Tests after compile event is sent when there are some provisional | 6726 // Tests after compile event is sent when there are some provisional |
| 6725 // breakpoints out of the scripts lines range. | 6727 // breakpoints out of the scripts lines range. |
| 6726 TEST(ProvisionalBreakpointOnLineOutOfRange) { | 6728 TEST(ProvisionalBreakpointOnLineOutOfRange) { |
| 6727 v8::HandleScope scope; | |
| 6728 DebugLocalContext env; | 6729 DebugLocalContext env; |
| 6730 v8::HandleScope scope(env->GetIsolate()); |
| 6729 env.ExposeDebug(); | 6731 env.ExposeDebug(); |
| 6730 const char* script = "function f() {};"; | 6732 const char* script = "function f() {};"; |
| 6731 const char* resource_name = "test_resource"; | 6733 const char* resource_name = "test_resource"; |
| 6732 | 6734 |
| 6733 // Set a couple of provisional breakpoint on lines out of the script lines | 6735 // Set a couple of provisional breakpoint on lines out of the script lines |
| 6734 // range. | 6736 // range. |
| 6735 int sbp1 = SetScriptBreakPointByNameFromJS(resource_name, 3, | 6737 int sbp1 = SetScriptBreakPointByNameFromJS(resource_name, 3, |
| 6736 -1 /* no column */); | 6738 -1 /* no column */); |
| 6737 int sbp2 = SetScriptBreakPointByNameFromJS(resource_name, 5, 5); | 6739 int sbp2 = SetScriptBreakPointByNameFromJS(resource_name, 5, 5); |
| 6738 | 6740 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 6757 v8::Debug::SetMessageHandler2(NULL); | 6759 v8::Debug::SetMessageHandler2(NULL); |
| 6758 } | 6760 } |
| 6759 | 6761 |
| 6760 | 6762 |
| 6761 static void BreakMessageHandler(const v8::Debug::Message& message) { | 6763 static void BreakMessageHandler(const v8::Debug::Message& message) { |
| 6762 i::Isolate* isolate = i::Isolate::Current(); | 6764 i::Isolate* isolate = i::Isolate::Current(); |
| 6763 if (message.IsEvent() && message.GetEvent() == v8::Break) { | 6765 if (message.IsEvent() && message.GetEvent() == v8::Break) { |
| 6764 // Count the number of breaks. | 6766 // Count the number of breaks. |
| 6765 break_point_hit_count++; | 6767 break_point_hit_count++; |
| 6766 | 6768 |
| 6767 v8::HandleScope scope; | 6769 i::HandleScope scope(isolate); |
| 6768 message.GetJSON(); | 6770 message.GetJSON(); |
| 6769 | 6771 |
| 6770 SendContinueCommand(); | 6772 SendContinueCommand(); |
| 6771 } else if (message.IsEvent() && message.GetEvent() == v8::AfterCompile) { | 6773 } else if (message.IsEvent() && message.GetEvent() == v8::AfterCompile) { |
| 6772 v8::HandleScope scope; | 6774 i::HandleScope scope(isolate); |
| 6773 | 6775 |
| 6774 bool is_debug_break = isolate->stack_guard()->IsDebugBreak(); | 6776 bool is_debug_break = isolate->stack_guard()->IsDebugBreak(); |
| 6775 // Force DebugBreak flag while serializer is working. | 6777 // Force DebugBreak flag while serializer is working. |
| 6776 isolate->stack_guard()->DebugBreak(); | 6778 isolate->stack_guard()->DebugBreak(); |
| 6777 | 6779 |
| 6778 // Force serialization to trigger some internal JS execution. | 6780 // Force serialization to trigger some internal JS execution. |
| 6779 message.GetJSON(); | 6781 message.GetJSON(); |
| 6780 | 6782 |
| 6781 // Restore previous state. | 6783 // Restore previous state. |
| 6782 if (is_debug_break) { | 6784 if (is_debug_break) { |
| 6783 isolate->stack_guard()->DebugBreak(); | 6785 isolate->stack_guard()->DebugBreak(); |
| 6784 } else { | 6786 } else { |
| 6785 isolate->stack_guard()->Continue(i::DEBUGBREAK); | 6787 isolate->stack_guard()->Continue(i::DEBUGBREAK); |
| 6786 } | 6788 } |
| 6787 } | 6789 } |
| 6788 } | 6790 } |
| 6789 | 6791 |
| 6790 | 6792 |
| 6791 // Test that if DebugBreak is forced it is ignored when code from | 6793 // Test that if DebugBreak is forced it is ignored when code from |
| 6792 // debug-delay.js is executed. | 6794 // debug-delay.js is executed. |
| 6793 TEST(NoDebugBreakInAfterCompileMessageHandler) { | 6795 TEST(NoDebugBreakInAfterCompileMessageHandler) { |
| 6794 v8::HandleScope scope; | |
| 6795 DebugLocalContext env; | 6796 DebugLocalContext env; |
| 6797 v8::HandleScope scope(env->GetIsolate()); |
| 6796 | 6798 |
| 6797 // Register a debug event listener which sets the break flag and counts. | 6799 // Register a debug event listener which sets the break flag and counts. |
| 6798 v8::Debug::SetMessageHandler2(BreakMessageHandler); | 6800 v8::Debug::SetMessageHandler2(BreakMessageHandler); |
| 6799 | 6801 |
| 6800 // Set the debug break flag. | 6802 // Set the debug break flag. |
| 6801 v8::Debug::DebugBreak(); | 6803 v8::Debug::DebugBreak(); |
| 6802 | 6804 |
| 6803 // Create a function for testing stepping. | 6805 // Create a function for testing stepping. |
| 6804 const char* src = "function f() { eval('var x = 10;'); } "; | 6806 const char* src = "function f() { eval('var x = 10;'); } "; |
| 6805 v8::Local<v8::Function> f = CompileFunction(&env, src, "f"); | 6807 v8::Local<v8::Function> f = CompileFunction(&env, src, "f"); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 6820 | 6822 |
| 6821 | 6823 |
| 6822 static int counting_message_handler_counter; | 6824 static int counting_message_handler_counter; |
| 6823 | 6825 |
| 6824 static void CountingMessageHandler(const v8::Debug::Message& message) { | 6826 static void CountingMessageHandler(const v8::Debug::Message& message) { |
| 6825 counting_message_handler_counter++; | 6827 counting_message_handler_counter++; |
| 6826 } | 6828 } |
| 6827 | 6829 |
| 6828 // Test that debug messages get processed when ProcessDebugMessages is called. | 6830 // Test that debug messages get processed when ProcessDebugMessages is called. |
| 6829 TEST(ProcessDebugMessages) { | 6831 TEST(ProcessDebugMessages) { |
| 6830 v8::HandleScope scope; | |
| 6831 DebugLocalContext env; | 6832 DebugLocalContext env; |
| 6833 v8::HandleScope scope(env->GetIsolate()); |
| 6832 | 6834 |
| 6833 counting_message_handler_counter = 0; | 6835 counting_message_handler_counter = 0; |
| 6834 | 6836 |
| 6835 v8::Debug::SetMessageHandler2(CountingMessageHandler); | 6837 v8::Debug::SetMessageHandler2(CountingMessageHandler); |
| 6836 | 6838 |
| 6837 const int kBufferSize = 1000; | 6839 const int kBufferSize = 1000; |
| 6838 uint16_t buffer[kBufferSize]; | 6840 uint16_t buffer[kBufferSize]; |
| 6839 const char* scripts_command = | 6841 const char* scripts_command = |
| 6840 "{\"seq\":0," | 6842 "{\"seq\":0," |
| 6841 "\"type\":\"request\"," | 6843 "\"type\":\"request\"," |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6876 } | 6878 } |
| 6877 frame_counter = GetTotalFramesInt(print_buffer); | 6879 frame_counter = GetTotalFramesInt(print_buffer); |
| 6878 } | 6880 } |
| 6879 }; | 6881 }; |
| 6880 | 6882 |
| 6881 int BacktraceData::frame_counter; | 6883 int BacktraceData::frame_counter; |
| 6882 | 6884 |
| 6883 | 6885 |
| 6884 // Test that debug messages get processed when ProcessDebugMessages is called. | 6886 // Test that debug messages get processed when ProcessDebugMessages is called. |
| 6885 TEST(Backtrace) { | 6887 TEST(Backtrace) { |
| 6886 v8::HandleScope scope; | |
| 6887 DebugLocalContext env; | 6888 DebugLocalContext env; |
| 6889 v8::HandleScope scope(env->GetIsolate()); |
| 6888 | 6890 |
| 6889 v8::Debug::SetMessageHandler2(BacktraceData::MessageHandler); | 6891 v8::Debug::SetMessageHandler2(BacktraceData::MessageHandler); |
| 6890 | 6892 |
| 6891 const int kBufferSize = 1000; | 6893 const int kBufferSize = 1000; |
| 6892 uint16_t buffer[kBufferSize]; | 6894 uint16_t buffer[kBufferSize]; |
| 6893 const char* scripts_command = | 6895 const char* scripts_command = |
| 6894 "{\"seq\":0," | 6896 "{\"seq\":0," |
| 6895 "\"type\":\"request\"," | 6897 "\"type\":\"request\"," |
| 6896 "\"command\":\"backtrace\"}"; | 6898 "\"command\":\"backtrace\"}"; |
| 6897 | 6899 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 6910 script->Run(); | 6912 script->Run(); |
| 6911 CHECK_EQ(BacktraceData::frame_counter, 1); | 6913 CHECK_EQ(BacktraceData::frame_counter, 1); |
| 6912 | 6914 |
| 6913 // Get rid of the debug message handler. | 6915 // Get rid of the debug message handler. |
| 6914 v8::Debug::SetMessageHandler2(NULL); | 6916 v8::Debug::SetMessageHandler2(NULL); |
| 6915 CheckDebuggerUnloaded(); | 6917 CheckDebuggerUnloaded(); |
| 6916 } | 6918 } |
| 6917 | 6919 |
| 6918 | 6920 |
| 6919 TEST(GetMirror) { | 6921 TEST(GetMirror) { |
| 6920 v8::HandleScope scope; | |
| 6921 DebugLocalContext env; | 6922 DebugLocalContext env; |
| 6923 v8::HandleScope scope(env->GetIsolate()); |
| 6922 v8::Handle<v8::Value> obj = v8::Debug::GetMirror(v8::String::New("hodja")); | 6924 v8::Handle<v8::Value> obj = v8::Debug::GetMirror(v8::String::New("hodja")); |
| 6923 v8::Handle<v8::Function> run_test = v8::Handle<v8::Function>::Cast( | 6925 v8::Handle<v8::Function> run_test = v8::Handle<v8::Function>::Cast( |
| 6924 v8::Script::New( | 6926 v8::Script::New( |
| 6925 v8::String::New( | 6927 v8::String::New( |
| 6926 "function runTest(mirror) {" | 6928 "function runTest(mirror) {" |
| 6927 " return mirror.isString() && (mirror.length() == 5);" | 6929 " return mirror.isString() && (mirror.length() == 5);" |
| 6928 "}" | 6930 "}" |
| 6929 "" | 6931 "" |
| 6930 "runTest;"))->Run()); | 6932 "runTest;"))->Run()); |
| 6931 v8::Handle<v8::Value> result = run_test->Call(env->Global(), 1, &obj); | 6933 v8::Handle<v8::Value> result = run_test->Call(env->Global(), 1, &obj); |
| 6932 CHECK(result->IsTrue()); | 6934 CHECK(result->IsTrue()); |
| 6933 } | 6935 } |
| 6934 | 6936 |
| 6935 | 6937 |
| 6936 // Test that the debug break flag works with function.apply. | 6938 // Test that the debug break flag works with function.apply. |
| 6937 TEST(DebugBreakFunctionApply) { | 6939 TEST(DebugBreakFunctionApply) { |
| 6938 v8::HandleScope scope; | |
| 6939 DebugLocalContext env; | 6940 DebugLocalContext env; |
| 6941 v8::HandleScope scope(env->GetIsolate()); |
| 6940 | 6942 |
| 6941 // Create a function for testing breaking in apply. | 6943 // Create a function for testing breaking in apply. |
| 6942 v8::Local<v8::Function> foo = CompileFunction( | 6944 v8::Local<v8::Function> foo = CompileFunction( |
| 6943 &env, | 6945 &env, |
| 6944 "function baz(x) { }" | 6946 "function baz(x) { }" |
| 6945 "function bar(x) { baz(); }" | 6947 "function bar(x) { baz(); }" |
| 6946 "function foo(){ bar.apply(this, [1]); }", | 6948 "function foo(){ bar.apply(this, [1]); }", |
| 6947 "foo"); | 6949 "foo"); |
| 6948 | 6950 |
| 6949 // Register a debug event listener which steps and counts. | 6951 // Register a debug event listener which steps and counts. |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7006 v8::Handle<v8::Value> argv[argc] = { exec_state }; | 7008 v8::Handle<v8::Value> argv[argc] = { exec_state }; |
| 7007 v8::Handle<v8::Value> result = func->Call(exec_state, argc, argv); | 7009 v8::Handle<v8::Value> result = func->Call(exec_state, argc, argv); |
| 7008 CHECK(result->IsTrue()); | 7010 CHECK(result->IsTrue()); |
| 7009 } | 7011 } |
| 7010 } | 7012 } |
| 7011 | 7013 |
| 7012 | 7014 |
| 7013 TEST(CallingContextIsNotDebugContext) { | 7015 TEST(CallingContextIsNotDebugContext) { |
| 7014 v8::internal::Debug* debug = v8::internal::Isolate::Current()->debug(); | 7016 v8::internal::Debug* debug = v8::internal::Isolate::Current()->debug(); |
| 7015 // Create and enter a debugee context. | 7017 // Create and enter a debugee context. |
| 7016 v8::HandleScope scope; | |
| 7017 DebugLocalContext env; | 7018 DebugLocalContext env; |
| 7019 v8::HandleScope scope(env->GetIsolate()); |
| 7018 env.ExposeDebug(); | 7020 env.ExposeDebug(); |
| 7019 | 7021 |
| 7020 // Save handles to the debugger and debugee contexts to be used in | 7022 // Save handles to the debugger and debugee contexts to be used in |
| 7021 // NamedGetterWithCallingContextCheck. | 7023 // NamedGetterWithCallingContextCheck. |
| 7022 debugee_context = v8::Local<v8::Context>(*env); | 7024 debugee_context = v8::Local<v8::Context>(*env); |
| 7023 debugger_context = v8::Utils::ToLocal(debug->debug_context()); | 7025 debugger_context = v8::Utils::ToLocal(debug->debug_context()); |
| 7024 | 7026 |
| 7025 // Create object with 'a' property accessor. | 7027 // Create object with 'a' property accessor. |
| 7026 v8::Handle<v8::ObjectTemplate> named = v8::ObjectTemplate::New(); | 7028 v8::Handle<v8::ObjectTemplate> named = v8::ObjectTemplate::New(); |
| 7027 named->SetAccessor(v8::String::New("a"), | 7029 named->SetAccessor(v8::String::New("a"), |
| (...skipping 16 matching lines...) Expand all Loading... |
| 7044 CHECK_EQ(1, break_point_hit_count); | 7046 CHECK_EQ(1, break_point_hit_count); |
| 7045 | 7047 |
| 7046 v8::Debug::SetDebugEventListener(NULL); | 7048 v8::Debug::SetDebugEventListener(NULL); |
| 7047 debugee_context = v8::Handle<v8::Context>(); | 7049 debugee_context = v8::Handle<v8::Context>(); |
| 7048 debugger_context = v8::Handle<v8::Context>(); | 7050 debugger_context = v8::Handle<v8::Context>(); |
| 7049 CheckDebuggerUnloaded(); | 7051 CheckDebuggerUnloaded(); |
| 7050 } | 7052 } |
| 7051 | 7053 |
| 7052 | 7054 |
| 7053 TEST(DebugContextIsPreservedBetweenAccesses) { | 7055 TEST(DebugContextIsPreservedBetweenAccesses) { |
| 7054 v8::HandleScope scope; | 7056 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
| 7055 v8::Local<v8::Context> context1 = v8::Debug::GetDebugContext(); | 7057 v8::Local<v8::Context> context1 = v8::Debug::GetDebugContext(); |
| 7056 v8::Local<v8::Context> context2 = v8::Debug::GetDebugContext(); | 7058 v8::Local<v8::Context> context2 = v8::Debug::GetDebugContext(); |
| 7057 CHECK_EQ(*context1, *context2); | 7059 CHECK_EQ(*context1, *context2); |
| 7058 } | 7060 } |
| 7059 | 7061 |
| 7060 | 7062 |
| 7061 static v8::Handle<v8::Value> expected_callback_data; | 7063 static v8::Handle<v8::Value> expected_callback_data; |
| 7062 static void DebugEventContextChecker(const v8::Debug::EventDetails& details) { | 7064 static void DebugEventContextChecker(const v8::Debug::EventDetails& details) { |
| 7063 CHECK(details.GetEventContext() == expected_context); | 7065 CHECK(details.GetEventContext() == expected_context); |
| 7064 CHECK_EQ(expected_callback_data, details.GetCallbackData()); | 7066 CHECK_EQ(expected_callback_data, details.GetCallbackData()); |
| 7065 } | 7067 } |
| 7066 | 7068 |
| 7067 // Check that event details contain context where debug event occured. | 7069 // Check that event details contain context where debug event occured. |
| 7068 TEST(DebugEventContext) { | 7070 TEST(DebugEventContext) { |
| 7069 v8::HandleScope scope; | 7071 v8::HandleScope scope(v8::Isolate::GetCurrent()); |
| 7070 expected_callback_data = v8::Int32::New(2010); | 7072 expected_callback_data = v8::Int32::New(2010); |
| 7071 v8::Debug::SetDebugEventListener2(DebugEventContextChecker, | 7073 v8::Debug::SetDebugEventListener2(DebugEventContextChecker, |
| 7072 expected_callback_data); | 7074 expected_callback_data); |
| 7073 expected_context = v8::Context::New(); | 7075 expected_context = v8::Context::New(); |
| 7074 v8::Context::Scope context_scope(expected_context); | 7076 v8::Context::Scope context_scope(expected_context); |
| 7075 v8::Script::Compile(v8::String::New("(function(){debugger;})();"))->Run(); | 7077 v8::Script::Compile(v8::String::New("(function(){debugger;})();"))->Run(); |
| 7076 expected_context.Dispose(expected_context->GetIsolate()); | 7078 expected_context.Dispose(expected_context->GetIsolate()); |
| 7077 expected_context.Clear(); | 7079 expected_context.Clear(); |
| 7078 v8::Debug::SetDebugEventListener(NULL); | 7080 v8::Debug::SetDebugEventListener(NULL); |
| 7079 expected_context_data = v8::Handle<v8::Value>(); | 7081 expected_context_data = v8::Handle<v8::Value>(); |
| 7080 CheckDebuggerUnloaded(); | 7082 CheckDebuggerUnloaded(); |
| 7081 } | 7083 } |
| 7082 | 7084 |
| 7083 | 7085 |
| 7084 static void* expected_break_data; | 7086 static void* expected_break_data; |
| 7085 static bool was_debug_break_called; | 7087 static bool was_debug_break_called; |
| 7086 static bool was_debug_event_called; | 7088 static bool was_debug_event_called; |
| 7087 static void DebugEventBreakDataChecker(const v8::Debug::EventDetails& details) { | 7089 static void DebugEventBreakDataChecker(const v8::Debug::EventDetails& details) { |
| 7088 if (details.GetEvent() == v8::BreakForCommand) { | 7090 if (details.GetEvent() == v8::BreakForCommand) { |
| 7089 CHECK_EQ(expected_break_data, details.GetClientData()); | 7091 CHECK_EQ(expected_break_data, details.GetClientData()); |
| 7090 was_debug_event_called = true; | 7092 was_debug_event_called = true; |
| 7091 } else if (details.GetEvent() == v8::Break) { | 7093 } else if (details.GetEvent() == v8::Break) { |
| 7092 was_debug_break_called = true; | 7094 was_debug_break_called = true; |
| 7093 } | 7095 } |
| 7094 } | 7096 } |
| 7095 | 7097 |
| 7096 | 7098 |
| 7097 // Check that event details contain context where debug event occured. | 7099 // Check that event details contain context where debug event occured. |
| 7098 TEST(DebugEventBreakData) { | 7100 TEST(DebugEventBreakData) { |
| 7099 v8::HandleScope scope; | |
| 7100 DebugLocalContext env; | 7101 DebugLocalContext env; |
| 7102 v8::HandleScope scope(env->GetIsolate()); |
| 7101 v8::Debug::SetDebugEventListener2(DebugEventBreakDataChecker); | 7103 v8::Debug::SetDebugEventListener2(DebugEventBreakDataChecker); |
| 7102 | 7104 |
| 7103 TestClientData::constructor_call_counter = 0; | 7105 TestClientData::constructor_call_counter = 0; |
| 7104 TestClientData::destructor_call_counter = 0; | 7106 TestClientData::destructor_call_counter = 0; |
| 7105 | 7107 |
| 7106 expected_break_data = NULL; | 7108 expected_break_data = NULL; |
| 7107 was_debug_event_called = false; | 7109 was_debug_event_called = false; |
| 7108 was_debug_break_called = false; | 7110 was_debug_break_called = false; |
| 7109 v8::Debug::DebugBreakForCommand(); | 7111 v8::Debug::DebugBreakForCommand(); |
| 7110 v8::Script::Compile(v8::String::New("(function(x){return x;})(1);"))->Run(); | 7112 v8::Script::Compile(v8::String::New("(function(x){return x;})(1);"))->Run(); |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7172 } | 7174 } |
| 7173 | 7175 |
| 7174 v8::Debug::DebugBreak(); | 7176 v8::Debug::DebugBreak(); |
| 7175 } | 7177 } |
| 7176 } | 7178 } |
| 7177 | 7179 |
| 7178 | 7180 |
| 7179 // Test deoptimization when execution is broken using the debug break stack | 7181 // Test deoptimization when execution is broken using the debug break stack |
| 7180 // check interrupt. | 7182 // check interrupt. |
| 7181 TEST(DeoptimizeDuringDebugBreak) { | 7183 TEST(DeoptimizeDuringDebugBreak) { |
| 7182 v8::HandleScope scope; | |
| 7183 DebugLocalContext env; | 7184 DebugLocalContext env; |
| 7185 v8::HandleScope scope(env->GetIsolate()); |
| 7184 env.ExposeDebug(); | 7186 env.ExposeDebug(); |
| 7185 | 7187 |
| 7186 // Create a function for checking the function when hitting a break point. | 7188 // Create a function for checking the function when hitting a break point. |
| 7187 frame_function_name = CompileFunction(&env, | 7189 frame_function_name = CompileFunction(&env, |
| 7188 frame_function_name_source, | 7190 frame_function_name_source, |
| 7189 "frame_function_name"); | 7191 "frame_function_name"); |
| 7190 | 7192 |
| 7191 | 7193 |
| 7192 // Set a debug event listener which will keep interrupting execution until | 7194 // Set a debug event listener which will keep interrupting execution until |
| 7193 // debug break. When inside function bar it will deoptimize all functions. | 7195 // debug break. When inside function bar it will deoptimize all functions. |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7259 | 7261 |
| 7260 static v8::Handle<v8::Value> ScheduleBreak(const v8::Arguments& args) { | 7262 static v8::Handle<v8::Value> ScheduleBreak(const v8::Arguments& args) { |
| 7261 v8::Debug::SetDebugEventListener(DebugEventBreakWithOptimizedStack, | 7263 v8::Debug::SetDebugEventListener(DebugEventBreakWithOptimizedStack, |
| 7262 v8::Undefined()); | 7264 v8::Undefined()); |
| 7263 v8::Debug::DebugBreak(); | 7265 v8::Debug::DebugBreak(); |
| 7264 return v8::Undefined(); | 7266 return v8::Undefined(); |
| 7265 } | 7267 } |
| 7266 | 7268 |
| 7267 | 7269 |
| 7268 TEST(DebugBreakStackInspection) { | 7270 TEST(DebugBreakStackInspection) { |
| 7269 v8::HandleScope scope; | |
| 7270 DebugLocalContext env; | 7271 DebugLocalContext env; |
| 7272 v8::HandleScope scope(env->GetIsolate()); |
| 7271 | 7273 |
| 7272 frame_function_name = | 7274 frame_function_name = |
| 7273 CompileFunction(&env, frame_function_name_source, "frame_function_name"); | 7275 CompileFunction(&env, frame_function_name_source, "frame_function_name"); |
| 7274 frame_argument_name = | 7276 frame_argument_name = |
| 7275 CompileFunction(&env, frame_argument_name_source, "frame_argument_name"); | 7277 CompileFunction(&env, frame_argument_name_source, "frame_argument_name"); |
| 7276 frame_argument_value = CompileFunction(&env, | 7278 frame_argument_value = CompileFunction(&env, |
| 7277 frame_argument_value_source, | 7279 frame_argument_value_source, |
| 7278 "frame_argument_value"); | 7280 "frame_argument_value"); |
| 7279 frame_local_name = | 7281 frame_local_name = |
| 7280 CompileFunction(&env, frame_local_name_source, "frame_local_name"); | 7282 CompileFunction(&env, frame_local_name_source, "frame_local_name"); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7332 CompileRun("f();"); | 7334 CompileRun("f();"); |
| 7333 CHECK_EQ(kBreaksPerTest, break_point_hit_count); | 7335 CHECK_EQ(kBreaksPerTest, break_point_hit_count); |
| 7334 | 7336 |
| 7335 CHECK(!v8::V8::IsExecutionTerminating()); | 7337 CHECK(!v8::V8::IsExecutionTerminating()); |
| 7336 } | 7338 } |
| 7337 } | 7339 } |
| 7338 } | 7340 } |
| 7339 | 7341 |
| 7340 | 7342 |
| 7341 TEST(DebugBreakLoop) { | 7343 TEST(DebugBreakLoop) { |
| 7342 v8::HandleScope scope; | |
| 7343 DebugLocalContext env; | 7344 DebugLocalContext env; |
| 7345 v8::HandleScope scope(env->GetIsolate()); |
| 7344 | 7346 |
| 7345 // Register a debug event listener which sets the break flag and counts. | 7347 // Register a debug event listener which sets the break flag and counts. |
| 7346 v8::Debug::SetDebugEventListener(DebugEventBreakMax); | 7348 v8::Debug::SetDebugEventListener(DebugEventBreakMax); |
| 7347 | 7349 |
| 7348 // Create a function for getting the frame count when hitting the break. | 7350 // Create a function for getting the frame count when hitting the break. |
| 7349 frame_count = CompileFunction(&env, frame_count_source, "frame_count"); | 7351 frame_count = CompileFunction(&env, frame_count_source, "frame_count"); |
| 7350 | 7352 |
| 7351 CompileRun("var a = 1;"); | 7353 CompileRun("var a = 1;"); |
| 7352 CompileRun("function g() { }"); | 7354 CompileRun("function g() { }"); |
| 7353 CompileRun("function h() { }"); | 7355 CompileRun("function h() { }"); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7414 CHECK_EQ(expected_line_number[i], | 7416 CHECK_EQ(expected_line_number[i], |
| 7415 i::GetScriptLineNumber(source_script, result->Int32Value())); | 7417 i::GetScriptLineNumber(source_script, result->Int32Value())); |
| 7416 } | 7418 } |
| 7417 v8::Debug::SetDebugEventListener(NULL); | 7419 v8::Debug::SetDebugEventListener(NULL); |
| 7418 v8::V8::TerminateExecution(); | 7420 v8::V8::TerminateExecution(); |
| 7419 } | 7421 } |
| 7420 | 7422 |
| 7421 | 7423 |
| 7422 TEST(DebugBreakInline) { | 7424 TEST(DebugBreakInline) { |
| 7423 i::FLAG_allow_natives_syntax = true; | 7425 i::FLAG_allow_natives_syntax = true; |
| 7424 v8::HandleScope scope; | |
| 7425 DebugLocalContext env; | 7426 DebugLocalContext env; |
| 7427 v8::HandleScope scope(env->GetIsolate()); |
| 7426 const char* source = | 7428 const char* source = |
| 7427 "function debug(b) { \n" | 7429 "function debug(b) { \n" |
| 7428 " if (b) debugger; \n" | 7430 " if (b) debugger; \n" |
| 7429 "} \n" | 7431 "} \n" |
| 7430 "function f(b) { \n" | 7432 "function f(b) { \n" |
| 7431 " debug(b) \n" | 7433 " debug(b) \n" |
| 7432 "}; \n" | 7434 "}; \n" |
| 7433 "function g(b) { \n" | 7435 "function g(b) { \n" |
| 7434 " f(b); \n" | 7436 " f(b); \n" |
| 7435 "}; \n" | 7437 "}; \n" |
| (...skipping 26 matching lines...) Expand all Loading... |
| 7462 | 7464 |
| 7463 TEST(Regress131642) { | 7465 TEST(Regress131642) { |
| 7464 // Bug description: | 7466 // Bug description: |
| 7465 // When doing StepNext through the first script, the debugger is not reset | 7467 // When doing StepNext through the first script, the debugger is not reset |
| 7466 // after exiting through exception. A flawed implementation enabling the | 7468 // after exiting through exception. A flawed implementation enabling the |
| 7467 // debugger to step into Array.prototype.forEach breaks inside the callback | 7469 // debugger to step into Array.prototype.forEach breaks inside the callback |
| 7468 // for forEach in the second script under the assumption that we are in a | 7470 // for forEach in the second script under the assumption that we are in a |
| 7469 // recursive call. In an attempt to step out, we crawl the stack using the | 7471 // recursive call. In an attempt to step out, we crawl the stack using the |
| 7470 // recorded frame pointer from the first script and fail when not finding it | 7472 // recorded frame pointer from the first script and fail when not finding it |
| 7471 // on the stack. | 7473 // on the stack. |
| 7472 v8::HandleScope scope; | |
| 7473 DebugLocalContext env; | 7474 DebugLocalContext env; |
| 7475 v8::HandleScope scope(env->GetIsolate()); |
| 7474 v8::Debug::SetDebugEventListener(DebugEventStepNext); | 7476 v8::Debug::SetDebugEventListener(DebugEventStepNext); |
| 7475 | 7477 |
| 7476 // We step through the first script. It exits through an exception. We run | 7478 // We step through the first script. It exits through an exception. We run |
| 7477 // this inside a new frame to record a different FP than the second script | 7479 // this inside a new frame to record a different FP than the second script |
| 7478 // would expect. | 7480 // would expect. |
| 7479 const char* script_1 = "debugger; throw new Error();"; | 7481 const char* script_1 = "debugger; throw new Error();"; |
| 7480 RunScriptInANewCFrame(script_1); | 7482 RunScriptInANewCFrame(script_1); |
| 7481 | 7483 |
| 7482 // The second script uses forEach. | 7484 // The second script uses forEach. |
| 7483 const char* script_2 = "[0].forEach(function() { });"; | 7485 const char* script_2 = "[0].forEach(function() { });"; |
| 7484 CompileRun(script_2); | 7486 CompileRun(script_2); |
| 7485 | 7487 |
| 7486 v8::Debug::SetDebugEventListener(NULL); | 7488 v8::Debug::SetDebugEventListener(NULL); |
| 7487 } | 7489 } |
| 7488 | 7490 |
| 7489 | 7491 |
| 7490 // Import from test-heap.cc | 7492 // Import from test-heap.cc |
| 7491 int CountNativeContexts(); | 7493 int CountNativeContexts(); |
| 7492 | 7494 |
| 7493 | 7495 |
| 7494 static void NopListener(v8::DebugEvent event, | 7496 static void NopListener(v8::DebugEvent event, |
| 7495 v8::Handle<v8::Object> exec_state, | 7497 v8::Handle<v8::Object> exec_state, |
| 7496 v8::Handle<v8::Object> event_data, | 7498 v8::Handle<v8::Object> event_data, |
| 7497 v8::Handle<v8::Value> data) { | 7499 v8::Handle<v8::Value> data) { |
| 7498 } | 7500 } |
| 7499 | 7501 |
| 7500 | 7502 |
| 7501 TEST(DebuggerCreatesContextIffActive) { | 7503 TEST(DebuggerCreatesContextIffActive) { |
| 7502 v8::HandleScope scope; | |
| 7503 DebugLocalContext env; | 7504 DebugLocalContext env; |
| 7505 v8::HandleScope scope(env->GetIsolate()); |
| 7504 CHECK_EQ(1, CountNativeContexts()); | 7506 CHECK_EQ(1, CountNativeContexts()); |
| 7505 | 7507 |
| 7506 v8::Debug::SetDebugEventListener(NULL); | 7508 v8::Debug::SetDebugEventListener(NULL); |
| 7507 CompileRun("debugger;"); | 7509 CompileRun("debugger;"); |
| 7508 CHECK_EQ(1, CountNativeContexts()); | 7510 CHECK_EQ(1, CountNativeContexts()); |
| 7509 | 7511 |
| 7510 v8::Debug::SetDebugEventListener(NopListener); | 7512 v8::Debug::SetDebugEventListener(NopListener); |
| 7511 CompileRun("debugger;"); | 7513 CompileRun("debugger;"); |
| 7512 CHECK_EQ(2, CountNativeContexts()); | 7514 CHECK_EQ(2, CountNativeContexts()); |
| 7513 | 7515 |
| 7514 v8::Debug::SetDebugEventListener(NULL); | 7516 v8::Debug::SetDebugEventListener(NULL); |
| 7515 } | 7517 } |
| 7516 | 7518 |
| 7517 | 7519 |
| 7518 TEST(LiveEditEnabled) { | 7520 TEST(LiveEditEnabled) { |
| 7519 v8::internal::FLAG_allow_natives_syntax = true; | 7521 v8::internal::FLAG_allow_natives_syntax = true; |
| 7520 v8::HandleScope scope; | 7522 LocalContext env; |
| 7521 LocalContext context; | 7523 v8::HandleScope scope(env->GetIsolate()); |
| 7522 v8::Debug::SetLiveEditEnabled(true); | 7524 v8::Debug::SetLiveEditEnabled(true); |
| 7523 CompileRun("%LiveEditCompareStrings('', '')"); | 7525 CompileRun("%LiveEditCompareStrings('', '')"); |
| 7524 } | 7526 } |
| 7525 | 7527 |
| 7526 | 7528 |
| 7527 TEST(LiveEditDisabled) { | 7529 TEST(LiveEditDisabled) { |
| 7528 v8::internal::FLAG_allow_natives_syntax = true; | 7530 v8::internal::FLAG_allow_natives_syntax = true; |
| 7529 v8::HandleScope scope; | 7531 LocalContext env; |
| 7530 LocalContext context; | 7532 v8::HandleScope scope(env->GetIsolate()); |
| 7531 v8::Debug::SetLiveEditEnabled(false); | 7533 v8::Debug::SetLiveEditEnabled(false); |
| 7532 CompileRun("%LiveEditCompareStrings('', '')"); | 7534 CompileRun("%LiveEditCompareStrings('', '')"); |
| 7533 } | 7535 } |
| 7534 | 7536 |
| 7535 | 7537 |
| 7536 #endif // ENABLE_DEBUGGER_SUPPORT | 7538 #endif // ENABLE_DEBUGGER_SUPPORT |
| OLD | NEW |