| Index: runtime/vm/debugger_api_impl_test.cc
|
| ===================================================================
|
| --- runtime/vm/debugger_api_impl_test.cc (revision 19020)
|
| +++ runtime/vm/debugger_api_impl_test.cc (working copy)
|
| @@ -1233,330 +1233,322 @@
|
| }
|
|
|
|
|
| -// TODO(tball): enable once problem with context variables is
|
| -// fixed, where frame_ctx_level is sometimes off by 1 (issues 8593 and 8594)
|
| -//static void StackTraceDump1BreakpointHandler(Dart_IsolateId isolate_id,
|
| -// Dart_Breakpoint bpt,
|
| -// Dart_StackTrace trace) {
|
| -// const int kStackTraceLen = 4;
|
| -// static const char* expected_trace[kStackTraceLen] = {
|
| -// "local_to_main",
|
| -// "Test.local1_to_func1",
|
| -// "Test.func1",
|
| -// "main"
|
| -// };
|
| -//
|
| -// intptr_t trace_len;
|
| -// Dart_Handle res = Dart_StackTraceLength(trace, &trace_len);
|
| -// EXPECT_VALID(res);
|
| -// EXPECT_EQ(kStackTraceLen, trace_len);
|
| -//
|
| -// // Frame 0 corresponding to "local_to_main".
|
| -// Dart_Handle frame0_locals = Dart_NewList(8);
|
| -// Dart_ListSetAt(frame0_locals, 0, NewString("i"));
|
| -// Dart_ListSetAt(frame0_locals, 1, Dart_NewInteger(76));
|
| -// Dart_ListSetAt(frame0_locals, 2, NewString("j"));
|
| -// Dart_ListSetAt(frame0_locals, 3, Dart_NewInteger(119));
|
| -// Dart_ListSetAt(frame0_locals, 4, NewString("k"));
|
| -// Dart_ListSetAt(frame0_locals, 5, Dart_NewInteger(66));
|
| -// Dart_ListSetAt(frame0_locals, 6, NewString("l"));
|
| -// Dart_ListSetAt(frame0_locals, 7, Dart_NewInteger(99));
|
| -//
|
| -// // Frame 1 corresponding to "Test.local1_to_func1".
|
| -// Dart_Handle frame1_locals = Dart_NewList(14);
|
| -// Dart_ListSetAt(frame1_locals, 0, NewString("i"));
|
| -// Dart_ListSetAt(frame1_locals, 1, Dart_NewInteger(11));
|
| -// Dart_ListSetAt(frame1_locals, 2, NewString("j"));
|
| -// Dart_ListSetAt(frame1_locals, 3, Dart_NewInteger(22));
|
| -// Dart_ListSetAt(frame1_locals, 4, NewString("k"));
|
| -// Dart_ListSetAt(frame1_locals, 5, Dart_NewInteger(33));
|
| -// Dart_ListSetAt(frame1_locals, 6, NewString("l"));
|
| -// Dart_ListSetAt(frame1_locals, 7, Dart_NewInteger(44));
|
| -// Dart_ListSetAt(frame1_locals, 8, NewString("m"));
|
| -// Dart_ListSetAt(frame1_locals, 9, Dart_NewInteger(55));
|
| -// Dart_ListSetAt(frame1_locals, 10, NewString("func"));
|
| -// Dart_ListSetAt(frame1_locals, 11, Dart_Null());
|
| -// Dart_ListSetAt(frame1_locals, 12, NewString("n"));
|
| -// Dart_ListSetAt(frame1_locals, 13, Dart_Null());
|
| -//
|
| -// // Frame 2 corresponding to "Test.func1".
|
| -// Dart_Handle frame2_locals = Dart_NewList(18);
|
| -// Dart_ListSetAt(frame2_locals, 0, NewString("this"));
|
| -// Dart_ListSetAt(frame2_locals, 1, Dart_Null());
|
| -// Dart_ListSetAt(frame2_locals, 2, NewString("func"));
|
| -// Dart_ListSetAt(frame2_locals, 3, Dart_Null());
|
| -// Dart_ListSetAt(frame2_locals, 4, NewString("i"));
|
| -// Dart_ListSetAt(frame2_locals, 5, Dart_NewInteger(11));
|
| -// Dart_ListSetAt(frame2_locals, 6, NewString("j"));
|
| -// Dart_ListSetAt(frame2_locals, 7, Dart_NewInteger(22));
|
| -// Dart_ListSetAt(frame2_locals, 8, NewString("k"));
|
| -// Dart_ListSetAt(frame2_locals, 9, Dart_NewInteger(33));
|
| -// Dart_ListSetAt(frame2_locals, 10, NewString("l"));
|
| -// Dart_ListSetAt(frame2_locals, 11, Dart_NewInteger(44));
|
| -// Dart_ListSetAt(frame2_locals, 12, NewString("m"));
|
| -// Dart_ListSetAt(frame2_locals, 13, Dart_NewInteger(55));
|
| -// Dart_ListSetAt(frame2_locals, 14, NewString("local1_to_func1"));
|
| -// Dart_ListSetAt(frame2_locals, 15, Dart_Null());
|
| -// Dart_ListSetAt(frame2_locals, 16, NewString("sum"));
|
| -// Dart_ListSetAt(frame2_locals, 17, Dart_NewInteger(0));
|
| -//
|
| -// // Frame 3 corresponding to "main".
|
| -// Dart_Handle frame3_locals = Dart_NewList(14);
|
| -// Dart_ListSetAt(frame3_locals, 0, NewString("i"));
|
| -// Dart_ListSetAt(frame3_locals, 1, Dart_NewInteger(76));
|
| -// Dart_ListSetAt(frame3_locals, 2, NewString("j"));
|
| -// Dart_ListSetAt(frame3_locals, 3, Dart_NewInteger(119));
|
| -// Dart_ListSetAt(frame3_locals, 4, NewString("local_to_main"));
|
| -// Dart_ListSetAt(frame3_locals, 5, Dart_Null());
|
| -// Dart_ListSetAt(frame3_locals, 6, NewString("sum"));
|
| -// Dart_ListSetAt(frame3_locals, 7, Dart_NewInteger(0));
|
| -// Dart_ListSetAt(frame3_locals, 8, NewString("value"));
|
| -// Dart_ListSetAt(frame3_locals, 9, Dart_Null());
|
| -// Dart_ListSetAt(frame3_locals, 10, NewString("func1"));
|
| -// Dart_ListSetAt(frame3_locals, 11, Dart_Null());
|
| -// Dart_ListSetAt(frame3_locals, 12, NewString("main_local"));
|
| -// Dart_ListSetAt(frame3_locals, 13, Dart_Null());
|
| -//
|
| -// Dart_Handle expected_locals[] = {
|
| -// frame0_locals,
|
| -// frame1_locals,
|
| -// frame2_locals,
|
| -// frame3_locals
|
| -// };
|
| -// breakpoint_hit_counter++;
|
| -// VerifyStackTrace(trace, expected_trace, expected_locals,
|
| -// kStackTraceLen, true);
|
| -//}
|
| +static void StackTraceDump1BreakpointHandler(Dart_IsolateId isolate_id,
|
| + Dart_Breakpoint bpt,
|
| + Dart_StackTrace trace) {
|
| + const int kStackTraceLen = 4;
|
| + static const char* expected_trace[kStackTraceLen] = {
|
| + "local_to_main",
|
| + "Test.local1_to_func1",
|
| + "Test.func1",
|
| + "main"
|
| + };
|
|
|
| + intptr_t trace_len;
|
| + Dart_Handle res = Dart_StackTraceLength(trace, &trace_len);
|
| + EXPECT_VALID(res);
|
| + EXPECT_EQ(kStackTraceLen, trace_len);
|
|
|
| -// TODO(tball): enable once problem with context variables is
|
| -// fixed, where frame_ctx_level is sometimes off by 1 (issues 8593 and 8594)
|
| -//TEST_CASE(Debug_StackTraceDump1) {
|
| -// const char* kScriptChars =
|
| -// "class Test {\n"
|
| -// " Test(int local);\n"
|
| -// "\n"
|
| -// " int func1(int func(int i, int j)) {\n"
|
| -// " var i = 0;\n"
|
| -// " var j = 0;\n"
|
| -// " var k = 0;\n"
|
| -// " var l = 0;\n"
|
| -// " var m = 0;\n"
|
| -// " int local1_to_func1(int func(int i, int j)) {\n"
|
| -// " // Capture i and j here.\n"
|
| -// " i = 11;\n"
|
| -// " j = 22;\n"
|
| -// " k = 33;\n"
|
| -// " l = 44;\n"
|
| -// " m = 55;\n"
|
| -// " var n = func(i + j + k, l + m);\n"
|
| -// " return n;\n"
|
| -// " }\n"
|
| -// " var sum = 0;\n"
|
| -// " return local1_to_func1(func);\n"
|
| -// " }\n"
|
| -// "\n"
|
| -// " int local;\n"
|
| -// "}\n"
|
| -// "\n"
|
| -// "int main() {\n"
|
| -// " var i = 10;\n"
|
| -// " var j = 20;\n"
|
| -// " int local_to_main(int k, int l) {\n"
|
| -// " // Capture i and j here.\n"
|
| -// " i = i + k;\n"
|
| -// " j = j + l;\n"
|
| -// " return i + j;\n"
|
| -// " }\n"
|
| -// " var sum = 0;\n"
|
| -// " Test value = new Test(10);\n"
|
| -// " var func1 = value.func1;\n"
|
| -// " var main_local = local_to_main;\n"
|
| -// " return func1(main_local);\n"
|
| -// "}\n";
|
| -//
|
| -// LoadScript(kScriptChars);
|
| -// Dart_SetBreakpointHandler(&StackTraceDump1BreakpointHandler);
|
| -//
|
| -// Dart_Handle script_url = NewString(TestCase::url());
|
| -// intptr_t line_no = 34; // In closure 'local_to_main'.
|
| -// Dart_Handle res = Dart_SetBreakpoint(script_url, line_no);
|
| -// EXPECT_VALID(res);
|
| -// EXPECT(Dart_IsInteger(res));
|
| -//
|
| -// breakpoint_hit_counter = 0;
|
| -// Dart_Handle retval = Invoke("main");
|
| -// EXPECT_VALID(retval);
|
| -// int64_t int_value = 0;
|
| -// Dart_IntegerToInt64(retval, &int_value);
|
| -// EXPECT_EQ(195, int_value);
|
| -// EXPECT_EQ(1, breakpoint_hit_counter);
|
| -//}
|
| + // Frame 0 corresponding to "local_to_main".
|
| + Dart_Handle frame0_locals = Dart_NewList(8);
|
| + Dart_ListSetAt(frame0_locals, 0, NewString("i"));
|
| + Dart_ListSetAt(frame0_locals, 1, Dart_NewInteger(76));
|
| + Dart_ListSetAt(frame0_locals, 2, NewString("j"));
|
| + Dart_ListSetAt(frame0_locals, 3, Dart_NewInteger(119));
|
| + Dart_ListSetAt(frame0_locals, 4, NewString("k"));
|
| + Dart_ListSetAt(frame0_locals, 5, Dart_NewInteger(66));
|
| + Dart_ListSetAt(frame0_locals, 6, NewString("l"));
|
| + Dart_ListSetAt(frame0_locals, 7, Dart_NewInteger(99));
|
|
|
| + // Frame 1 corresponding to "Test.local1_to_func1".
|
| + Dart_Handle frame1_locals = Dart_NewList(14);
|
| + Dart_ListSetAt(frame1_locals, 0, NewString("i"));
|
| + Dart_ListSetAt(frame1_locals, 1, Dart_NewInteger(11));
|
| + Dart_ListSetAt(frame1_locals, 2, NewString("j"));
|
| + Dart_ListSetAt(frame1_locals, 3, Dart_NewInteger(22));
|
| + Dart_ListSetAt(frame1_locals, 4, NewString("k"));
|
| + Dart_ListSetAt(frame1_locals, 5, Dart_NewInteger(33));
|
| + Dart_ListSetAt(frame1_locals, 6, NewString("l"));
|
| + Dart_ListSetAt(frame1_locals, 7, Dart_NewInteger(44));
|
| + Dart_ListSetAt(frame1_locals, 8, NewString("m"));
|
| + Dart_ListSetAt(frame1_locals, 9, Dart_NewInteger(55));
|
| + Dart_ListSetAt(frame1_locals, 10, NewString("func"));
|
| + Dart_ListSetAt(frame1_locals, 11, Dart_Null());
|
| + Dart_ListSetAt(frame1_locals, 12, NewString("n"));
|
| + Dart_ListSetAt(frame1_locals, 13, Dart_Null());
|
|
|
| -// TODO(tball): enable once problem with context variables is
|
| -// fixed, where frame_ctx_level is sometimes off by 1 (issues 8593 and 8594)
|
| -//static void StackTraceDump2ExceptionHandler(Dart_IsolateId isolate_id,
|
| -// Dart_Handle exception_object,
|
| -// Dart_StackTrace trace) {
|
| -// const int kStackTraceLen = 5;
|
| -// static const char* expected_trace[kStackTraceLen] = {
|
| -// "Object._noSuchMethod",
|
| -// "Object.noSuchMethod",
|
| -// "Test.local1_to_func1",
|
| -// "Test.func1",
|
| -// "main"
|
| -// };
|
| -//
|
| -// intptr_t trace_len;
|
| -// Dart_Handle res = Dart_StackTraceLength(trace, &trace_len);
|
| -// EXPECT_VALID(res);
|
| -// EXPECT_EQ(kStackTraceLen, trace_len);
|
| -//
|
| -// // Frame 0 corresponding to "Object._noSuchMethod".
|
| -// Dart_Handle frame0_locals = Dart_NewList(12);
|
| -// Dart_ListSetAt(frame0_locals, 0, NewString("this"));
|
| -// Dart_ListSetAt(frame0_locals, 1, Dart_Null());
|
| -// Dart_ListSetAt(frame0_locals, 2, NewString("isMethod"));
|
| -// Dart_ListSetAt(frame0_locals, 3, Dart_Null());
|
| -// Dart_ListSetAt(frame0_locals, 4, NewString("memberName"));
|
| -// Dart_ListSetAt(frame0_locals, 5, Dart_Null());
|
| -// Dart_ListSetAt(frame0_locals, 6, NewString("type"));
|
| -// Dart_ListSetAt(frame0_locals, 7, Dart_Null());
|
| -// Dart_ListSetAt(frame0_locals, 8, NewString("arguments"));
|
| -// Dart_ListSetAt(frame0_locals, 9, Dart_Null());
|
| -// Dart_ListSetAt(frame0_locals, 10, NewString("namedArguments"));
|
| -// Dart_ListSetAt(frame0_locals, 11, Dart_Null());
|
| -//
|
| -// // Frame 1 corresponding to "Object.noSuchMethod".
|
| -// Dart_Handle frame1_locals = Dart_NewList(4);
|
| -// Dart_ListSetAt(frame1_locals, 0, NewString("this"));
|
| -// Dart_ListSetAt(frame1_locals, 1, Dart_Null());
|
| -// Dart_ListSetAt(frame1_locals, 2, NewString("invocation"));
|
| -// Dart_ListSetAt(frame1_locals, 3, Dart_Null());
|
| -//
|
| -// // Frame 2 corresponding to "Test.local1_to_func1".
|
| -// Dart_Handle frame2_locals = Dart_NewList(16);
|
| -// Dart_ListSetAt(frame2_locals, 0, NewString("i"));
|
| -// Dart_ListSetAt(frame2_locals, 1, Dart_NewInteger(11));
|
| -// Dart_ListSetAt(frame2_locals, 2, NewString("j"));
|
| -// Dart_ListSetAt(frame2_locals, 3, Dart_NewInteger(22));
|
| -// Dart_ListSetAt(frame2_locals, 4, NewString("k"));
|
| -// Dart_ListSetAt(frame2_locals, 5, Dart_NewInteger(33));
|
| -// Dart_ListSetAt(frame2_locals, 6, NewString("l"));
|
| -// Dart_ListSetAt(frame2_locals, 7, Dart_NewInteger(44));
|
| -// Dart_ListSetAt(frame2_locals, 8, NewString("m"));
|
| -// Dart_ListSetAt(frame2_locals, 9, Dart_NewInteger(55));
|
| -// Dart_ListSetAt(frame2_locals, 10, NewString("this"));
|
| -// Dart_ListSetAt(frame2_locals, 11, Dart_Null());
|
| -// Dart_ListSetAt(frame2_locals, 12, NewString("func"));
|
| -// Dart_ListSetAt(frame2_locals, 13, Dart_Null());
|
| -// Dart_ListSetAt(frame2_locals, 14, NewString("n"));
|
| -// Dart_ListSetAt(frame2_locals, 15, Dart_Null());
|
| -//
|
| -// // Frame 3 corresponding to "Test.func1".
|
| -// Dart_Handle frame3_locals = Dart_NewList(18);
|
| -// Dart_ListSetAt(frame3_locals, 0, NewString("this"));
|
| -// Dart_ListSetAt(frame3_locals, 1, Dart_Null());
|
| -// Dart_ListSetAt(frame3_locals, 2, NewString("func"));
|
| -// Dart_ListSetAt(frame3_locals, 3, Dart_Null());
|
| -// Dart_ListSetAt(frame3_locals, 4, NewString("i"));
|
| -// Dart_ListSetAt(frame3_locals, 5, Dart_NewInteger(11));
|
| -// Dart_ListSetAt(frame3_locals, 6, NewString("j"));
|
| -// Dart_ListSetAt(frame3_locals, 7, Dart_NewInteger(22));
|
| -// Dart_ListSetAt(frame3_locals, 8, NewString("k"));
|
| -// Dart_ListSetAt(frame3_locals, 9, Dart_NewInteger(33));
|
| -// Dart_ListSetAt(frame3_locals, 10, NewString("l"));
|
| -// Dart_ListSetAt(frame3_locals, 11, Dart_NewInteger(44));
|
| -// Dart_ListSetAt(frame3_locals, 12, NewString("m"));
|
| -// Dart_ListSetAt(frame3_locals, 13, Dart_NewInteger(55));
|
| -// Dart_ListSetAt(frame3_locals, 14, NewString("local1_to_func1"));
|
| -// Dart_ListSetAt(frame3_locals, 15, Dart_Null());
|
| -// Dart_ListSetAt(frame3_locals, 16, NewString("sum"));
|
| -// Dart_ListSetAt(frame3_locals, 17, Dart_NewInteger(0));
|
| -//
|
| -// // Frame 4 corresponding to "main".
|
| -// Dart_Handle frame4_locals = Dart_NewList(12);
|
| -// Dart_ListSetAt(frame4_locals, 0, NewString("i"));
|
| -// Dart_ListSetAt(frame4_locals, 1, Dart_NewInteger(10));
|
| -// Dart_ListSetAt(frame4_locals, 2, NewString("j"));
|
| -// Dart_ListSetAt(frame4_locals, 3, Dart_NewInteger(20));
|
| -// Dart_ListSetAt(frame4_locals, 4, NewString("local_to_main"));
|
| -// Dart_ListSetAt(frame4_locals, 5, Dart_Null());
|
| -// Dart_ListSetAt(frame4_locals, 6, NewString("sum"));
|
| -// Dart_ListSetAt(frame4_locals, 7, Dart_NewInteger(0));
|
| -// Dart_ListSetAt(frame4_locals, 8, NewString("value"));
|
| -// Dart_ListSetAt(frame4_locals, 9, Dart_Null());
|
| -// Dart_ListSetAt(frame4_locals, 10, NewString("func1"));
|
| -// Dart_ListSetAt(frame4_locals, 11, Dart_Null());
|
| -//
|
| -// Dart_Handle expected_locals[] = {
|
| -// frame0_locals,
|
| -// frame1_locals,
|
| -// frame2_locals,
|
| -// frame3_locals,
|
| -// frame4_locals
|
| -// };
|
| -// breakpoint_hit_counter++;
|
| -// VerifyStackTrace(trace, expected_trace, expected_locals,
|
| -// kStackTraceLen, true);
|
| -//}
|
| + // Frame 2 corresponding to "Test.func1".
|
| + Dart_Handle frame2_locals = Dart_NewList(18);
|
| + Dart_ListSetAt(frame2_locals, 0, NewString("this"));
|
| + Dart_ListSetAt(frame2_locals, 1, Dart_Null());
|
| + Dart_ListSetAt(frame2_locals, 2, NewString("func"));
|
| + Dart_ListSetAt(frame2_locals, 3, Dart_Null());
|
| + Dart_ListSetAt(frame2_locals, 4, NewString("i"));
|
| + Dart_ListSetAt(frame2_locals, 5, Dart_NewInteger(11));
|
| + Dart_ListSetAt(frame2_locals, 6, NewString("j"));
|
| + Dart_ListSetAt(frame2_locals, 7, Dart_NewInteger(22));
|
| + Dart_ListSetAt(frame2_locals, 8, NewString("k"));
|
| + Dart_ListSetAt(frame2_locals, 9, Dart_NewInteger(33));
|
| + Dart_ListSetAt(frame2_locals, 10, NewString("l"));
|
| + Dart_ListSetAt(frame2_locals, 11, Dart_NewInteger(44));
|
| + Dart_ListSetAt(frame2_locals, 12, NewString("m"));
|
| + Dart_ListSetAt(frame2_locals, 13, Dart_NewInteger(55));
|
| + Dart_ListSetAt(frame2_locals, 14, NewString("local1_to_func1"));
|
| + Dart_ListSetAt(frame2_locals, 15, Dart_Null());
|
| + Dart_ListSetAt(frame2_locals, 16, NewString("sum"));
|
| + Dart_ListSetAt(frame2_locals, 17, Dart_NewInteger(0));
|
|
|
| + // Frame 3 corresponding to "main".
|
| + Dart_Handle frame3_locals = Dart_NewList(14);
|
| + Dart_ListSetAt(frame3_locals, 0, NewString("i"));
|
| + Dart_ListSetAt(frame3_locals, 1, Dart_NewInteger(76));
|
| + Dart_ListSetAt(frame3_locals, 2, NewString("j"));
|
| + Dart_ListSetAt(frame3_locals, 3, Dart_NewInteger(119));
|
| + Dart_ListSetAt(frame3_locals, 4, NewString("local_to_main"));
|
| + Dart_ListSetAt(frame3_locals, 5, Dart_Null());
|
| + Dart_ListSetAt(frame3_locals, 6, NewString("sum"));
|
| + Dart_ListSetAt(frame3_locals, 7, Dart_NewInteger(0));
|
| + Dart_ListSetAt(frame3_locals, 8, NewString("value"));
|
| + Dart_ListSetAt(frame3_locals, 9, Dart_Null());
|
| + Dart_ListSetAt(frame3_locals, 10, NewString("func1"));
|
| + Dart_ListSetAt(frame3_locals, 11, Dart_Null());
|
| + Dart_ListSetAt(frame3_locals, 12, NewString("main_local"));
|
| + Dart_ListSetAt(frame3_locals, 13, Dart_Null());
|
|
|
| -// TODO(tball): enable once problem with context variables is
|
| -// fixed, where frame_ctx_level is sometimes off by 1 (issues 8593 and 8594)
|
| -//TEST_CASE(Debug_StackTraceDump2) {
|
| -// const char* kScriptChars =
|
| -// "class Test {\n"
|
| -// " Test(int local);\n"
|
| -// "\n"
|
| -// " int func1(int func(int i, int j)) {\n"
|
| -// " var i = 0;\n"
|
| -// " var j = 0;\n"
|
| -// " var k = 0;\n"
|
| -// " var l = 0;\n"
|
| -// " var m = 0;\n"
|
| -// " int local1_to_func1(int func(int i, int j)) {\n"
|
| -// " // Capture i and j here.\n"
|
| -// " i = 11;\n"
|
| -// " j = 22;\n"
|
| -// " k = 33;\n"
|
| -// " l = 44;\n"
|
| -// " m = 55;\n"
|
| -// " var n = junk(i + j + k, l + m);\n"
|
| -// " return n;\n"
|
| -// " }\n"
|
| -// " var sum = 0;\n"
|
| -// " return local1_to_func1(func);\n"
|
| -// " }\n"
|
| -// "\n"
|
| -// " int local;\n"
|
| -// "}\n"
|
| -// "\n"
|
| -// "int main() {\n"
|
| -// " var i = 10;\n"
|
| -// " var j = 20;\n"
|
| -// " int local_to_main(int k, int l) {\n"
|
| -// " // Capture i and j here.\n"
|
| -// " return i + j;\n"
|
| -// " }\n"
|
| -// " var sum = 0;\n"
|
| -// " Test value = new Test(10);\n"
|
| -// " var func1 = value.func1;\n"
|
| -// " return func1(local_to_main);\n"
|
| -// "}\n";
|
| -//
|
| -// LoadScript(kScriptChars);
|
| -// Dart_SetExceptionThrownHandler(&StackTraceDump2ExceptionHandler);
|
| -// breakpoint_hit_counter = 0;
|
| -// Dart_SetExceptionPauseInfo(kPauseOnAllExceptions);
|
| -//
|
| -// Dart_Handle retval = Invoke("main");
|
| -// EXPECT(Dart_IsError(retval));
|
| -// EXPECT(Dart_IsUnhandledExceptionError(retval));
|
| -// EXPECT_EQ(1, breakpoint_hit_counter);
|
| -//}
|
| + Dart_Handle expected_locals[] = {
|
| + frame0_locals,
|
| + frame1_locals,
|
| + frame2_locals,
|
| + frame3_locals
|
| + };
|
| + breakpoint_hit_counter++;
|
| + VerifyStackTrace(trace, expected_trace, expected_locals,
|
| + kStackTraceLen, true);
|
| +}
|
|
|
| +
|
| +TEST_CASE(Debug_StackTraceDump1) {
|
| + const char* kScriptChars =
|
| + "class Test {\n"
|
| + " Test(int local);\n"
|
| + "\n"
|
| + " int func1(int func(int i, int j)) {\n"
|
| + " var i = 0;\n"
|
| + " var j = 0;\n"
|
| + " var k = 0;\n"
|
| + " var l = 0;\n"
|
| + " var m = 0;\n"
|
| + " int local1_to_func1(int func(int i, int j)) {\n"
|
| + " // Capture i and j here.\n"
|
| + " i = 11;\n"
|
| + " j = 22;\n"
|
| + " k = 33;\n"
|
| + " l = 44;\n"
|
| + " m = 55;\n"
|
| + " var n = func(i + j + k, l + m);\n"
|
| + " return n;\n"
|
| + " }\n"
|
| + " var sum = 0;\n"
|
| + " return local1_to_func1(func);\n"
|
| + " }\n"
|
| + "\n"
|
| + " int local;\n"
|
| + "}\n"
|
| + "\n"
|
| + "int main() {\n"
|
| + " var i = 10;\n"
|
| + " var j = 20;\n"
|
| + " int local_to_main(int k, int l) {\n"
|
| + " // Capture i and j here.\n"
|
| + " i = i + k;\n"
|
| + " j = j + l;\n"
|
| + " return i + j;\n"
|
| + " }\n"
|
| + " var sum = 0;\n"
|
| + " Test value = new Test(10);\n"
|
| + " var func1 = value.func1;\n"
|
| + " var main_local = local_to_main;\n"
|
| + " return func1(main_local);\n"
|
| + "}\n";
|
| +
|
| + LoadScript(kScriptChars);
|
| + Dart_SetBreakpointHandler(&StackTraceDump1BreakpointHandler);
|
| +
|
| + Dart_Handle script_url = NewString(TestCase::url());
|
| + intptr_t line_no = 34; // In closure 'local_to_main'.
|
| + Dart_Handle res = Dart_SetBreakpoint(script_url, line_no);
|
| + EXPECT_VALID(res);
|
| + EXPECT(Dart_IsInteger(res));
|
| +
|
| + breakpoint_hit_counter = 0;
|
| + Dart_Handle retval = Invoke("main");
|
| + EXPECT_VALID(retval);
|
| + int64_t int_value = 0;
|
| + Dart_IntegerToInt64(retval, &int_value);
|
| + EXPECT_EQ(195, int_value);
|
| + EXPECT_EQ(1, breakpoint_hit_counter);
|
| +}
|
| +
|
| +
|
| +static void StackTraceDump2ExceptionHandler(Dart_IsolateId isolate_id,
|
| + Dart_Handle exception_object,
|
| + Dart_StackTrace trace) {
|
| + const int kStackTraceLen = 5;
|
| + static const char* expected_trace[kStackTraceLen] = {
|
| + "Object._noSuchMethod",
|
| + "Object.noSuchMethod",
|
| + "Test.local1_to_func1",
|
| + "Test.func1",
|
| + "main"
|
| + };
|
| +
|
| + intptr_t trace_len;
|
| + Dart_Handle res = Dart_StackTraceLength(trace, &trace_len);
|
| + EXPECT_VALID(res);
|
| + EXPECT_EQ(kStackTraceLen, trace_len);
|
| +
|
| + // Frame 0 corresponding to "Object._noSuchMethod".
|
| + Dart_Handle frame0_locals = Dart_NewList(12);
|
| + Dart_ListSetAt(frame0_locals, 0, NewString("this"));
|
| + Dart_ListSetAt(frame0_locals, 1, Dart_Null());
|
| + Dart_ListSetAt(frame0_locals, 2, NewString("isMethod"));
|
| + Dart_ListSetAt(frame0_locals, 3, Dart_Null());
|
| + Dart_ListSetAt(frame0_locals, 4, NewString("memberName"));
|
| + Dart_ListSetAt(frame0_locals, 5, Dart_Null());
|
| + Dart_ListSetAt(frame0_locals, 6, NewString("type"));
|
| + Dart_ListSetAt(frame0_locals, 7, Dart_Null());
|
| + Dart_ListSetAt(frame0_locals, 8, NewString("arguments"));
|
| + Dart_ListSetAt(frame0_locals, 9, Dart_Null());
|
| + Dart_ListSetAt(frame0_locals, 10, NewString("namedArguments"));
|
| + Dart_ListSetAt(frame0_locals, 11, Dart_Null());
|
| +
|
| + // Frame 1 corresponding to "Object.noSuchMethod".
|
| + Dart_Handle frame1_locals = Dart_NewList(4);
|
| + Dart_ListSetAt(frame1_locals, 0, NewString("this"));
|
| + Dart_ListSetAt(frame1_locals, 1, Dart_Null());
|
| + Dart_ListSetAt(frame1_locals, 2, NewString("invocation"));
|
| + Dart_ListSetAt(frame1_locals, 3, Dart_Null());
|
| +
|
| + // Frame 2 corresponding to "Test.local1_to_func1".
|
| + Dart_Handle frame2_locals = Dart_NewList(16);
|
| + Dart_ListSetAt(frame2_locals, 0, NewString("i"));
|
| + Dart_ListSetAt(frame2_locals, 1, Dart_NewInteger(11));
|
| + Dart_ListSetAt(frame2_locals, 2, NewString("j"));
|
| + Dart_ListSetAt(frame2_locals, 3, Dart_NewInteger(22));
|
| + Dart_ListSetAt(frame2_locals, 4, NewString("k"));
|
| + Dart_ListSetAt(frame2_locals, 5, Dart_NewInteger(33));
|
| + Dart_ListSetAt(frame2_locals, 6, NewString("l"));
|
| + Dart_ListSetAt(frame2_locals, 7, Dart_NewInteger(44));
|
| + Dart_ListSetAt(frame2_locals, 8, NewString("m"));
|
| + Dart_ListSetAt(frame2_locals, 9, Dart_NewInteger(55));
|
| + Dart_ListSetAt(frame2_locals, 10, NewString("this"));
|
| + Dart_ListSetAt(frame2_locals, 11, Dart_Null());
|
| + Dart_ListSetAt(frame2_locals, 12, NewString("func"));
|
| + Dart_ListSetAt(frame2_locals, 13, Dart_Null());
|
| + Dart_ListSetAt(frame2_locals, 14, NewString("n"));
|
| + Dart_ListSetAt(frame2_locals, 15, Dart_Null());
|
| +
|
| + // Frame 3 corresponding to "Test.func1".
|
| + Dart_Handle frame3_locals = Dart_NewList(18);
|
| + Dart_ListSetAt(frame3_locals, 0, NewString("this"));
|
| + Dart_ListSetAt(frame3_locals, 1, Dart_Null());
|
| + Dart_ListSetAt(frame3_locals, 2, NewString("func"));
|
| + Dart_ListSetAt(frame3_locals, 3, Dart_Null());
|
| + Dart_ListSetAt(frame3_locals, 4, NewString("i"));
|
| + Dart_ListSetAt(frame3_locals, 5, Dart_NewInteger(11));
|
| + Dart_ListSetAt(frame3_locals, 6, NewString("j"));
|
| + Dart_ListSetAt(frame3_locals, 7, Dart_NewInteger(22));
|
| + Dart_ListSetAt(frame3_locals, 8, NewString("k"));
|
| + Dart_ListSetAt(frame3_locals, 9, Dart_NewInteger(33));
|
| + Dart_ListSetAt(frame3_locals, 10, NewString("l"));
|
| + Dart_ListSetAt(frame3_locals, 11, Dart_NewInteger(44));
|
| + Dart_ListSetAt(frame3_locals, 12, NewString("m"));
|
| + Dart_ListSetAt(frame3_locals, 13, Dart_NewInteger(55));
|
| + Dart_ListSetAt(frame3_locals, 14, NewString("local1_to_func1"));
|
| + Dart_ListSetAt(frame3_locals, 15, Dart_Null());
|
| + Dart_ListSetAt(frame3_locals, 16, NewString("sum"));
|
| + Dart_ListSetAt(frame3_locals, 17, Dart_NewInteger(0));
|
| +
|
| + // Frame 4 corresponding to "main".
|
| + Dart_Handle frame4_locals = Dart_NewList(12);
|
| + Dart_ListSetAt(frame4_locals, 0, NewString("i"));
|
| + Dart_ListSetAt(frame4_locals, 1, Dart_NewInteger(10));
|
| + Dart_ListSetAt(frame4_locals, 2, NewString("j"));
|
| + Dart_ListSetAt(frame4_locals, 3, Dart_NewInteger(20));
|
| + Dart_ListSetAt(frame4_locals, 4, NewString("local_to_main"));
|
| + Dart_ListSetAt(frame4_locals, 5, Dart_Null());
|
| + Dart_ListSetAt(frame4_locals, 6, NewString("sum"));
|
| + Dart_ListSetAt(frame4_locals, 7, Dart_NewInteger(0));
|
| + Dart_ListSetAt(frame4_locals, 8, NewString("value"));
|
| + Dart_ListSetAt(frame4_locals, 9, Dart_Null());
|
| + Dart_ListSetAt(frame4_locals, 10, NewString("func1"));
|
| + Dart_ListSetAt(frame4_locals, 11, Dart_Null());
|
| +
|
| + Dart_Handle expected_locals[] = {
|
| + frame0_locals,
|
| + frame1_locals,
|
| + frame2_locals,
|
| + frame3_locals,
|
| + frame4_locals
|
| + };
|
| + breakpoint_hit_counter++;
|
| + VerifyStackTrace(trace, expected_trace, expected_locals,
|
| + kStackTraceLen, true);
|
| +}
|
| +
|
| +
|
| +TEST_CASE(Debug_StackTraceDump2) {
|
| + const char* kScriptChars =
|
| + "class Test {\n"
|
| + " Test(int local);\n"
|
| + "\n"
|
| + " int func1(int func(int i, int j)) {\n"
|
| + " var i = 0;\n"
|
| + " var j = 0;\n"
|
| + " var k = 0;\n"
|
| + " var l = 0;\n"
|
| + " var m = 0;\n"
|
| + " int local1_to_func1(int func(int i, int j)) {\n"
|
| + " // Capture i and j here.\n"
|
| + " i = 11;\n"
|
| + " j = 22;\n"
|
| + " k = 33;\n"
|
| + " l = 44;\n"
|
| + " m = 55;\n"
|
| + " var n = junk(i + j + k, l + m);\n"
|
| + " return n;\n"
|
| + " }\n"
|
| + " var sum = 0;\n"
|
| + " return local1_to_func1(func);\n"
|
| + " }\n"
|
| + "\n"
|
| + " int local;\n"
|
| + "}\n"
|
| + "\n"
|
| + "int main() {\n"
|
| + " var i = 10;\n"
|
| + " var j = 20;\n"
|
| + " int local_to_main(int k, int l) {\n"
|
| + " // Capture i and j here.\n"
|
| + " return i + j;\n"
|
| + " }\n"
|
| + " var sum = 0;\n"
|
| + " Test value = new Test(10);\n"
|
| + " var func1 = value.func1;\n"
|
| + " return func1(local_to_main);\n"
|
| + "}\n";
|
| +
|
| + LoadScript(kScriptChars);
|
| + Dart_SetExceptionThrownHandler(&StackTraceDump2ExceptionHandler);
|
| + breakpoint_hit_counter = 0;
|
| + Dart_SetExceptionPauseInfo(kPauseOnAllExceptions);
|
| +
|
| + Dart_Handle retval = Invoke("main");
|
| + EXPECT(Dart_IsError(retval));
|
| + EXPECT(Dart_IsUnhandledExceptionError(retval));
|
| + EXPECT_EQ(1, breakpoint_hit_counter);
|
| +}
|
| +
|
| #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64).
|
|
|
| } // namespace dart
|
|
|