| 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/unit_test.h" | 8 #include "vm/unit_test.h" |
| 9 | 9 |
| 10 namespace dart { | 10 namespace dart { |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 61 | 61 |
| 62 | 62 |
| 63 static char const* BreakpointInfo(Dart_StackTrace trace) { | 63 static char const* BreakpointInfo(Dart_StackTrace trace) { |
| 64 static char info_str[128]; | 64 static char info_str[128]; |
| 65 Dart_ActivationFrame frame; | 65 Dart_ActivationFrame frame; |
| 66 Dart_Handle res = Dart_GetActivationFrame(trace, 0, &frame); | 66 Dart_Handle res = Dart_GetActivationFrame(trace, 0, &frame); |
| 67 EXPECT_NOT_ERROR(res); | 67 EXPECT_NOT_ERROR(res); |
| 68 Dart_Handle func_name; | 68 Dart_Handle func_name; |
| 69 Dart_Handle url; | 69 Dart_Handle url; |
| 70 intptr_t line_number = 0; | 70 intptr_t line_number = 0; |
| 71 res = Dart_ActivationFrameInfo(frame, &func_name, &url, &line_number); | 71 intptr_t library_id = 0; |
| 72 res = Dart_ActivationFrameInfo( |
| 73 frame, &func_name, &url, &line_number, &library_id); |
| 72 EXPECT_NOT_ERROR(res); | 74 EXPECT_NOT_ERROR(res); |
| 73 OS::SNPrint(info_str, sizeof(info_str), "function %s (%s:%d)", | 75 OS::SNPrint(info_str, sizeof(info_str), "function %s (%s:%d)", |
| 74 ToCString(func_name), ToCString(url), line_number); | 76 ToCString(func_name), ToCString(url), line_number); |
| 75 return info_str; | 77 return info_str; |
| 76 } | 78 } |
| 77 | 79 |
| 78 | 80 |
| 79 static void PrintValue(Dart_Handle value, bool expand); | 81 static void PrintValue(Dart_Handle value, bool expand); |
| 80 | 82 |
| 81 | 83 |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 129 OS::Print("%s", ToCString(str_value)); | 131 OS::Print("%s", ToCString(str_value)); |
| 130 } else { | 132 } else { |
| 131 PrintObject(value, expand); | 133 PrintObject(value, expand); |
| 132 } | 134 } |
| 133 } | 135 } |
| 134 | 136 |
| 135 | 137 |
| 136 static void PrintActivationFrame(Dart_ActivationFrame frame) { | 138 static void PrintActivationFrame(Dart_ActivationFrame frame) { |
| 137 Dart_Handle func_name; | 139 Dart_Handle func_name; |
| 138 Dart_Handle res; | 140 Dart_Handle res; |
| 139 res = Dart_ActivationFrameInfo(frame, &func_name, NULL, NULL); | 141 res = Dart_ActivationFrameInfo(frame, &func_name, NULL, NULL, NULL); |
| 140 EXPECT_NOT_ERROR(res); | 142 EXPECT_NOT_ERROR(res); |
| 141 EXPECT(Dart_IsString(func_name)); | 143 EXPECT(Dart_IsString(func_name)); |
| 142 const char* func_name_chars; | 144 const char* func_name_chars; |
| 143 Dart_StringToCString(func_name, &func_name_chars); | 145 Dart_StringToCString(func_name, &func_name_chars); |
| 144 OS::Print(" function %s\n", func_name_chars); | 146 OS::Print(" function %s\n", func_name_chars); |
| 145 Dart_Handle locals = Dart_GetLocalVariables(frame); | 147 Dart_Handle locals = Dart_GetLocalVariables(frame); |
| 146 EXPECT_NOT_ERROR(locals); | 148 EXPECT_NOT_ERROR(locals); |
| 147 intptr_t list_length = 0; | 149 intptr_t list_length = 0; |
| 148 Dart_Handle ret = Dart_ListLength(locals, &list_length); | 150 Dart_Handle ret = Dart_ListLength(locals, &list_length); |
| 149 EXPECT_NOT_ERROR(ret); | 151 EXPECT_NOT_ERROR(ret); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 177 const char* func_names[], | 179 const char* func_names[], |
| 178 int names_len) { | 180 int names_len) { |
| 179 intptr_t trace_len; | 181 intptr_t trace_len; |
| 180 Dart_Handle res = Dart_StackTraceLength(trace, &trace_len); | 182 Dart_Handle res = Dart_StackTraceLength(trace, &trace_len); |
| 181 Dart_Handle func_name; | 183 Dart_Handle func_name; |
| 182 EXPECT_NOT_ERROR(res); | 184 EXPECT_NOT_ERROR(res); |
| 183 for (int i = 0; i < trace_len; i++) { | 185 for (int i = 0; i < trace_len; i++) { |
| 184 Dart_ActivationFrame frame; | 186 Dart_ActivationFrame frame; |
| 185 res = Dart_GetActivationFrame(trace, i, &frame); | 187 res = Dart_GetActivationFrame(trace, i, &frame); |
| 186 EXPECT_NOT_ERROR(res); | 188 EXPECT_NOT_ERROR(res); |
| 187 res = Dart_ActivationFrameInfo(frame, &func_name, NULL, NULL); | 189 res = Dart_ActivationFrameInfo(frame, &func_name, NULL, NULL, NULL); |
| 188 EXPECT_NOT_ERROR(res); | 190 EXPECT_NOT_ERROR(res); |
| 189 EXPECT(Dart_IsString(func_name)); | 191 EXPECT(Dart_IsString(func_name)); |
| 190 const char* func_name_chars; | 192 const char* func_name_chars; |
| 191 Dart_StringToCString(func_name, &func_name_chars); | 193 Dart_StringToCString(func_name, &func_name_chars); |
| 192 if (i < names_len) { | 194 if (i < names_len) { |
| 193 EXPECT_STREQ(func_name_chars, func_names[i]); | 195 EXPECT_STREQ(func_name_chars, func_names[i]); |
| 194 if (strcmp(func_name_chars, func_names[i]) != 0) { | 196 if (strcmp(func_name_chars, func_names[i]) != 0) { |
| 195 OS::Print("Stack frame %d: expected function %s, but found %s\n", | 197 OS::Print("Stack frame %d: expected function %s, but found %s\n", |
| 196 i, func_names[i], func_name_chars); | 198 i, func_names[i], func_name_chars); |
| 197 } | 199 } |
| 198 } | 200 } |
| 199 } | 201 } |
| 200 } | 202 } |
| 201 | 203 |
| 202 | 204 |
| 203 void TestBreakpointHandler(Dart_Breakpoint bpt, Dart_StackTrace trace) { | 205 void TestBreakpointHandler(Dart_Breakpoint bpt, Dart_StackTrace trace) { |
| 204 const char* expected_trace[] = {"A.foo", "main"}; | 206 const char* expected_trace[] = {"A.foo", "main"}; |
| 205 const intptr_t expected_trace_length = 2; | 207 const intptr_t expected_trace_length = 2; |
| 206 breakpoint_hit = true; | 208 breakpoint_hit = true; |
| 207 breakpoint_hit_counter++; | 209 breakpoint_hit_counter++; |
| 208 intptr_t trace_len; | 210 intptr_t trace_len; |
| 209 Dart_Handle res = Dart_StackTraceLength(trace, &trace_len); | 211 Dart_Handle res = Dart_StackTraceLength(trace, &trace_len); |
| 210 EXPECT_NOT_ERROR(res); | 212 EXPECT_NOT_ERROR(res); |
| 211 EXPECT_EQ(expected_trace_length, trace_len); | 213 EXPECT_EQ(expected_trace_length, trace_len); |
| 212 for (int i = 0; i < trace_len; i++) { | 214 for (int i = 0; i < trace_len; i++) { |
| 213 Dart_ActivationFrame frame; | 215 Dart_ActivationFrame frame; |
| 214 res = Dart_GetActivationFrame(trace, i, &frame); | 216 res = Dart_GetActivationFrame(trace, i, &frame); |
| 215 EXPECT_NOT_ERROR(res); | 217 EXPECT_NOT_ERROR(res); |
| 216 Dart_Handle func_name; | 218 Dart_Handle func_name; |
| 217 res = Dart_ActivationFrameInfo(frame, &func_name, NULL, NULL); | 219 res = Dart_ActivationFrameInfo(frame, &func_name, NULL, NULL, NULL); |
| 218 EXPECT_NOT_ERROR(res); | 220 EXPECT_NOT_ERROR(res); |
| 219 EXPECT(Dart_IsString(func_name)); | 221 EXPECT(Dart_IsString(func_name)); |
| 220 const char* name_chars; | 222 const char* name_chars; |
| 221 Dart_StringToCString(func_name, &name_chars); | 223 Dart_StringToCString(func_name, &name_chars); |
| 222 EXPECT_STREQ(expected_trace[i], name_chars); | 224 EXPECT_STREQ(expected_trace[i], name_chars); |
| 223 if (verbose) OS::Print(" >> %d: %s\n", i, name_chars); | 225 if (verbose) OS::Print(" >> %d: %s\n", i, name_chars); |
| 224 } | 226 } |
| 225 } | 227 } |
| 226 | 228 |
| 227 | 229 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 252 const char* expected_bpts[] = {"f1", "foo", "main"}; | 254 const char* expected_bpts[] = {"f1", "foo", "main"}; |
| 253 const intptr_t expected_bpts_length = ARRAY_SIZE(expected_bpts); | 255 const intptr_t expected_bpts_length = ARRAY_SIZE(expected_bpts); |
| 254 intptr_t trace_len; | 256 intptr_t trace_len; |
| 255 Dart_Handle res = Dart_StackTraceLength(trace, &trace_len); | 257 Dart_Handle res = Dart_StackTraceLength(trace, &trace_len); |
| 256 EXPECT_NOT_ERROR(res); | 258 EXPECT_NOT_ERROR(res); |
| 257 EXPECT(breakpoint_hit_counter < expected_bpts_length); | 259 EXPECT(breakpoint_hit_counter < expected_bpts_length); |
| 258 Dart_ActivationFrame frame; | 260 Dart_ActivationFrame frame; |
| 259 res = Dart_GetActivationFrame(trace, 0, &frame); | 261 res = Dart_GetActivationFrame(trace, 0, &frame); |
| 260 EXPECT_NOT_ERROR(res); | 262 EXPECT_NOT_ERROR(res); |
| 261 Dart_Handle func_name; | 263 Dart_Handle func_name; |
| 262 res = Dart_ActivationFrameInfo(frame, &func_name, NULL, NULL); | 264 res = Dart_ActivationFrameInfo(frame, &func_name, NULL, NULL, NULL); |
| 263 EXPECT_NOT_ERROR(res); | 265 EXPECT_NOT_ERROR(res); |
| 264 EXPECT(Dart_IsString(func_name)); | 266 EXPECT(Dart_IsString(func_name)); |
| 265 const char* name_chars; | 267 const char* name_chars; |
| 266 Dart_StringToCString(func_name, &name_chars); | 268 Dart_StringToCString(func_name, &name_chars); |
| 267 if (breakpoint_hit_counter < expected_bpts_length) { | 269 if (breakpoint_hit_counter < expected_bpts_length) { |
| 268 EXPECT_STREQ(expected_bpts[breakpoint_hit_counter], name_chars); | 270 EXPECT_STREQ(expected_bpts[breakpoint_hit_counter], name_chars); |
| 269 } | 271 } |
| 270 if (verbose) { | 272 if (verbose) { |
| 271 OS::Print(" >> bpt nr %d: %s\n", breakpoint_hit_counter, name_chars); | 273 OS::Print(" >> bpt nr %d: %s\n", breakpoint_hit_counter, name_chars); |
| 272 } | 274 } |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 332 }; | 334 }; |
| 333 const intptr_t expected_bpts_length = ARRAY_SIZE(expected_bpts); | 335 const intptr_t expected_bpts_length = ARRAY_SIZE(expected_bpts); |
| 334 intptr_t trace_len; | 336 intptr_t trace_len; |
| 335 Dart_Handle res = Dart_StackTraceLength(trace, &trace_len); | 337 Dart_Handle res = Dart_StackTraceLength(trace, &trace_len); |
| 336 EXPECT_NOT_ERROR(res); | 338 EXPECT_NOT_ERROR(res); |
| 337 EXPECT(breakpoint_hit_counter < expected_bpts_length); | 339 EXPECT(breakpoint_hit_counter < expected_bpts_length); |
| 338 Dart_ActivationFrame frame; | 340 Dart_ActivationFrame frame; |
| 339 res = Dart_GetActivationFrame(trace, 0, &frame); | 341 res = Dart_GetActivationFrame(trace, 0, &frame); |
| 340 EXPECT_NOT_ERROR(res); | 342 EXPECT_NOT_ERROR(res); |
| 341 Dart_Handle func_name; | 343 Dart_Handle func_name; |
| 342 res = Dart_ActivationFrameInfo(frame, &func_name, NULL, NULL); | 344 res = Dart_ActivationFrameInfo(frame, &func_name, NULL, NULL, NULL); |
| 343 EXPECT_NOT_ERROR(res); | 345 EXPECT_NOT_ERROR(res); |
| 344 EXPECT(Dart_IsString(func_name)); | 346 EXPECT(Dart_IsString(func_name)); |
| 345 const char* name_chars; | 347 const char* name_chars; |
| 346 Dart_StringToCString(func_name, &name_chars); | 348 Dart_StringToCString(func_name, &name_chars); |
| 347 if (breakpoint_hit_counter < expected_bpts_length) { | 349 if (breakpoint_hit_counter < expected_bpts_length) { |
| 348 EXPECT_STREQ(expected_bpts[breakpoint_hit_counter], name_chars); | 350 EXPECT_STREQ(expected_bpts[breakpoint_hit_counter], name_chars); |
| 349 } | 351 } |
| 350 if (verbose) { | 352 if (verbose) { |
| 351 OS::Print(" >> bpt nr %d: %s\n", breakpoint_hit_counter, name_chars); | 353 OS::Print(" >> bpt nr %d: %s\n", breakpoint_hit_counter, name_chars); |
| 352 } | 354 } |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 483 "moo", "foo", "moo", "foo", "moo", "foo", "main"}; | 485 "moo", "foo", "moo", "foo", "moo", "foo", "main"}; |
| 484 const intptr_t expected_bpts_length = ARRAY_SIZE(expected_bpts); | 486 const intptr_t expected_bpts_length = ARRAY_SIZE(expected_bpts); |
| 485 intptr_t trace_len; | 487 intptr_t trace_len; |
| 486 Dart_Handle res = Dart_StackTraceLength(trace, &trace_len); | 488 Dart_Handle res = Dart_StackTraceLength(trace, &trace_len); |
| 487 EXPECT_NOT_ERROR(res); | 489 EXPECT_NOT_ERROR(res); |
| 488 EXPECT(breakpoint_hit_counter < expected_bpts_length); | 490 EXPECT(breakpoint_hit_counter < expected_bpts_length); |
| 489 Dart_ActivationFrame frame; | 491 Dart_ActivationFrame frame; |
| 490 res = Dart_GetActivationFrame(trace, 0, &frame); | 492 res = Dart_GetActivationFrame(trace, 0, &frame); |
| 491 EXPECT_NOT_ERROR(res); | 493 EXPECT_NOT_ERROR(res); |
| 492 Dart_Handle func_name; | 494 Dart_Handle func_name; |
| 493 res = Dart_ActivationFrameInfo(frame, &func_name, NULL, NULL); | 495 res = Dart_ActivationFrameInfo(frame, &func_name, NULL, NULL, NULL); |
| 494 EXPECT_NOT_ERROR(res); | 496 EXPECT_NOT_ERROR(res); |
| 495 EXPECT(Dart_IsString(func_name)); | 497 EXPECT(Dart_IsString(func_name)); |
| 496 const char* name_chars; | 498 const char* name_chars; |
| 497 Dart_StringToCString(func_name, &name_chars); | 499 Dart_StringToCString(func_name, &name_chars); |
| 498 if (verbose) { | 500 if (verbose) { |
| 499 OS::Print(" >> bpt nr %d: %s\n", breakpoint_hit_counter, name_chars); | 501 OS::Print(" >> bpt nr %d: %s\n", breakpoint_hit_counter, name_chars); |
| 500 } | 502 } |
| 501 if (breakpoint_hit_counter < expected_bpts_length) { | 503 if (breakpoint_hit_counter < expected_bpts_length) { |
| 502 EXPECT_STREQ(expected_bpts[breakpoint_hit_counter], name_chars); | 504 EXPECT_STREQ(expected_bpts[breakpoint_hit_counter], name_chars); |
| 503 } | 505 } |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 541 breakpoint_hit_counter++; | 543 breakpoint_hit_counter++; |
| 542 intptr_t trace_len; | 544 intptr_t trace_len; |
| 543 Dart_Handle res = Dart_StackTraceLength(trace, &trace_len); | 545 Dart_Handle res = Dart_StackTraceLength(trace, &trace_len); |
| 544 EXPECT_NOT_ERROR(res); | 546 EXPECT_NOT_ERROR(res); |
| 545 EXPECT_EQ(expected_trace_length, trace_len); | 547 EXPECT_EQ(expected_trace_length, trace_len); |
| 546 for (int i = 0; i < trace_len; i++) { | 548 for (int i = 0; i < trace_len; i++) { |
| 547 Dart_ActivationFrame frame; | 549 Dart_ActivationFrame frame; |
| 548 res = Dart_GetActivationFrame(trace, i, &frame); | 550 res = Dart_GetActivationFrame(trace, i, &frame); |
| 549 EXPECT_NOT_ERROR(res); | 551 EXPECT_NOT_ERROR(res); |
| 550 Dart_Handle func_name; | 552 Dart_Handle func_name; |
| 551 res = Dart_ActivationFrameInfo(frame, &func_name, NULL, NULL); | 553 res = Dart_ActivationFrameInfo(frame, &func_name, NULL, NULL, NULL); |
| 552 EXPECT_NOT_ERROR(res); | 554 EXPECT_NOT_ERROR(res); |
| 553 EXPECT(Dart_IsString(func_name)); | 555 EXPECT(Dart_IsString(func_name)); |
| 554 const char* name_chars; | 556 const char* name_chars; |
| 555 Dart_StringToCString(func_name, &name_chars); | 557 Dart_StringToCString(func_name, &name_chars); |
| 556 EXPECT_STREQ(expected_trace[i], name_chars); | 558 EXPECT_STREQ(expected_trace[i], name_chars); |
| 557 if (verbose) OS::Print(" >> %d: %s\n", i, name_chars); | 559 if (verbose) OS::Print(" >> %d: %s\n", i, name_chars); |
| 558 } | 560 } |
| 559 } | 561 } |
| 560 | 562 |
| 561 | 563 |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 635 breakpoint_hit_counter++; | 637 breakpoint_hit_counter++; |
| 636 intptr_t trace_len; | 638 intptr_t trace_len; |
| 637 Dart_Handle res = Dart_StackTraceLength(trace, &trace_len); | 639 Dart_Handle res = Dart_StackTraceLength(trace, &trace_len); |
| 638 EXPECT_NOT_ERROR(res); | 640 EXPECT_NOT_ERROR(res); |
| 639 EXPECT_EQ(expected_trace_length, trace_len); | 641 EXPECT_EQ(expected_trace_length, trace_len); |
| 640 for (int i = 0; i < trace_len; i++) { | 642 for (int i = 0; i < trace_len; i++) { |
| 641 Dart_ActivationFrame frame; | 643 Dart_ActivationFrame frame; |
| 642 res = Dart_GetActivationFrame(trace, i, &frame); | 644 res = Dart_GetActivationFrame(trace, i, &frame); |
| 643 EXPECT_NOT_ERROR(res); | 645 EXPECT_NOT_ERROR(res); |
| 644 Dart_Handle func_name; | 646 Dart_Handle func_name; |
| 645 res = Dart_ActivationFrameInfo(frame, &func_name, NULL, NULL); | 647 res = Dart_ActivationFrameInfo(frame, &func_name, NULL, NULL, NULL); |
| 646 EXPECT_NOT_ERROR(res); | 648 EXPECT_NOT_ERROR(res); |
| 647 EXPECT(Dart_IsString(func_name)); | 649 EXPECT(Dart_IsString(func_name)); |
| 648 const char* name_chars; | 650 const char* name_chars; |
| 649 Dart_StringToCString(func_name, &name_chars); | 651 Dart_StringToCString(func_name, &name_chars); |
| 650 EXPECT_STREQ(expected_trace[i], name_chars); | 652 EXPECT_STREQ(expected_trace[i], name_chars); |
| 651 if (verbose) OS::Print(" >> %d: %s\n", i, name_chars); | 653 if (verbose) OS::Print(" >> %d: %s\n", i, name_chars); |
| 652 } | 654 } |
| 653 // Remove the breakpoint after we've hit it twice | 655 // Remove the breakpoint after we've hit it twice |
| 654 if (breakpoint_hit_counter == 2) { | 656 if (breakpoint_hit_counter == 2) { |
| 655 if (verbose) OS::Print("uninstalling breakpoint\n"); | 657 if (verbose) OS::Print("uninstalling breakpoint\n"); |
| (...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1001 list_as_string = Dart_ToString(lib_list); | 1003 list_as_string = Dart_ToString(lib_list); |
| 1002 list_cstr = ""; | 1004 list_cstr = ""; |
| 1003 EXPECT_VALID(Dart_StringToCString(list_as_string, &list_cstr)); | 1005 EXPECT_VALID(Dart_StringToCString(list_as_string, &list_cstr)); |
| 1004 EXPECT_SUBSTRING(TestCase::url(), list_cstr); | 1006 EXPECT_SUBSTRING(TestCase::url(), list_cstr); |
| 1005 } | 1007 } |
| 1006 | 1008 |
| 1007 | 1009 |
| 1008 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). | 1010 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). |
| 1009 | 1011 |
| 1010 } // namespace dart | 1012 } // namespace dart |
| OLD | NEW |