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

Unified Diff: runtime/vm/debugger_api_impl_test.cc

Issue 12320023: Disabled context variables in local variable list in the debugger (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/debugger.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/debugger_api_impl_test.cc
===================================================================
--- runtime/vm/debugger_api_impl_test.cc (revision 19019)
+++ runtime/vm/debugger_api_impl_test.cc (working copy)
@@ -1233,322 +1233,330 @@
}
-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"
- };
+// 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);
+//}
- 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));
+// 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 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));
+// 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 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);
-}
+// 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);
+//}
-
-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
« no previous file with comments | « runtime/vm/debugger.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698