OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "include/dart_debugger_api.h" | 5 #include "include/dart_debugger_api.h" |
6 #include "platform/assert.h" | 6 #include "platform/assert.h" |
7 #include "vm/dart_api_impl.h" | 7 #include "vm/dart_api_impl.h" |
8 #include "vm/thread.h" | 8 #include "vm/thread.h" |
9 #include "vm/unit_test.h" | 9 #include "vm/unit_test.h" |
10 | 10 |
(...skipping 1215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1226 { | 1226 { |
1227 MonitorLocker ml(sync); | 1227 MonitorLocker ml(sync); |
1228 while (interrupt_isolate_id != ILLEGAL_ISOLATE_ID) { | 1228 while (interrupt_isolate_id != ILLEGAL_ISOLATE_ID) { |
1229 ml.Wait(); | 1229 ml.Wait(); |
1230 } | 1230 } |
1231 } | 1231 } |
1232 EXPECT(interrupt_isolate_id == ILLEGAL_ISOLATE_ID); | 1232 EXPECT(interrupt_isolate_id == ILLEGAL_ISOLATE_ID); |
1233 } | 1233 } |
1234 | 1234 |
1235 | 1235 |
1236 // TODO(tball): enable once problem with context variables is | 1236 static void StackTraceDump1BreakpointHandler(Dart_IsolateId isolate_id, |
1237 // fixed, where frame_ctx_level is sometimes off by 1 (issues 8593 and 8594) | 1237 Dart_Breakpoint bpt, |
1238 //static void StackTraceDump1BreakpointHandler(Dart_IsolateId isolate_id, | 1238 Dart_StackTrace trace) { |
1239 // Dart_Breakpoint bpt, | 1239 const int kStackTraceLen = 4; |
1240 // Dart_StackTrace trace) { | 1240 static const char* expected_trace[kStackTraceLen] = { |
1241 // const int kStackTraceLen = 4; | 1241 "local_to_main", |
1242 // static const char* expected_trace[kStackTraceLen] = { | 1242 "Test.local1_to_func1", |
1243 // "local_to_main", | 1243 "Test.func1", |
1244 // "Test.local1_to_func1", | 1244 "main" |
1245 // "Test.func1", | 1245 }; |
1246 // "main" | 1246 |
1247 // }; | 1247 intptr_t trace_len; |
1248 // | 1248 Dart_Handle res = Dart_StackTraceLength(trace, &trace_len); |
1249 // intptr_t trace_len; | 1249 EXPECT_VALID(res); |
1250 // Dart_Handle res = Dart_StackTraceLength(trace, &trace_len); | 1250 EXPECT_EQ(kStackTraceLen, trace_len); |
1251 // EXPECT_VALID(res); | 1251 |
1252 // EXPECT_EQ(kStackTraceLen, trace_len); | 1252 // Frame 0 corresponding to "local_to_main". |
1253 // | 1253 Dart_Handle frame0_locals = Dart_NewList(8); |
1254 // // Frame 0 corresponding to "local_to_main". | 1254 Dart_ListSetAt(frame0_locals, 0, NewString("i")); |
1255 // Dart_Handle frame0_locals = Dart_NewList(8); | 1255 Dart_ListSetAt(frame0_locals, 1, Dart_NewInteger(76)); |
1256 // Dart_ListSetAt(frame0_locals, 0, NewString("i")); | 1256 Dart_ListSetAt(frame0_locals, 2, NewString("j")); |
1257 // Dart_ListSetAt(frame0_locals, 1, Dart_NewInteger(76)); | 1257 Dart_ListSetAt(frame0_locals, 3, Dart_NewInteger(119)); |
1258 // Dart_ListSetAt(frame0_locals, 2, NewString("j")); | 1258 Dart_ListSetAt(frame0_locals, 4, NewString("k")); |
1259 // Dart_ListSetAt(frame0_locals, 3, Dart_NewInteger(119)); | 1259 Dart_ListSetAt(frame0_locals, 5, Dart_NewInteger(66)); |
1260 // Dart_ListSetAt(frame0_locals, 4, NewString("k")); | 1260 Dart_ListSetAt(frame0_locals, 6, NewString("l")); |
1261 // Dart_ListSetAt(frame0_locals, 5, Dart_NewInteger(66)); | 1261 Dart_ListSetAt(frame0_locals, 7, Dart_NewInteger(99)); |
1262 // Dart_ListSetAt(frame0_locals, 6, NewString("l")); | 1262 |
1263 // Dart_ListSetAt(frame0_locals, 7, Dart_NewInteger(99)); | 1263 // Frame 1 corresponding to "Test.local1_to_func1". |
1264 // | 1264 Dart_Handle frame1_locals = Dart_NewList(14); |
1265 // // Frame 1 corresponding to "Test.local1_to_func1". | 1265 Dart_ListSetAt(frame1_locals, 0, NewString("i")); |
1266 // Dart_Handle frame1_locals = Dart_NewList(14); | 1266 Dart_ListSetAt(frame1_locals, 1, Dart_NewInteger(11)); |
1267 // Dart_ListSetAt(frame1_locals, 0, NewString("i")); | 1267 Dart_ListSetAt(frame1_locals, 2, NewString("j")); |
1268 // Dart_ListSetAt(frame1_locals, 1, Dart_NewInteger(11)); | 1268 Dart_ListSetAt(frame1_locals, 3, Dart_NewInteger(22)); |
1269 // Dart_ListSetAt(frame1_locals, 2, NewString("j")); | 1269 Dart_ListSetAt(frame1_locals, 4, NewString("k")); |
1270 // Dart_ListSetAt(frame1_locals, 3, Dart_NewInteger(22)); | 1270 Dart_ListSetAt(frame1_locals, 5, Dart_NewInteger(33)); |
1271 // Dart_ListSetAt(frame1_locals, 4, NewString("k")); | 1271 Dart_ListSetAt(frame1_locals, 6, NewString("l")); |
1272 // Dart_ListSetAt(frame1_locals, 5, Dart_NewInteger(33)); | 1272 Dart_ListSetAt(frame1_locals, 7, Dart_NewInteger(44)); |
1273 // Dart_ListSetAt(frame1_locals, 6, NewString("l")); | 1273 Dart_ListSetAt(frame1_locals, 8, NewString("m")); |
1274 // Dart_ListSetAt(frame1_locals, 7, Dart_NewInteger(44)); | 1274 Dart_ListSetAt(frame1_locals, 9, Dart_NewInteger(55)); |
1275 // Dart_ListSetAt(frame1_locals, 8, NewString("m")); | 1275 Dart_ListSetAt(frame1_locals, 10, NewString("func")); |
1276 // Dart_ListSetAt(frame1_locals, 9, Dart_NewInteger(55)); | 1276 Dart_ListSetAt(frame1_locals, 11, Dart_Null()); |
1277 // Dart_ListSetAt(frame1_locals, 10, NewString("func")); | 1277 Dart_ListSetAt(frame1_locals, 12, NewString("n")); |
1278 // Dart_ListSetAt(frame1_locals, 11, Dart_Null()); | 1278 Dart_ListSetAt(frame1_locals, 13, Dart_Null()); |
1279 // Dart_ListSetAt(frame1_locals, 12, NewString("n")); | 1279 |
1280 // Dart_ListSetAt(frame1_locals, 13, Dart_Null()); | 1280 // Frame 2 corresponding to "Test.func1". |
1281 // | 1281 Dart_Handle frame2_locals = Dart_NewList(18); |
1282 // // Frame 2 corresponding to "Test.func1". | 1282 Dart_ListSetAt(frame2_locals, 0, NewString("this")); |
1283 // Dart_Handle frame2_locals = Dart_NewList(18); | 1283 Dart_ListSetAt(frame2_locals, 1, Dart_Null()); |
1284 // Dart_ListSetAt(frame2_locals, 0, NewString("this")); | 1284 Dart_ListSetAt(frame2_locals, 2, NewString("func")); |
1285 // Dart_ListSetAt(frame2_locals, 1, Dart_Null()); | 1285 Dart_ListSetAt(frame2_locals, 3, Dart_Null()); |
1286 // Dart_ListSetAt(frame2_locals, 2, NewString("func")); | 1286 Dart_ListSetAt(frame2_locals, 4, NewString("i")); |
1287 // Dart_ListSetAt(frame2_locals, 3, Dart_Null()); | 1287 Dart_ListSetAt(frame2_locals, 5, Dart_NewInteger(11)); |
1288 // Dart_ListSetAt(frame2_locals, 4, NewString("i")); | 1288 Dart_ListSetAt(frame2_locals, 6, NewString("j")); |
1289 // Dart_ListSetAt(frame2_locals, 5, Dart_NewInteger(11)); | 1289 Dart_ListSetAt(frame2_locals, 7, Dart_NewInteger(22)); |
1290 // Dart_ListSetAt(frame2_locals, 6, NewString("j")); | 1290 Dart_ListSetAt(frame2_locals, 8, NewString("k")); |
1291 // Dart_ListSetAt(frame2_locals, 7, Dart_NewInteger(22)); | 1291 Dart_ListSetAt(frame2_locals, 9, Dart_NewInteger(33)); |
1292 // Dart_ListSetAt(frame2_locals, 8, NewString("k")); | 1292 Dart_ListSetAt(frame2_locals, 10, NewString("l")); |
1293 // Dart_ListSetAt(frame2_locals, 9, Dart_NewInteger(33)); | 1293 Dart_ListSetAt(frame2_locals, 11, Dart_NewInteger(44)); |
1294 // Dart_ListSetAt(frame2_locals, 10, NewString("l")); | 1294 Dart_ListSetAt(frame2_locals, 12, NewString("m")); |
1295 // Dart_ListSetAt(frame2_locals, 11, Dart_NewInteger(44)); | 1295 Dart_ListSetAt(frame2_locals, 13, Dart_NewInteger(55)); |
1296 // Dart_ListSetAt(frame2_locals, 12, NewString("m")); | 1296 Dart_ListSetAt(frame2_locals, 14, NewString("local1_to_func1")); |
1297 // Dart_ListSetAt(frame2_locals, 13, Dart_NewInteger(55)); | 1297 Dart_ListSetAt(frame2_locals, 15, Dart_Null()); |
1298 // Dart_ListSetAt(frame2_locals, 14, NewString("local1_to_func1")); | 1298 Dart_ListSetAt(frame2_locals, 16, NewString("sum")); |
1299 // Dart_ListSetAt(frame2_locals, 15, Dart_Null()); | 1299 Dart_ListSetAt(frame2_locals, 17, Dart_NewInteger(0)); |
1300 // Dart_ListSetAt(frame2_locals, 16, NewString("sum")); | 1300 |
1301 // Dart_ListSetAt(frame2_locals, 17, Dart_NewInteger(0)); | 1301 // Frame 3 corresponding to "main". |
1302 // | 1302 Dart_Handle frame3_locals = Dart_NewList(14); |
1303 // // Frame 3 corresponding to "main". | 1303 Dart_ListSetAt(frame3_locals, 0, NewString("i")); |
1304 // Dart_Handle frame3_locals = Dart_NewList(14); | 1304 Dart_ListSetAt(frame3_locals, 1, Dart_NewInteger(76)); |
1305 // Dart_ListSetAt(frame3_locals, 0, NewString("i")); | 1305 Dart_ListSetAt(frame3_locals, 2, NewString("j")); |
1306 // Dart_ListSetAt(frame3_locals, 1, Dart_NewInteger(76)); | 1306 Dart_ListSetAt(frame3_locals, 3, Dart_NewInteger(119)); |
1307 // Dart_ListSetAt(frame3_locals, 2, NewString("j")); | 1307 Dart_ListSetAt(frame3_locals, 4, NewString("local_to_main")); |
1308 // Dart_ListSetAt(frame3_locals, 3, Dart_NewInteger(119)); | 1308 Dart_ListSetAt(frame3_locals, 5, Dart_Null()); |
1309 // Dart_ListSetAt(frame3_locals, 4, NewString("local_to_main")); | 1309 Dart_ListSetAt(frame3_locals, 6, NewString("sum")); |
1310 // Dart_ListSetAt(frame3_locals, 5, Dart_Null()); | 1310 Dart_ListSetAt(frame3_locals, 7, Dart_NewInteger(0)); |
1311 // Dart_ListSetAt(frame3_locals, 6, NewString("sum")); | 1311 Dart_ListSetAt(frame3_locals, 8, NewString("value")); |
1312 // Dart_ListSetAt(frame3_locals, 7, Dart_NewInteger(0)); | 1312 Dart_ListSetAt(frame3_locals, 9, Dart_Null()); |
1313 // Dart_ListSetAt(frame3_locals, 8, NewString("value")); | 1313 Dart_ListSetAt(frame3_locals, 10, NewString("func1")); |
1314 // Dart_ListSetAt(frame3_locals, 9, Dart_Null()); | 1314 Dart_ListSetAt(frame3_locals, 11, Dart_Null()); |
1315 // Dart_ListSetAt(frame3_locals, 10, NewString("func1")); | 1315 Dart_ListSetAt(frame3_locals, 12, NewString("main_local")); |
1316 // Dart_ListSetAt(frame3_locals, 11, Dart_Null()); | 1316 Dart_ListSetAt(frame3_locals, 13, Dart_Null()); |
1317 // Dart_ListSetAt(frame3_locals, 12, NewString("main_local")); | 1317 |
1318 // Dart_ListSetAt(frame3_locals, 13, Dart_Null()); | 1318 Dart_Handle expected_locals[] = { |
1319 // | 1319 frame0_locals, |
1320 // Dart_Handle expected_locals[] = { | 1320 frame1_locals, |
1321 // frame0_locals, | 1321 frame2_locals, |
1322 // frame1_locals, | 1322 frame3_locals |
1323 // frame2_locals, | 1323 }; |
1324 // frame3_locals | 1324 breakpoint_hit_counter++; |
1325 // }; | 1325 VerifyStackTrace(trace, expected_trace, expected_locals, |
1326 // breakpoint_hit_counter++; | 1326 kStackTraceLen, true); |
1327 // VerifyStackTrace(trace, expected_trace, expected_locals, | 1327 } |
1328 // kStackTraceLen, true); | 1328 |
1329 //} | 1329 |
1330 | 1330 TEST_CASE(Debug_StackTraceDump1) { |
1331 | 1331 const char* kScriptChars = |
1332 // TODO(tball): enable once problem with context variables is | 1332 "class Test {\n" |
1333 // fixed, where frame_ctx_level is sometimes off by 1 (issues 8593 and 8594) | 1333 " Test(int local);\n" |
1334 //TEST_CASE(Debug_StackTraceDump1) { | 1334 "\n" |
1335 // const char* kScriptChars = | 1335 " int func1(int func(int i, int j)) {\n" |
1336 // "class Test {\n" | 1336 " var i = 0;\n" |
1337 // " Test(int local);\n" | 1337 " var j = 0;\n" |
1338 // "\n" | 1338 " var k = 0;\n" |
1339 // " int func1(int func(int i, int j)) {\n" | 1339 " var l = 0;\n" |
1340 // " var i = 0;\n" | 1340 " var m = 0;\n" |
1341 // " var j = 0;\n" | 1341 " int local1_to_func1(int func(int i, int j)) {\n" |
1342 // " var k = 0;\n" | 1342 " // Capture i and j here.\n" |
1343 // " var l = 0;\n" | 1343 " i = 11;\n" |
1344 // " var m = 0;\n" | 1344 " j = 22;\n" |
1345 // " int local1_to_func1(int func(int i, int j)) {\n" | 1345 " k = 33;\n" |
1346 // " // Capture i and j here.\n" | 1346 " l = 44;\n" |
1347 // " i = 11;\n" | 1347 " m = 55;\n" |
1348 // " j = 22;\n" | 1348 " var n = func(i + j + k, l + m);\n" |
1349 // " k = 33;\n" | 1349 " return n;\n" |
1350 // " l = 44;\n" | 1350 " }\n" |
1351 // " m = 55;\n" | 1351 " var sum = 0;\n" |
1352 // " var n = func(i + j + k, l + m);\n" | 1352 " return local1_to_func1(func);\n" |
1353 // " return n;\n" | 1353 " }\n" |
1354 // " }\n" | 1354 "\n" |
1355 // " var sum = 0;\n" | 1355 " int local;\n" |
1356 // " return local1_to_func1(func);\n" | 1356 "}\n" |
1357 // " }\n" | 1357 "\n" |
1358 // "\n" | 1358 "int main() {\n" |
1359 // " int local;\n" | 1359 " var i = 10;\n" |
1360 // "}\n" | 1360 " var j = 20;\n" |
1361 // "\n" | 1361 " int local_to_main(int k, int l) {\n" |
1362 // "int main() {\n" | 1362 " // Capture i and j here.\n" |
1363 // " var i = 10;\n" | 1363 " i = i + k;\n" |
1364 // " var j = 20;\n" | 1364 " j = j + l;\n" |
1365 // " int local_to_main(int k, int l) {\n" | 1365 " return i + j;\n" |
1366 // " // Capture i and j here.\n" | 1366 " }\n" |
1367 // " i = i + k;\n" | 1367 " var sum = 0;\n" |
1368 // " j = j + l;\n" | 1368 " Test value = new Test(10);\n" |
1369 // " return i + j;\n" | 1369 " var func1 = value.func1;\n" |
1370 // " }\n" | 1370 " var main_local = local_to_main;\n" |
1371 // " var sum = 0;\n" | 1371 " return func1(main_local);\n" |
1372 // " Test value = new Test(10);\n" | 1372 "}\n"; |
1373 // " var func1 = value.func1;\n" | 1373 |
1374 // " var main_local = local_to_main;\n" | 1374 LoadScript(kScriptChars); |
1375 // " return func1(main_local);\n" | 1375 Dart_SetBreakpointHandler(&StackTraceDump1BreakpointHandler); |
1376 // "}\n"; | 1376 |
1377 // | 1377 Dart_Handle script_url = NewString(TestCase::url()); |
1378 // LoadScript(kScriptChars); | 1378 intptr_t line_no = 34; // In closure 'local_to_main'. |
1379 // Dart_SetBreakpointHandler(&StackTraceDump1BreakpointHandler); | 1379 Dart_Handle res = Dart_SetBreakpoint(script_url, line_no); |
1380 // | 1380 EXPECT_VALID(res); |
1381 // Dart_Handle script_url = NewString(TestCase::url()); | 1381 EXPECT(Dart_IsInteger(res)); |
1382 // intptr_t line_no = 34; // In closure 'local_to_main'. | 1382 |
1383 // Dart_Handle res = Dart_SetBreakpoint(script_url, line_no); | 1383 breakpoint_hit_counter = 0; |
1384 // EXPECT_VALID(res); | 1384 Dart_Handle retval = Invoke("main"); |
1385 // EXPECT(Dart_IsInteger(res)); | 1385 EXPECT_VALID(retval); |
1386 // | 1386 int64_t int_value = 0; |
1387 // breakpoint_hit_counter = 0; | 1387 Dart_IntegerToInt64(retval, &int_value); |
1388 // Dart_Handle retval = Invoke("main"); | 1388 EXPECT_EQ(195, int_value); |
1389 // EXPECT_VALID(retval); | 1389 EXPECT_EQ(1, breakpoint_hit_counter); |
1390 // int64_t int_value = 0; | 1390 } |
1391 // Dart_IntegerToInt64(retval, &int_value); | 1391 |
1392 // EXPECT_EQ(195, int_value); | 1392 |
1393 // EXPECT_EQ(1, breakpoint_hit_counter); | 1393 static void StackTraceDump2ExceptionHandler(Dart_IsolateId isolate_id, |
1394 //} | 1394 Dart_Handle exception_object, |
1395 | 1395 Dart_StackTrace trace) { |
1396 | 1396 const int kStackTraceLen = 5; |
1397 // TODO(tball): enable once problem with context variables is | 1397 static const char* expected_trace[kStackTraceLen] = { |
1398 // fixed, where frame_ctx_level is sometimes off by 1 (issues 8593 and 8594) | 1398 "Object._noSuchMethod", |
1399 //static void StackTraceDump2ExceptionHandler(Dart_IsolateId isolate_id, | 1399 "Object.noSuchMethod", |
1400 // Dart_Handle exception_object, | 1400 "Test.local1_to_func1", |
1401 // Dart_StackTrace trace) { | 1401 "Test.func1", |
1402 // const int kStackTraceLen = 5; | 1402 "main" |
1403 // static const char* expected_trace[kStackTraceLen] = { | 1403 }; |
1404 // "Object._noSuchMethod", | 1404 |
1405 // "Object.noSuchMethod", | 1405 intptr_t trace_len; |
1406 // "Test.local1_to_func1", | 1406 Dart_Handle res = Dart_StackTraceLength(trace, &trace_len); |
1407 // "Test.func1", | 1407 EXPECT_VALID(res); |
1408 // "main" | 1408 EXPECT_EQ(kStackTraceLen, trace_len); |
1409 // }; | 1409 |
1410 // | 1410 // Frame 0 corresponding to "Object._noSuchMethod". |
1411 // intptr_t trace_len; | 1411 Dart_Handle frame0_locals = Dart_NewList(12); |
1412 // Dart_Handle res = Dart_StackTraceLength(trace, &trace_len); | 1412 Dart_ListSetAt(frame0_locals, 0, NewString("this")); |
1413 // EXPECT_VALID(res); | 1413 Dart_ListSetAt(frame0_locals, 1, Dart_Null()); |
1414 // EXPECT_EQ(kStackTraceLen, trace_len); | 1414 Dart_ListSetAt(frame0_locals, 2, NewString("isMethod")); |
1415 // | 1415 Dart_ListSetAt(frame0_locals, 3, Dart_Null()); |
1416 // // Frame 0 corresponding to "Object._noSuchMethod". | 1416 Dart_ListSetAt(frame0_locals, 4, NewString("memberName")); |
1417 // Dart_Handle frame0_locals = Dart_NewList(12); | 1417 Dart_ListSetAt(frame0_locals, 5, Dart_Null()); |
1418 // Dart_ListSetAt(frame0_locals, 0, NewString("this")); | 1418 Dart_ListSetAt(frame0_locals, 6, NewString("type")); |
1419 // Dart_ListSetAt(frame0_locals, 1, Dart_Null()); | 1419 Dart_ListSetAt(frame0_locals, 7, Dart_Null()); |
1420 // Dart_ListSetAt(frame0_locals, 2, NewString("isMethod")); | 1420 Dart_ListSetAt(frame0_locals, 8, NewString("arguments")); |
1421 // Dart_ListSetAt(frame0_locals, 3, Dart_Null()); | 1421 Dart_ListSetAt(frame0_locals, 9, Dart_Null()); |
1422 // Dart_ListSetAt(frame0_locals, 4, NewString("memberName")); | 1422 Dart_ListSetAt(frame0_locals, 10, NewString("namedArguments")); |
1423 // Dart_ListSetAt(frame0_locals, 5, Dart_Null()); | 1423 Dart_ListSetAt(frame0_locals, 11, Dart_Null()); |
1424 // Dart_ListSetAt(frame0_locals, 6, NewString("type")); | 1424 |
1425 // Dart_ListSetAt(frame0_locals, 7, Dart_Null()); | 1425 // Frame 1 corresponding to "Object.noSuchMethod". |
1426 // Dart_ListSetAt(frame0_locals, 8, NewString("arguments")); | 1426 Dart_Handle frame1_locals = Dart_NewList(4); |
1427 // Dart_ListSetAt(frame0_locals, 9, Dart_Null()); | 1427 Dart_ListSetAt(frame1_locals, 0, NewString("this")); |
1428 // Dart_ListSetAt(frame0_locals, 10, NewString("namedArguments")); | 1428 Dart_ListSetAt(frame1_locals, 1, Dart_Null()); |
1429 // Dart_ListSetAt(frame0_locals, 11, Dart_Null()); | 1429 Dart_ListSetAt(frame1_locals, 2, NewString("invocation")); |
1430 // | 1430 Dart_ListSetAt(frame1_locals, 3, Dart_Null()); |
1431 // // Frame 1 corresponding to "Object.noSuchMethod". | 1431 |
1432 // Dart_Handle frame1_locals = Dart_NewList(4); | 1432 // Frame 2 corresponding to "Test.local1_to_func1". |
1433 // Dart_ListSetAt(frame1_locals, 0, NewString("this")); | 1433 Dart_Handle frame2_locals = Dart_NewList(16); |
1434 // Dart_ListSetAt(frame1_locals, 1, Dart_Null()); | 1434 Dart_ListSetAt(frame2_locals, 0, NewString("i")); |
1435 // Dart_ListSetAt(frame1_locals, 2, NewString("invocation")); | 1435 Dart_ListSetAt(frame2_locals, 1, Dart_NewInteger(11)); |
1436 // Dart_ListSetAt(frame1_locals, 3, Dart_Null()); | 1436 Dart_ListSetAt(frame2_locals, 2, NewString("j")); |
1437 // | 1437 Dart_ListSetAt(frame2_locals, 3, Dart_NewInteger(22)); |
1438 // // Frame 2 corresponding to "Test.local1_to_func1". | 1438 Dart_ListSetAt(frame2_locals, 4, NewString("k")); |
1439 // Dart_Handle frame2_locals = Dart_NewList(16); | 1439 Dart_ListSetAt(frame2_locals, 5, Dart_NewInteger(33)); |
1440 // Dart_ListSetAt(frame2_locals, 0, NewString("i")); | 1440 Dart_ListSetAt(frame2_locals, 6, NewString("l")); |
1441 // Dart_ListSetAt(frame2_locals, 1, Dart_NewInteger(11)); | 1441 Dart_ListSetAt(frame2_locals, 7, Dart_NewInteger(44)); |
1442 // Dart_ListSetAt(frame2_locals, 2, NewString("j")); | 1442 Dart_ListSetAt(frame2_locals, 8, NewString("m")); |
1443 // Dart_ListSetAt(frame2_locals, 3, Dart_NewInteger(22)); | 1443 Dart_ListSetAt(frame2_locals, 9, Dart_NewInteger(55)); |
1444 // Dart_ListSetAt(frame2_locals, 4, NewString("k")); | 1444 Dart_ListSetAt(frame2_locals, 10, NewString("this")); |
1445 // Dart_ListSetAt(frame2_locals, 5, Dart_NewInteger(33)); | 1445 Dart_ListSetAt(frame2_locals, 11, Dart_Null()); |
1446 // Dart_ListSetAt(frame2_locals, 6, NewString("l")); | 1446 Dart_ListSetAt(frame2_locals, 12, NewString("func")); |
1447 // Dart_ListSetAt(frame2_locals, 7, Dart_NewInteger(44)); | 1447 Dart_ListSetAt(frame2_locals, 13, Dart_Null()); |
1448 // Dart_ListSetAt(frame2_locals, 8, NewString("m")); | 1448 Dart_ListSetAt(frame2_locals, 14, NewString("n")); |
1449 // Dart_ListSetAt(frame2_locals, 9, Dart_NewInteger(55)); | 1449 Dart_ListSetAt(frame2_locals, 15, Dart_Null()); |
1450 // Dart_ListSetAt(frame2_locals, 10, NewString("this")); | 1450 |
1451 // Dart_ListSetAt(frame2_locals, 11, Dart_Null()); | 1451 // Frame 3 corresponding to "Test.func1". |
1452 // Dart_ListSetAt(frame2_locals, 12, NewString("func")); | 1452 Dart_Handle frame3_locals = Dart_NewList(18); |
1453 // Dart_ListSetAt(frame2_locals, 13, Dart_Null()); | 1453 Dart_ListSetAt(frame3_locals, 0, NewString("this")); |
1454 // Dart_ListSetAt(frame2_locals, 14, NewString("n")); | 1454 Dart_ListSetAt(frame3_locals, 1, Dart_Null()); |
1455 // Dart_ListSetAt(frame2_locals, 15, Dart_Null()); | 1455 Dart_ListSetAt(frame3_locals, 2, NewString("func")); |
1456 // | 1456 Dart_ListSetAt(frame3_locals, 3, Dart_Null()); |
1457 // // Frame 3 corresponding to "Test.func1". | 1457 Dart_ListSetAt(frame3_locals, 4, NewString("i")); |
1458 // Dart_Handle frame3_locals = Dart_NewList(18); | 1458 Dart_ListSetAt(frame3_locals, 5, Dart_NewInteger(11)); |
1459 // Dart_ListSetAt(frame3_locals, 0, NewString("this")); | 1459 Dart_ListSetAt(frame3_locals, 6, NewString("j")); |
1460 // Dart_ListSetAt(frame3_locals, 1, Dart_Null()); | 1460 Dart_ListSetAt(frame3_locals, 7, Dart_NewInteger(22)); |
1461 // Dart_ListSetAt(frame3_locals, 2, NewString("func")); | 1461 Dart_ListSetAt(frame3_locals, 8, NewString("k")); |
1462 // Dart_ListSetAt(frame3_locals, 3, Dart_Null()); | 1462 Dart_ListSetAt(frame3_locals, 9, Dart_NewInteger(33)); |
1463 // Dart_ListSetAt(frame3_locals, 4, NewString("i")); | 1463 Dart_ListSetAt(frame3_locals, 10, NewString("l")); |
1464 // Dart_ListSetAt(frame3_locals, 5, Dart_NewInteger(11)); | 1464 Dart_ListSetAt(frame3_locals, 11, Dart_NewInteger(44)); |
1465 // Dart_ListSetAt(frame3_locals, 6, NewString("j")); | 1465 Dart_ListSetAt(frame3_locals, 12, NewString("m")); |
1466 // Dart_ListSetAt(frame3_locals, 7, Dart_NewInteger(22)); | 1466 Dart_ListSetAt(frame3_locals, 13, Dart_NewInteger(55)); |
1467 // Dart_ListSetAt(frame3_locals, 8, NewString("k")); | 1467 Dart_ListSetAt(frame3_locals, 14, NewString("local1_to_func1")); |
1468 // Dart_ListSetAt(frame3_locals, 9, Dart_NewInteger(33)); | 1468 Dart_ListSetAt(frame3_locals, 15, Dart_Null()); |
1469 // Dart_ListSetAt(frame3_locals, 10, NewString("l")); | 1469 Dart_ListSetAt(frame3_locals, 16, NewString("sum")); |
1470 // Dart_ListSetAt(frame3_locals, 11, Dart_NewInteger(44)); | 1470 Dart_ListSetAt(frame3_locals, 17, Dart_NewInteger(0)); |
1471 // Dart_ListSetAt(frame3_locals, 12, NewString("m")); | 1471 |
1472 // Dart_ListSetAt(frame3_locals, 13, Dart_NewInteger(55)); | 1472 // Frame 4 corresponding to "main". |
1473 // Dart_ListSetAt(frame3_locals, 14, NewString("local1_to_func1")); | 1473 Dart_Handle frame4_locals = Dart_NewList(12); |
1474 // Dart_ListSetAt(frame3_locals, 15, Dart_Null()); | 1474 Dart_ListSetAt(frame4_locals, 0, NewString("i")); |
1475 // Dart_ListSetAt(frame3_locals, 16, NewString("sum")); | 1475 Dart_ListSetAt(frame4_locals, 1, Dart_NewInteger(10)); |
1476 // Dart_ListSetAt(frame3_locals, 17, Dart_NewInteger(0)); | 1476 Dart_ListSetAt(frame4_locals, 2, NewString("j")); |
1477 // | 1477 Dart_ListSetAt(frame4_locals, 3, Dart_NewInteger(20)); |
1478 // // Frame 4 corresponding to "main". | 1478 Dart_ListSetAt(frame4_locals, 4, NewString("local_to_main")); |
1479 // Dart_Handle frame4_locals = Dart_NewList(12); | 1479 Dart_ListSetAt(frame4_locals, 5, Dart_Null()); |
1480 // Dart_ListSetAt(frame4_locals, 0, NewString("i")); | 1480 Dart_ListSetAt(frame4_locals, 6, NewString("sum")); |
1481 // Dart_ListSetAt(frame4_locals, 1, Dart_NewInteger(10)); | 1481 Dart_ListSetAt(frame4_locals, 7, Dart_NewInteger(0)); |
1482 // Dart_ListSetAt(frame4_locals, 2, NewString("j")); | 1482 Dart_ListSetAt(frame4_locals, 8, NewString("value")); |
1483 // Dart_ListSetAt(frame4_locals, 3, Dart_NewInteger(20)); | 1483 Dart_ListSetAt(frame4_locals, 9, Dart_Null()); |
1484 // Dart_ListSetAt(frame4_locals, 4, NewString("local_to_main")); | 1484 Dart_ListSetAt(frame4_locals, 10, NewString("func1")); |
1485 // Dart_ListSetAt(frame4_locals, 5, Dart_Null()); | 1485 Dart_ListSetAt(frame4_locals, 11, Dart_Null()); |
1486 // Dart_ListSetAt(frame4_locals, 6, NewString("sum")); | 1486 |
1487 // Dart_ListSetAt(frame4_locals, 7, Dart_NewInteger(0)); | 1487 Dart_Handle expected_locals[] = { |
1488 // Dart_ListSetAt(frame4_locals, 8, NewString("value")); | 1488 frame0_locals, |
1489 // Dart_ListSetAt(frame4_locals, 9, Dart_Null()); | 1489 frame1_locals, |
1490 // Dart_ListSetAt(frame4_locals, 10, NewString("func1")); | 1490 frame2_locals, |
1491 // Dart_ListSetAt(frame4_locals, 11, Dart_Null()); | 1491 frame3_locals, |
1492 // | 1492 frame4_locals |
1493 // Dart_Handle expected_locals[] = { | 1493 }; |
1494 // frame0_locals, | 1494 breakpoint_hit_counter++; |
1495 // frame1_locals, | 1495 VerifyStackTrace(trace, expected_trace, expected_locals, |
1496 // frame2_locals, | 1496 kStackTraceLen, true); |
1497 // frame3_locals, | 1497 } |
1498 // frame4_locals | 1498 |
1499 // }; | 1499 |
1500 // breakpoint_hit_counter++; | 1500 TEST_CASE(Debug_StackTraceDump2) { |
1501 // VerifyStackTrace(trace, expected_trace, expected_locals, | 1501 const char* kScriptChars = |
1502 // kStackTraceLen, true); | 1502 "class Test {\n" |
1503 //} | 1503 " Test(int local);\n" |
1504 | 1504 "\n" |
1505 | 1505 " int func1(int func(int i, int j)) {\n" |
1506 // TODO(tball): enable once problem with context variables is | 1506 " var i = 0;\n" |
1507 // fixed, where frame_ctx_level is sometimes off by 1 (issues 8593 and 8594) | 1507 " var j = 0;\n" |
1508 //TEST_CASE(Debug_StackTraceDump2) { | 1508 " var k = 0;\n" |
1509 // const char* kScriptChars = | 1509 " var l = 0;\n" |
1510 // "class Test {\n" | 1510 " var m = 0;\n" |
1511 // " Test(int local);\n" | 1511 " int local1_to_func1(int func(int i, int j)) {\n" |
1512 // "\n" | 1512 " // Capture i and j here.\n" |
1513 // " int func1(int func(int i, int j)) {\n" | 1513 " i = 11;\n" |
1514 // " var i = 0;\n" | 1514 " j = 22;\n" |
1515 // " var j = 0;\n" | 1515 " k = 33;\n" |
1516 // " var k = 0;\n" | 1516 " l = 44;\n" |
1517 // " var l = 0;\n" | 1517 " m = 55;\n" |
1518 // " var m = 0;\n" | 1518 " var n = junk(i + j + k, l + m);\n" |
1519 // " int local1_to_func1(int func(int i, int j)) {\n" | 1519 " return n;\n" |
1520 // " // Capture i and j here.\n" | 1520 " }\n" |
1521 // " i = 11;\n" | 1521 " var sum = 0;\n" |
1522 // " j = 22;\n" | 1522 " return local1_to_func1(func);\n" |
1523 // " k = 33;\n" | 1523 " }\n" |
1524 // " l = 44;\n" | 1524 "\n" |
1525 // " m = 55;\n" | 1525 " int local;\n" |
1526 // " var n = junk(i + j + k, l + m);\n" | 1526 "}\n" |
1527 // " return n;\n" | 1527 "\n" |
1528 // " }\n" | 1528 "int main() {\n" |
1529 // " var sum = 0;\n" | 1529 " var i = 10;\n" |
1530 // " return local1_to_func1(func);\n" | 1530 " var j = 20;\n" |
1531 // " }\n" | 1531 " int local_to_main(int k, int l) {\n" |
1532 // "\n" | 1532 " // Capture i and j here.\n" |
1533 // " int local;\n" | 1533 " return i + j;\n" |
1534 // "}\n" | 1534 " }\n" |
1535 // "\n" | 1535 " var sum = 0;\n" |
1536 // "int main() {\n" | 1536 " Test value = new Test(10);\n" |
1537 // " var i = 10;\n" | 1537 " var func1 = value.func1;\n" |
1538 // " var j = 20;\n" | 1538 " return func1(local_to_main);\n" |
1539 // " int local_to_main(int k, int l) {\n" | 1539 "}\n"; |
1540 // " // Capture i and j here.\n" | 1540 |
1541 // " return i + j;\n" | 1541 LoadScript(kScriptChars); |
1542 // " }\n" | 1542 Dart_SetExceptionThrownHandler(&StackTraceDump2ExceptionHandler); |
1543 // " var sum = 0;\n" | 1543 breakpoint_hit_counter = 0; |
1544 // " Test value = new Test(10);\n" | 1544 Dart_SetExceptionPauseInfo(kPauseOnAllExceptions); |
1545 // " var func1 = value.func1;\n" | 1545 |
1546 // " return func1(local_to_main);\n" | 1546 Dart_Handle retval = Invoke("main"); |
1547 // "}\n"; | 1547 EXPECT(Dart_IsError(retval)); |
1548 // | 1548 EXPECT(Dart_IsUnhandledExceptionError(retval)); |
1549 // LoadScript(kScriptChars); | 1549 EXPECT_EQ(1, breakpoint_hit_counter); |
1550 // Dart_SetExceptionThrownHandler(&StackTraceDump2ExceptionHandler); | 1550 } |
1551 // breakpoint_hit_counter = 0; | |
1552 // Dart_SetExceptionPauseInfo(kPauseOnAllExceptions); | |
1553 // | |
1554 // Dart_Handle retval = Invoke("main"); | |
1555 // EXPECT(Dart_IsError(retval)); | |
1556 // EXPECT(Dart_IsUnhandledExceptionError(retval)); | |
1557 // EXPECT_EQ(1, breakpoint_hit_counter); | |
1558 //} | |
1559 | 1551 |
1560 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). | 1552 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). |
1561 | 1553 |
1562 } // namespace dart | 1554 } // namespace dart |
OLD | NEW |