Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(47)

Side by Side Diff: test/cctest/test-debug.cc

Issue 40317: Added unique id to all scripts (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 11 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/objects-inl.h ('k') | test/mjsunit/debug-script-breakpoints.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2007-2008 the V8 project authors. All rights reserved. 1 // Copyright 2007-2008 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 EmbeddedVector<char, SMALL_STRING_BUFFER_SIZE> buffer; 203 EmbeddedVector<char, SMALL_STRING_BUFFER_SIZE> buffer;
204 OS::SNPrintF(buffer, 204 OS::SNPrintF(buffer,
205 "debug.Debug.setBreakPoint(%s,%d,%d)", 205 "debug.Debug.setBreakPoint(%s,%d,%d)",
206 function_name, line, position); 206 function_name, line, position);
207 buffer[SMALL_STRING_BUFFER_SIZE - 1] = '\0'; 207 buffer[SMALL_STRING_BUFFER_SIZE - 1] = '\0';
208 v8::Handle<v8::String> str = v8::String::New(buffer.start()); 208 v8::Handle<v8::String> str = v8::String::New(buffer.start());
209 return v8::Script::Compile(str)->Run()->Int32Value(); 209 return v8::Script::Compile(str)->Run()->Int32Value();
210 } 210 }
211 211
212 212
213 // Set a break point in a script using the global Debug object. 213 // Set a break point in a script identified by id using the global Debug object.
214 static int SetScriptBreakPointFromJS(const char* script_data, 214 static int SetScriptBreakPointByIdFromJS(int script_id, int line, int column) {
215 int line, int column) {
216 EmbeddedVector<char, SMALL_STRING_BUFFER_SIZE> buffer; 215 EmbeddedVector<char, SMALL_STRING_BUFFER_SIZE> buffer;
217 if (column >= 0) { 216 if (column >= 0) {
218 // Column specified set script break point on precise location. 217 // Column specified set script break point on precise location.
219 OS::SNPrintF(buffer, 218 OS::SNPrintF(buffer,
220 "debug.Debug.setScriptBreakPoint(\"%s\",%d,%d)", 219 "debug.Debug.setScriptBreakPointById(%d,%d,%d)",
221 script_data, line, column); 220 script_id, line, column);
222 } else { 221 } else {
223 // Column not specified set script break point on line. 222 // Column not specified set script break point on line.
224 OS::SNPrintF(buffer, 223 OS::SNPrintF(buffer,
225 "debug.Debug.setScriptBreakPoint(\"%s\",%d)", 224 "debug.Debug.setScriptBreakPointById(%d,%d)",
226 script_data, line); 225 script_id, line);
227 } 226 }
228 buffer[SMALL_STRING_BUFFER_SIZE - 1] = '\0'; 227 buffer[SMALL_STRING_BUFFER_SIZE - 1] = '\0';
229 { 228 {
230 v8::TryCatch try_catch; 229 v8::TryCatch try_catch;
231 v8::Handle<v8::String> str = v8::String::New(buffer.start()); 230 v8::Handle<v8::String> str = v8::String::New(buffer.start());
232 v8::Handle<v8::Value> value = v8::Script::Compile(str)->Run(); 231 v8::Handle<v8::Value> value = v8::Script::Compile(str)->Run();
233 ASSERT(!try_catch.HasCaught()); 232 ASSERT(!try_catch.HasCaught());
234 return value->Int32Value(); 233 return value->Int32Value();
235 } 234 }
236 } 235 }
237 236
238 237
238 // Set a break point in a script identified by name using the global Debug
239 // object.
240 static int SetScriptBreakPointByNameFromJS(const char* script_name,
241 int line, int column) {
242 EmbeddedVector<char, SMALL_STRING_BUFFER_SIZE> buffer;
243 if (column >= 0) {
244 // Column specified set script break point on precise location.
245 OS::SNPrintF(buffer,
246 "debug.Debug.setScriptBreakPointByName(\"%s\",%d,%d)",
247 script_name, line, column);
248 } else {
249 // Column not specified set script break point on line.
250 OS::SNPrintF(buffer,
251 "debug.Debug.setScriptBreakPointByName(\"%s\",%d)",
252 script_name, line);
253 }
254 buffer[SMALL_STRING_BUFFER_SIZE - 1] = '\0';
255 {
256 v8::TryCatch try_catch;
257 v8::Handle<v8::String> str = v8::String::New(buffer.start());
258 v8::Handle<v8::Value> value = v8::Script::Compile(str)->Run();
259 ASSERT(!try_catch.HasCaught());
260 return value->Int32Value();
261 }
262 }
263
264
239 // Clear a break point. 265 // Clear a break point.
240 static void ClearBreakPoint(int break_point) { 266 static void ClearBreakPoint(int break_point) {
241 Debug::ClearBreakPoint( 267 Debug::ClearBreakPoint(
242 Handle<Object>(v8::internal::Smi::FromInt(break_point))); 268 Handle<Object>(v8::internal::Smi::FromInt(break_point)));
243 } 269 }
244 270
245 271
246 // Clear a break point using the global Debug object. 272 // Clear a break point using the global Debug object.
247 static void ClearBreakPointFromJS(int break_point_number) { 273 static void ClearBreakPointFromJS(int break_point_number) {
248 EmbeddedVector<char, SMALL_STRING_BUFFER_SIZE> buffer; 274 EmbeddedVector<char, SMALL_STRING_BUFFER_SIZE> buffer;
(...skipping 910 matching lines...) Expand 10 before | Expand all | Expand 10 after
1159 1185
1160 v8::Debug::SetDebugEventListener(NULL); 1186 v8::Debug::SetDebugEventListener(NULL);
1161 CheckDebuggerUnloaded(); 1187 CheckDebuggerUnloaded();
1162 1188
1163 // Make sure that the break point numbers are consecutive. 1189 // Make sure that the break point numbers are consecutive.
1164 CHECK_EQ(1, bp1); 1190 CHECK_EQ(1, bp1);
1165 CHECK_EQ(2, bp2); 1191 CHECK_EQ(2, bp2);
1166 } 1192 }
1167 1193
1168 1194
1169 // Test that break points can be set using the global Debug object. 1195 // Test that break points on scripts identified by name can be set using the
1170 TEST(ScriptBreakPointThroughJavaScript) { 1196 // global Debug object.
1197 TEST(ScriptBreakPointByNameThroughJavaScript) {
1171 break_point_hit_count = 0; 1198 break_point_hit_count = 0;
1172 v8::HandleScope scope; 1199 v8::HandleScope scope;
1173 DebugLocalContext env; 1200 DebugLocalContext env;
1174 env.ExposeDebug(); 1201 env.ExposeDebug();
1175 1202
1176 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, 1203 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount,
1177 v8::Undefined()); 1204 v8::Undefined());
1178 v8::Script::Compile(v8::String::New("function foo(){bar();bar();}"))->Run();
1179 1205
1180 v8::Local<v8::String> script = v8::String::New( 1206 v8::Local<v8::String> script = v8::String::New(
1181 "function f() {\n" 1207 "function f() {\n"
1182 " function h() {\n" 1208 " function h() {\n"
1183 " a = 0; // line 2\n" 1209 " a = 0; // line 2\n"
1184 " }\n" 1210 " }\n"
1185 " b = 1; // line 4\n" 1211 " b = 1; // line 4\n"
1186 " return h();\n" 1212 " return h();\n"
1187 "}\n" 1213 "}\n"
1188 "\n" 1214 "\n"
(...skipping 17 matching lines...) Expand all
1206 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("g"))); 1232 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("g")));
1207 1233
1208 // Call f and g without break points. 1234 // Call f and g without break points.
1209 break_point_hit_count = 0; 1235 break_point_hit_count = 0;
1210 f->Call(env->Global(), 0, NULL); 1236 f->Call(env->Global(), 0, NULL);
1211 CHECK_EQ(0, break_point_hit_count); 1237 CHECK_EQ(0, break_point_hit_count);
1212 g->Call(env->Global(), 0, NULL); 1238 g->Call(env->Global(), 0, NULL);
1213 CHECK_EQ(0, break_point_hit_count); 1239 CHECK_EQ(0, break_point_hit_count);
1214 1240
1215 // Call f and g with break point on line 12. 1241 // Call f and g with break point on line 12.
1216 int sbp1 = SetScriptBreakPointFromJS("test", 12, 0); 1242 int sbp1 = SetScriptBreakPointByNameFromJS("test", 12, 0);
1217 break_point_hit_count = 0; 1243 break_point_hit_count = 0;
1218 f->Call(env->Global(), 0, NULL); 1244 f->Call(env->Global(), 0, NULL);
1219 CHECK_EQ(0, break_point_hit_count); 1245 CHECK_EQ(0, break_point_hit_count);
1220 g->Call(env->Global(), 0, NULL); 1246 g->Call(env->Global(), 0, NULL);
1221 CHECK_EQ(1, break_point_hit_count); 1247 CHECK_EQ(1, break_point_hit_count);
1222 1248
1223 // Remove the break point again. 1249 // Remove the break point again.
1224 break_point_hit_count = 0; 1250 break_point_hit_count = 0;
1225 ClearBreakPointFromJS(sbp1); 1251 ClearBreakPointFromJS(sbp1);
1226 f->Call(env->Global(), 0, NULL); 1252 f->Call(env->Global(), 0, NULL);
1227 CHECK_EQ(0, break_point_hit_count); 1253 CHECK_EQ(0, break_point_hit_count);
1228 g->Call(env->Global(), 0, NULL); 1254 g->Call(env->Global(), 0, NULL);
1229 CHECK_EQ(0, break_point_hit_count); 1255 CHECK_EQ(0, break_point_hit_count);
1230 1256
1231 // Call f and g with break point on line 2. 1257 // Call f and g with break point on line 2.
1232 int sbp2 = SetScriptBreakPointFromJS("test", 2, 0); 1258 int sbp2 = SetScriptBreakPointByNameFromJS("test", 2, 0);
1233 break_point_hit_count = 0; 1259 break_point_hit_count = 0;
1234 f->Call(env->Global(), 0, NULL); 1260 f->Call(env->Global(), 0, NULL);
1235 CHECK_EQ(1, break_point_hit_count); 1261 CHECK_EQ(1, break_point_hit_count);
1236 g->Call(env->Global(), 0, NULL); 1262 g->Call(env->Global(), 0, NULL);
1237 CHECK_EQ(2, break_point_hit_count); 1263 CHECK_EQ(2, break_point_hit_count);
1238 1264
1239 // Call f and g with break point on line 2, 4, 12, 14 and 15. 1265 // Call f and g with break point on line 2, 4, 12, 14 and 15.
1240 int sbp3 = SetScriptBreakPointFromJS("test", 4, 0); 1266 int sbp3 = SetScriptBreakPointByNameFromJS("test", 4, 0);
1241 int sbp4 = SetScriptBreakPointFromJS("test", 12, 0); 1267 int sbp4 = SetScriptBreakPointByNameFromJS("test", 12, 0);
1242 int sbp5 = SetScriptBreakPointFromJS("test", 14, 0); 1268 int sbp5 = SetScriptBreakPointByNameFromJS("test", 14, 0);
1243 int sbp6 = SetScriptBreakPointFromJS("test", 15, 0); 1269 int sbp6 = SetScriptBreakPointByNameFromJS("test", 15, 0);
1244 break_point_hit_count = 0; 1270 break_point_hit_count = 0;
1245 f->Call(env->Global(), 0, NULL); 1271 f->Call(env->Global(), 0, NULL);
1246 CHECK_EQ(2, break_point_hit_count); 1272 CHECK_EQ(2, break_point_hit_count);
1247 g->Call(env->Global(), 0, NULL); 1273 g->Call(env->Global(), 0, NULL);
1248 CHECK_EQ(7, break_point_hit_count); 1274 CHECK_EQ(7, break_point_hit_count);
1249 1275
1250 // Remove the all the break points again. 1276 // Remove all the break points again.
1251 break_point_hit_count = 0; 1277 break_point_hit_count = 0;
1252 ClearBreakPointFromJS(sbp2); 1278 ClearBreakPointFromJS(sbp2);
1253 ClearBreakPointFromJS(sbp3); 1279 ClearBreakPointFromJS(sbp3);
1254 ClearBreakPointFromJS(sbp4); 1280 ClearBreakPointFromJS(sbp4);
1255 ClearBreakPointFromJS(sbp5); 1281 ClearBreakPointFromJS(sbp5);
1256 ClearBreakPointFromJS(sbp6); 1282 ClearBreakPointFromJS(sbp6);
1257 f->Call(env->Global(), 0, NULL); 1283 f->Call(env->Global(), 0, NULL);
1258 CHECK_EQ(0, break_point_hit_count); 1284 CHECK_EQ(0, break_point_hit_count);
1259 g->Call(env->Global(), 0, NULL); 1285 g->Call(env->Global(), 0, NULL);
1260 CHECK_EQ(0, break_point_hit_count); 1286 CHECK_EQ(0, break_point_hit_count);
1261 1287
1262 // Now set a function break point
1263 int bp7 = SetBreakPointFromJS("g", 0, 0);
1264 g->Call(env->Global(), 0, NULL);
1265 CHECK_EQ(1, break_point_hit_count);
1266
1267 // Reload the script and get g again checking that the break point survives.
1268 // This tests that the function break point was converted to a script break
1269 // point.
1270 v8::Script::Compile(script, &origin)->Run();
1271 g = v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("g")));
1272 g->Call(env->Global(), 0, NULL);
1273 CHECK_EQ(2, break_point_hit_count);
1274
1275 v8::Debug::SetDebugEventListener(NULL); 1288 v8::Debug::SetDebugEventListener(NULL);
1276 CheckDebuggerUnloaded(); 1289 CheckDebuggerUnloaded();
1277 1290
1291 // Make sure that the break point numbers are consecutive.
1292 CHECK_EQ(1, sbp1);
1293 CHECK_EQ(2, sbp2);
1294 CHECK_EQ(3, sbp3);
1295 CHECK_EQ(4, sbp4);
1296 CHECK_EQ(5, sbp5);
1297 CHECK_EQ(6, sbp6);
1298 }
1299
1300
1301 TEST(ScriptBreakPointByIdThroughJavaScript) {
1302 break_point_hit_count = 0;
1303 v8::HandleScope scope;
1304 DebugLocalContext env;
1305 env.ExposeDebug();
1306
1307 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount,
1308 v8::Undefined());
1309
1310 v8::Local<v8::String> source = v8::String::New(
1311 "function f() {\n"
1312 " function h() {\n"
1313 " a = 0; // line 2\n"
1314 " }\n"
1315 " b = 1; // line 4\n"
1316 " return h();\n"
1317 "}\n"
1318 "\n"
1319 "function g() {\n"
1320 " function h() {\n"
1321 " a = 0;\n"
1322 " }\n"
1323 " b = 2; // line 12\n"
1324 " h();\n"
1325 " b = 3; // line 14\n"
1326 " f(); // line 15\n"
1327 "}");
1328
1329 // Compile the script and get the two functions.
1330 v8::ScriptOrigin origin =
1331 v8::ScriptOrigin(v8::String::New("test"));
1332 v8::Local<v8::Script> script = v8::Script::Compile(source, &origin);
1333 script->Run();
1334 v8::Local<v8::Function> f =
1335 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("f")));
1336 v8::Local<v8::Function> g =
1337 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("g")));
1338
1339 // Get the script id knowing that internally it is a 32 integer.
1340 uint32_t script_id = script->Id()->Uint32Value();
1341
1342 // Call f and g without break points.
1343 break_point_hit_count = 0;
1344 f->Call(env->Global(), 0, NULL);
1345 CHECK_EQ(0, break_point_hit_count);
1346 g->Call(env->Global(), 0, NULL);
1347 CHECK_EQ(0, break_point_hit_count);
1348
1349 // Call f and g with break point on line 12.
1350 int sbp1 = SetScriptBreakPointByIdFromJS(script_id, 12, 0);
1351 break_point_hit_count = 0;
1352 f->Call(env->Global(), 0, NULL);
1353 CHECK_EQ(0, break_point_hit_count);
1354 g->Call(env->Global(), 0, NULL);
1355 CHECK_EQ(1, break_point_hit_count);
1356
1357 // Remove the break point again.
1358 break_point_hit_count = 0;
1359 ClearBreakPointFromJS(sbp1);
1360 f->Call(env->Global(), 0, NULL);
1361 CHECK_EQ(0, break_point_hit_count);
1362 g->Call(env->Global(), 0, NULL);
1363 CHECK_EQ(0, break_point_hit_count);
1364
1365 // Call f and g with break point on line 2.
1366 int sbp2 = SetScriptBreakPointByIdFromJS(script_id, 2, 0);
1367 break_point_hit_count = 0;
1368 f->Call(env->Global(), 0, NULL);
1369 CHECK_EQ(1, break_point_hit_count);
1370 g->Call(env->Global(), 0, NULL);
1371 CHECK_EQ(2, break_point_hit_count);
1372
1373 // Call f and g with break point on line 2, 4, 12, 14 and 15.
1374 int sbp3 = SetScriptBreakPointByIdFromJS(script_id, 4, 0);
1375 int sbp4 = SetScriptBreakPointByIdFromJS(script_id, 12, 0);
1376 int sbp5 = SetScriptBreakPointByIdFromJS(script_id, 14, 0);
1377 int sbp6 = SetScriptBreakPointByIdFromJS(script_id, 15, 0);
1378 break_point_hit_count = 0;
1379 f->Call(env->Global(), 0, NULL);
1380 CHECK_EQ(2, break_point_hit_count);
1381 g->Call(env->Global(), 0, NULL);
1382 CHECK_EQ(7, break_point_hit_count);
1383
1384 // Remove all the break points again.
1385 break_point_hit_count = 0;
1386 ClearBreakPointFromJS(sbp2);
1387 ClearBreakPointFromJS(sbp3);
1388 ClearBreakPointFromJS(sbp4);
1389 ClearBreakPointFromJS(sbp5);
1390 ClearBreakPointFromJS(sbp6);
1391 f->Call(env->Global(), 0, NULL);
1392 CHECK_EQ(0, break_point_hit_count);
1393 g->Call(env->Global(), 0, NULL);
1394 CHECK_EQ(0, break_point_hit_count);
1395
1396 v8::Debug::SetDebugEventListener(NULL);
1397 CheckDebuggerUnloaded();
1398
1278 // Make sure that the break point numbers are consecutive. 1399 // Make sure that the break point numbers are consecutive.
1279 CHECK_EQ(1, sbp1); 1400 CHECK_EQ(1, sbp1);
1280 CHECK_EQ(2, sbp2); 1401 CHECK_EQ(2, sbp2);
1281 CHECK_EQ(3, sbp3); 1402 CHECK_EQ(3, sbp3);
1282 CHECK_EQ(4, sbp4); 1403 CHECK_EQ(4, sbp4);
1283 CHECK_EQ(5, sbp5); 1404 CHECK_EQ(5, sbp5);
1284 CHECK_EQ(6, sbp6); 1405 CHECK_EQ(6, sbp6);
1285 CHECK_EQ(7, bp7);
1286 } 1406 }
1287 1407
1288 1408
1289 // Test conditional script break points. 1409 // Test conditional script break points.
1290 TEST(EnableDisableScriptBreakPoint) { 1410 TEST(EnableDisableScriptBreakPoint) {
1291 break_point_hit_count = 0; 1411 break_point_hit_count = 0;
1292 v8::HandleScope scope; 1412 v8::HandleScope scope;
1293 DebugLocalContext env; 1413 DebugLocalContext env;
1294 env.ExposeDebug(); 1414 env.ExposeDebug();
1295 1415
1296 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount, 1416 v8::Debug::SetDebugEventListener(DebugEventBreakPointHitCount,
1297 v8::Undefined()); 1417 v8::Undefined());
1298 1418
1299 v8::Local<v8::String> script = v8::String::New( 1419 v8::Local<v8::String> script = v8::String::New(
1300 "function f() {\n" 1420 "function f() {\n"
1301 " a = 0; // line 1\n" 1421 " a = 0; // line 1\n"
1302 "};"); 1422 "};");
1303 1423
1304 // Compile the script and get function f. 1424 // Compile the script and get function f.
1305 v8::ScriptOrigin origin = 1425 v8::ScriptOrigin origin =
1306 v8::ScriptOrigin(v8::String::New("test")); 1426 v8::ScriptOrigin(v8::String::New("test"));
1307 v8::Script::Compile(script, &origin)->Run(); 1427 v8::Script::Compile(script, &origin)->Run();
1308 v8::Local<v8::Function> f = 1428 v8::Local<v8::Function> f =
1309 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("f"))); 1429 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("f")));
1310 1430
1311 // Set script break point on line 1 (in function f). 1431 // Set script break point on line 1 (in function f).
1312 int sbp = SetScriptBreakPointFromJS("test", 1, 0); 1432 int sbp = SetScriptBreakPointByNameFromJS("test", 1, 0);
1313 1433
1314 // Call f while enabeling and disabling the script break point. 1434 // Call f while enabeling and disabling the script break point.
1315 break_point_hit_count = 0; 1435 break_point_hit_count = 0;
1316 f->Call(env->Global(), 0, NULL); 1436 f->Call(env->Global(), 0, NULL);
1317 CHECK_EQ(1, break_point_hit_count); 1437 CHECK_EQ(1, break_point_hit_count);
1318 1438
1319 DisableScriptBreakPointFromJS(sbp); 1439 DisableScriptBreakPointFromJS(sbp);
1320 f->Call(env->Global(), 0, NULL); 1440 f->Call(env->Global(), 0, NULL);
1321 CHECK_EQ(1, break_point_hit_count); 1441 CHECK_EQ(1, break_point_hit_count);
1322 1442
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1363 "};"); 1483 "};");
1364 1484
1365 // Compile the script and get function f. 1485 // Compile the script and get function f.
1366 v8::ScriptOrigin origin = 1486 v8::ScriptOrigin origin =
1367 v8::ScriptOrigin(v8::String::New("test")); 1487 v8::ScriptOrigin(v8::String::New("test"));
1368 v8::Script::Compile(script, &origin)->Run(); 1488 v8::Script::Compile(script, &origin)->Run();
1369 v8::Local<v8::Function> f = 1489 v8::Local<v8::Function> f =
1370 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("f"))); 1490 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("f")));
1371 1491
1372 // Set script break point on line 5 (in function g). 1492 // Set script break point on line 5 (in function g).
1373 int sbp1 = SetScriptBreakPointFromJS("test", 5, 0); 1493 int sbp1 = SetScriptBreakPointByNameFromJS("test", 5, 0);
1374 1494
1375 // Call f with different conditions on the script break point. 1495 // Call f with different conditions on the script break point.
1376 break_point_hit_count = 0; 1496 break_point_hit_count = 0;
1377 ChangeScriptBreakPointConditionFromJS(sbp1, "false"); 1497 ChangeScriptBreakPointConditionFromJS(sbp1, "false");
1378 f->Call(env->Global(), 0, NULL); 1498 f->Call(env->Global(), 0, NULL);
1379 CHECK_EQ(0, break_point_hit_count); 1499 CHECK_EQ(0, break_point_hit_count);
1380 1500
1381 ChangeScriptBreakPointConditionFromJS(sbp1, "true"); 1501 ChangeScriptBreakPointConditionFromJS(sbp1, "true");
1382 break_point_hit_count = 0; 1502 break_point_hit_count = 0;
1383 f->Call(env->Global(), 0, NULL); 1503 f->Call(env->Global(), 0, NULL);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1421 "};"); 1541 "};");
1422 1542
1423 // Compile the script and get function f. 1543 // Compile the script and get function f.
1424 v8::ScriptOrigin origin = 1544 v8::ScriptOrigin origin =
1425 v8::ScriptOrigin(v8::String::New("test")); 1545 v8::ScriptOrigin(v8::String::New("test"));
1426 v8::Script::Compile(script, &origin)->Run(); 1546 v8::Script::Compile(script, &origin)->Run();
1427 v8::Local<v8::Function> f = 1547 v8::Local<v8::Function> f =
1428 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("f"))); 1548 v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("f")));
1429 1549
1430 // Set script break point on line 1 (in function f). 1550 // Set script break point on line 1 (in function f).
1431 int sbp = SetScriptBreakPointFromJS("test", 1, 0); 1551 int sbp = SetScriptBreakPointByNameFromJS("test", 1, 0);
1432 1552
1433 // Call f with different ignores on the script break point. 1553 // Call f with different ignores on the script break point.
1434 break_point_hit_count = 0; 1554 break_point_hit_count = 0;
1435 ChangeScriptBreakPointIgnoreCountFromJS(sbp, 1); 1555 ChangeScriptBreakPointIgnoreCountFromJS(sbp, 1);
1436 f->Call(env->Global(), 0, NULL); 1556 f->Call(env->Global(), 0, NULL);
1437 CHECK_EQ(0, break_point_hit_count); 1557 CHECK_EQ(0, break_point_hit_count);
1438 f->Call(env->Global(), 0, NULL); 1558 f->Call(env->Global(), 0, NULL);
1439 CHECK_EQ(1, break_point_hit_count); 1559 CHECK_EQ(1, break_point_hit_count);
1440 1560
1441 ChangeScriptBreakPointIgnoreCountFromJS(sbp, 5); 1561 ChangeScriptBreakPointIgnoreCountFromJS(sbp, 5);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1477 " a = 0; // line 2\n" 1597 " a = 0; // line 2\n"
1478 " }\n" 1598 " }\n"
1479 " b = 1; // line 4\n" 1599 " b = 1; // line 4\n"
1480 " return h();\n" 1600 " return h();\n"
1481 "}"); 1601 "}");
1482 1602
1483 v8::ScriptOrigin origin_1 = v8::ScriptOrigin(v8::String::New("1")); 1603 v8::ScriptOrigin origin_1 = v8::ScriptOrigin(v8::String::New("1"));
1484 v8::ScriptOrigin origin_2 = v8::ScriptOrigin(v8::String::New("2")); 1604 v8::ScriptOrigin origin_2 = v8::ScriptOrigin(v8::String::New("2"));
1485 1605
1486 // Set a script break point before the script is loaded. 1606 // Set a script break point before the script is loaded.
1487 SetScriptBreakPointFromJS("1", 2, 0); 1607 SetScriptBreakPointByNameFromJS("1", 2, 0);
1488 1608
1489 // Compile the script and get the function. 1609 // Compile the script and get the function.
1490 v8::Script::Compile(script, &origin_1)->Run(); 1610 v8::Script::Compile(script, &origin_1)->Run();
1491 f = v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("f"))); 1611 f = v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("f")));
1492 1612
1493 // Call f and check that the script break point is active. 1613 // Call f and check that the script break point is active.
1494 break_point_hit_count = 0; 1614 break_point_hit_count = 0;
1495 f->Call(env->Global(), 0, NULL); 1615 f->Call(env->Global(), 0, NULL);
1496 CHECK_EQ(1, break_point_hit_count); 1616 CHECK_EQ(1, break_point_hit_count);
1497 1617
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1538 v8::Local<v8::Function> g; 1658 v8::Local<v8::Function> g;
1539 v8::Local<v8::String> script_g = v8::String::New( 1659 v8::Local<v8::String> script_g = v8::String::New(
1540 "function g() {\n" 1660 "function g() {\n"
1541 " b = 0; // line 1\n" 1661 " b = 0; // line 1\n"
1542 "}"); 1662 "}");
1543 1663
1544 v8::ScriptOrigin origin = 1664 v8::ScriptOrigin origin =
1545 v8::ScriptOrigin(v8::String::New("test")); 1665 v8::ScriptOrigin(v8::String::New("test"));
1546 1666
1547 // Set a script break point before the scripts are loaded. 1667 // Set a script break point before the scripts are loaded.
1548 int sbp = SetScriptBreakPointFromJS("test", 1, 0); 1668 int sbp = SetScriptBreakPointByNameFromJS("test", 1, 0);
1549 1669
1550 // Compile the scripts with same script data and get the functions. 1670 // Compile the scripts with same script data and get the functions.
1551 v8::Script::Compile(script_f, &origin)->Run(); 1671 v8::Script::Compile(script_f, &origin)->Run();
1552 f = v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("f"))); 1672 f = v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("f")));
1553 v8::Script::Compile(script_g, &origin)->Run(); 1673 v8::Script::Compile(script_g, &origin)->Run();
1554 g = v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("g"))); 1674 g = v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("g")));
1555 1675
1556 // Call f and g and check that the script break point is active. 1676 // Call f and g and check that the script break point is active.
1557 break_point_hit_count = 0; 1677 break_point_hit_count = 0;
1558 f->Call(env->Global(), 0, NULL); 1678 f->Call(env->Global(), 0, NULL);
1559 CHECK_EQ(1, break_point_hit_count); 1679 CHECK_EQ(1, break_point_hit_count);
1560 g->Call(env->Global(), 0, NULL); 1680 g->Call(env->Global(), 0, NULL);
1561 CHECK_EQ(2, break_point_hit_count); 1681 CHECK_EQ(2, break_point_hit_count);
1562 1682
1563 // Clear the script break point. 1683 // Clear the script break point.
1564 ClearBreakPointFromJS(sbp); 1684 ClearBreakPointFromJS(sbp);
1565 1685
1566 // Call f and g and check that the script break point is no longer active. 1686 // Call f and g and check that the script break point is no longer active.
1567 break_point_hit_count = 0; 1687 break_point_hit_count = 0;
1568 f->Call(env->Global(), 0, NULL); 1688 f->Call(env->Global(), 0, NULL);
1569 CHECK_EQ(0, break_point_hit_count); 1689 CHECK_EQ(0, break_point_hit_count);
1570 g->Call(env->Global(), 0, NULL); 1690 g->Call(env->Global(), 0, NULL);
1571 CHECK_EQ(0, break_point_hit_count); 1691 CHECK_EQ(0, break_point_hit_count);
1572 1692
1573 // Set script break point with the scripts loaded. 1693 // Set script break point with the scripts loaded.
1574 sbp = SetScriptBreakPointFromJS("test", 1, 0); 1694 sbp = SetScriptBreakPointByNameFromJS("test", 1, 0);
1575 1695
1576 // Call f and g and check that the script break point is active. 1696 // Call f and g and check that the script break point is active.
1577 break_point_hit_count = 0; 1697 break_point_hit_count = 0;
1578 f->Call(env->Global(), 0, NULL); 1698 f->Call(env->Global(), 0, NULL);
1579 CHECK_EQ(1, break_point_hit_count); 1699 CHECK_EQ(1, break_point_hit_count);
1580 g->Call(env->Global(), 0, NULL); 1700 g->Call(env->Global(), 0, NULL);
1581 CHECK_EQ(2, break_point_hit_count); 1701 CHECK_EQ(2, break_point_hit_count);
1582 1702
1583 v8::Debug::SetDebugEventListener(NULL); 1703 v8::Debug::SetDebugEventListener(NULL);
1584 CheckDebuggerUnloaded(); 1704 CheckDebuggerUnloaded();
(...skipping 15 matching lines...) Expand all
1600 "function f() {\n" 1720 "function f() {\n"
1601 " a = 0; // line 8 as this script has line offset 7\n" 1721 " a = 0; // line 8 as this script has line offset 7\n"
1602 " b = 0; // line 9 as this script has line offset 7\n" 1722 " b = 0; // line 9 as this script has line offset 7\n"
1603 "}"); 1723 "}");
1604 1724
1605 // Create script origin both name and line offset. 1725 // Create script origin both name and line offset.
1606 v8::ScriptOrigin origin(v8::String::New("test.html"), 1726 v8::ScriptOrigin origin(v8::String::New("test.html"),
1607 v8::Integer::New(7)); 1727 v8::Integer::New(7));
1608 1728
1609 // Set two script break points before the script is loaded. 1729 // Set two script break points before the script is loaded.
1610 int sbp1 = SetScriptBreakPointFromJS("test.html", 8, 0); 1730 int sbp1 = SetScriptBreakPointByNameFromJS("test.html", 8, 0);
1611 int sbp2 = SetScriptBreakPointFromJS("test.html", 9, 0); 1731 int sbp2 = SetScriptBreakPointByNameFromJS("test.html", 9, 0);
1612 1732
1613 // Compile the script and get the function. 1733 // Compile the script and get the function.
1614 v8::Script::Compile(script, &origin)->Run(); 1734 v8::Script::Compile(script, &origin)->Run();
1615 f = v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("f"))); 1735 f = v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("f")));
1616 1736
1617 // Call f and check that the script break point is active. 1737 // Call f and check that the script break point is active.
1618 break_point_hit_count = 0; 1738 break_point_hit_count = 0;
1619 f->Call(env->Global(), 0, NULL); 1739 f->Call(env->Global(), 0, NULL);
1620 CHECK_EQ(2, break_point_hit_count); 1740 CHECK_EQ(2, break_point_hit_count);
1621 1741
1622 // Clear the script break points. 1742 // Clear the script break points.
1623 ClearBreakPointFromJS(sbp1); 1743 ClearBreakPointFromJS(sbp1);
1624 ClearBreakPointFromJS(sbp2); 1744 ClearBreakPointFromJS(sbp2);
1625 1745
1626 // Call f and check that no script break points are active. 1746 // Call f and check that no script break points are active.
1627 break_point_hit_count = 0; 1747 break_point_hit_count = 0;
1628 f->Call(env->Global(), 0, NULL); 1748 f->Call(env->Global(), 0, NULL);
1629 CHECK_EQ(0, break_point_hit_count); 1749 CHECK_EQ(0, break_point_hit_count);
1630 1750
1631 // Set a script break point with the script loaded. 1751 // Set a script break point with the script loaded.
1632 sbp1 = SetScriptBreakPointFromJS("test.html", 9, 0); 1752 sbp1 = SetScriptBreakPointByNameFromJS("test.html", 9, 0);
1633 1753
1634 // Call f and check that the script break point is active. 1754 // Call f and check that the script break point is active.
1635 break_point_hit_count = 0; 1755 break_point_hit_count = 0;
1636 f->Call(env->Global(), 0, NULL); 1756 f->Call(env->Global(), 0, NULL);
1637 CHECK_EQ(1, break_point_hit_count); 1757 CHECK_EQ(1, break_point_hit_count);
1638 1758
1639 v8::Debug::SetDebugEventListener(NULL); 1759 v8::Debug::SetDebugEventListener(NULL);
1640 CheckDebuggerUnloaded(); 1760 CheckDebuggerUnloaded();
1641 } 1761 }
1642 1762
(...skipping 23 matching lines...) Expand all
1666 " /* xx */ function g() { // line 5\n" 1786 " /* xx */ function g() { // line 5\n"
1667 " function h() { // line 6\n" 1787 " function h() { // line 6\n"
1668 " a = 3; // line 7\n" 1788 " a = 3; // line 7\n"
1669 " }\n" 1789 " }\n"
1670 " h(); // line 9\n" 1790 " h(); // line 9\n"
1671 " a = 4; // line 10\n" 1791 " a = 4; // line 10\n"
1672 " }\n" 1792 " }\n"
1673 " a=5; // line 12"); 1793 " a=5; // line 12");
1674 1794
1675 // Set a couple script break point before the script is loaded. 1795 // Set a couple script break point before the script is loaded.
1676 int sbp1 = SetScriptBreakPointFromJS("test.html", 0, -1); 1796 int sbp1 = SetScriptBreakPointByNameFromJS("test.html", 0, -1);
1677 int sbp2 = SetScriptBreakPointFromJS("test.html", 1, -1); 1797 int sbp2 = SetScriptBreakPointByNameFromJS("test.html", 1, -1);
1678 int sbp3 = SetScriptBreakPointFromJS("test.html", 5, -1); 1798 int sbp3 = SetScriptBreakPointByNameFromJS("test.html", 5, -1);
1679 1799
1680 // Compile the script and get the function. 1800 // Compile the script and get the function.
1681 break_point_hit_count = 0; 1801 break_point_hit_count = 0;
1682 v8::ScriptOrigin origin(v8::String::New("test.html"), v8::Integer::New(0)); 1802 v8::ScriptOrigin origin(v8::String::New("test.html"), v8::Integer::New(0));
1683 v8::Script::Compile(script, &origin)->Run(); 1803 v8::Script::Compile(script, &origin)->Run();
1684 f = v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("f"))); 1804 f = v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("f")));
1685 g = v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("g"))); 1805 g = v8::Local<v8::Function>::Cast(env->Global()->Get(v8::String::New("g")));
1686 1806
1687 // Chesk that a break point was hit when the script was run. 1807 // Chesk that a break point was hit when the script was run.
1688 CHECK_EQ(1, break_point_hit_count); 1808 CHECK_EQ(1, break_point_hit_count);
1689 CHECK_EQ(0, strlen(last_function_hit)); 1809 CHECK_EQ(0, strlen(last_function_hit));
1690 1810
1691 // Call f and check that the script break point. 1811 // Call f and check that the script break point.
1692 f->Call(env->Global(), 0, NULL); 1812 f->Call(env->Global(), 0, NULL);
1693 CHECK_EQ(2, break_point_hit_count); 1813 CHECK_EQ(2, break_point_hit_count);
1694 CHECK_EQ("f", last_function_hit); 1814 CHECK_EQ("f", last_function_hit);
1695 1815
1696 // Call g and check that the script break point. 1816 // Call g and check that the script break point.
1697 g->Call(env->Global(), 0, NULL); 1817 g->Call(env->Global(), 0, NULL);
1698 CHECK_EQ(3, break_point_hit_count); 1818 CHECK_EQ(3, break_point_hit_count);
1699 CHECK_EQ("g", last_function_hit); 1819 CHECK_EQ("g", last_function_hit);
1700 1820
1701 // Clear the script break point on g and set one on h. 1821 // Clear the script break point on g and set one on h.
1702 ClearBreakPointFromJS(sbp3); 1822 ClearBreakPointFromJS(sbp3);
1703 int sbp4 = SetScriptBreakPointFromJS("test.html", 6, -1); 1823 int sbp4 = SetScriptBreakPointByNameFromJS("test.html", 6, -1);
1704 1824
1705 // Call g and check that the script break point in h is hit. 1825 // Call g and check that the script break point in h is hit.
1706 g->Call(env->Global(), 0, NULL); 1826 g->Call(env->Global(), 0, NULL);
1707 CHECK_EQ(4, break_point_hit_count); 1827 CHECK_EQ(4, break_point_hit_count);
1708 CHECK_EQ("h", last_function_hit); 1828 CHECK_EQ("h", last_function_hit);
1709 1829
1710 // Clear break points in f and h. Set a new one in the script between 1830 // Clear break points in f and h. Set a new one in the script between
1711 // functions f and g and test that there is no break points in f and g any 1831 // functions f and g and test that there is no break points in f and g any
1712 // more. 1832 // more.
1713 ClearBreakPointFromJS(sbp2); 1833 ClearBreakPointFromJS(sbp2);
1714 ClearBreakPointFromJS(sbp4); 1834 ClearBreakPointFromJS(sbp4);
1715 int sbp5 = SetScriptBreakPointFromJS("test.html", 4, -1); 1835 int sbp5 = SetScriptBreakPointByNameFromJS("test.html", 4, -1);
1716 break_point_hit_count = 0; 1836 break_point_hit_count = 0;
1717 f->Call(env->Global(), 0, NULL); 1837 f->Call(env->Global(), 0, NULL);
1718 g->Call(env->Global(), 0, NULL); 1838 g->Call(env->Global(), 0, NULL);
1719 CHECK_EQ(0, break_point_hit_count); 1839 CHECK_EQ(0, break_point_hit_count);
1720 1840
1721 // Reload the script which should hit two break points. 1841 // Reload the script which should hit two break points.
1722 break_point_hit_count = 0; 1842 break_point_hit_count = 0;
1723 v8::Script::Compile(script, &origin)->Run(); 1843 v8::Script::Compile(script, &origin)->Run();
1724 CHECK_EQ(2, break_point_hit_count); 1844 CHECK_EQ(2, break_point_hit_count);
1725 CHECK_EQ(0, strlen(last_function_hit)); 1845 CHECK_EQ(0, strlen(last_function_hit));
1726 1846
1727 // Set a break point in the code after the last function decleration. 1847 // Set a break point in the code after the last function decleration.
1728 int sbp6 = SetScriptBreakPointFromJS("test.html", 12, -1); 1848 int sbp6 = SetScriptBreakPointByNameFromJS("test.html", 12, -1);
1729 1849
1730 // Reload the script which should hit three break points. 1850 // Reload the script which should hit three break points.
1731 break_point_hit_count = 0; 1851 break_point_hit_count = 0;
1732 v8::Script::Compile(script, &origin)->Run(); 1852 v8::Script::Compile(script, &origin)->Run();
1733 CHECK_EQ(3, break_point_hit_count); 1853 CHECK_EQ(3, break_point_hit_count);
1734 CHECK_EQ(0, strlen(last_function_hit)); 1854 CHECK_EQ(0, strlen(last_function_hit));
1735 1855
1736 // Clear the last break points, and reload the script which should not hit any 1856 // Clear the last break points, and reload the script which should not hit any
1737 // break points. 1857 // break points.
1738 ClearBreakPointFromJS(sbp1); 1858 ClearBreakPointFromJS(sbp1);
(...skipping 1949 matching lines...) Expand 10 before | Expand all | Expand 10 after
3688 3808
3689 // Fill a host dispatch and a continue command on the command queue before 3809 // Fill a host dispatch and a continue command on the command queue before
3690 // generating a debug break. 3810 // generating a debug break.
3691 v8::Debug::SendHostDispatch(NULL); 3811 v8::Debug::SendHostDispatch(NULL);
3692 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_continue, buffer)); 3812 v8::Debug::SendCommand(buffer, AsciiToUtf16(command_continue, buffer));
3693 CompileRun("debugger"); 3813 CompileRun("debugger");
3694 3814
3695 // The host dispatch callback should be called. 3815 // The host dispatch callback should be called.
3696 CHECK_EQ(1, host_dispatch_hit_count); 3816 CHECK_EQ(1, host_dispatch_hit_count);
3697 } 3817 }
OLDNEW
« no previous file with comments | « src/objects-inl.h ('k') | test/mjsunit/debug-script-breakpoints.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698