| 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 "bin/dbg_connection.h" | 5 #include "bin/dbg_connection.h" |
| 6 #include "bin/dartutils.h" | 6 #include "bin/dartutils.h" |
| 7 #include "bin/socket.h" | 7 #include "bin/socket.h" |
| 8 #include "bin/thread.h" | 8 #include "bin/thread.h" |
| 9 #include "bin/utils.h" | 9 #include "bin/utils.h" |
| 10 | 10 |
| (...skipping 439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 450 if (Dart_IsInteger(object)) { | 450 if (Dart_IsInteger(object)) { |
| 451 buf->Printf("\"kind\":\"integer\","); | 451 buf->Printf("\"kind\":\"integer\","); |
| 452 } else if (Dart_IsString(object)) { | 452 } else if (Dart_IsString(object)) { |
| 453 buf->Printf("\"kind\":\"string\","); | 453 buf->Printf("\"kind\":\"string\","); |
| 454 } else if (Dart_IsBoolean(object)) { | 454 } else if (Dart_IsBoolean(object)) { |
| 455 buf->Printf("\"kind\":\"boolean\","); | 455 buf->Printf("\"kind\":\"boolean\","); |
| 456 } else if (Dart_IsList(object)) { | 456 } else if (Dart_IsList(object)) { |
| 457 intptr_t len = 0; | 457 intptr_t len = 0; |
| 458 Dart_Handle res = Dart_ListLength(object, &len); | 458 Dart_Handle res = Dart_ListLength(object, &len); |
| 459 ASSERT_NOT_ERROR(res); | 459 ASSERT_NOT_ERROR(res); |
| 460 buf->Printf("\"kind\":\"list\",\"length\":%d,", len); | 460 buf->Printf("\"kind\":\"list\",\"length\":%"Pd",", len); |
| 461 } else { | 461 } else { |
| 462 buf->Printf("\"kind\":\"object\","); | 462 buf->Printf("\"kind\":\"object\","); |
| 463 } | 463 } |
| 464 FormatTextualValue(buf, object); | 464 FormatTextualValue(buf, object); |
| 465 } | 465 } |
| 466 | 466 |
| 467 | 467 |
| 468 static void FormatValueObj(dart::TextBuffer* buf, Dart_Handle object) { | 468 static void FormatValueObj(dart::TextBuffer* buf, Dart_Handle object) { |
| 469 buf->Printf("{"); | 469 buf->Printf("{"); |
| 470 FormatValue(buf, object); | 470 FormatValue(buf, object); |
| 471 buf->Printf("}"); | 471 buf->Printf("}"); |
| 472 } | 472 } |
| 473 | 473 |
| 474 | 474 |
| 475 static void FormatRemoteObj(dart::TextBuffer* buf, Dart_Handle object) { | 475 static void FormatRemoteObj(dart::TextBuffer* buf, Dart_Handle object) { |
| 476 intptr_t obj_id = Dart_CacheObject(object); | 476 intptr_t obj_id = Dart_CacheObject(object); |
| 477 ASSERT(obj_id >= 0); | 477 ASSERT(obj_id >= 0); |
| 478 buf->Printf("{\"objectId\":%d,", obj_id); | 478 buf->Printf("{\"objectId\":%"Pd",", obj_id); |
| 479 FormatValue(buf, object); | 479 FormatValue(buf, object); |
| 480 buf->Printf("}"); | 480 buf->Printf("}"); |
| 481 } | 481 } |
| 482 | 482 |
| 483 | 483 |
| 484 static void FormatNamedValue(dart::TextBuffer* buf, | 484 static void FormatNamedValue(dart::TextBuffer* buf, |
| 485 Dart_Handle object_name, | 485 Dart_Handle object_name, |
| 486 Dart_Handle object) { | 486 Dart_Handle object) { |
| 487 ASSERT(Dart_IsString(object_name)); | 487 ASSERT(Dart_IsString(object_name)); |
| 488 buf->Printf("{\"name\":\"%s\",", GetStringChars(object_name)); | 488 buf->Printf("{\"name\":\"%s\",", GetStringChars(object_name)); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 518 intptr_t cls_id) { | 518 intptr_t cls_id) { |
| 519 Dart_Handle name, static_fields; | 519 Dart_Handle name, static_fields; |
| 520 intptr_t super_id = -1; | 520 intptr_t super_id = -1; |
| 521 intptr_t library_id = -1; | 521 intptr_t library_id = -1; |
| 522 Dart_Handle res = | 522 Dart_Handle res = |
| 523 Dart_GetClassInfo(cls_id, &name, &library_id, &super_id, &static_fields); | 523 Dart_GetClassInfo(cls_id, &name, &library_id, &super_id, &static_fields); |
| 524 RETURN_IF_ERROR(res); | 524 RETURN_IF_ERROR(res); |
| 525 RETURN_IF_ERROR(name); | 525 RETURN_IF_ERROR(name); |
| 526 buf->Printf("{\"name\":\"%s\",", GetStringChars(name)); | 526 buf->Printf("{\"name\":\"%s\",", GetStringChars(name)); |
| 527 if (super_id > 0) { | 527 if (super_id > 0) { |
| 528 buf->Printf("\"superclassId\":%d,", super_id); | 528 buf->Printf("\"superclassId\":%"Pd",", super_id); |
| 529 } | 529 } |
| 530 buf->Printf("\"libraryId\":%d,", library_id); | 530 buf->Printf("\"libraryId\":%"Pd",", library_id); |
| 531 RETURN_IF_ERROR(static_fields); | 531 RETURN_IF_ERROR(static_fields); |
| 532 buf->Printf("\"fields\":"); | 532 buf->Printf("\"fields\":"); |
| 533 FormatNamedValueList(buf, static_fields); | 533 FormatNamedValueList(buf, static_fields); |
| 534 buf->Printf("}"); | 534 buf->Printf("}"); |
| 535 return NULL; | 535 return NULL; |
| 536 } | 536 } |
| 537 | 537 |
| 538 | 538 |
| 539 static const char* FormatLibraryProps(dart::TextBuffer* buf, | 539 static const char* FormatLibraryProps(dart::TextBuffer* buf, |
| 540 intptr_t lib_id) { | 540 intptr_t lib_id) { |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 584 | 584 |
| 585 static const char* FormatObjProps(dart::TextBuffer* buf, | 585 static const char* FormatObjProps(dart::TextBuffer* buf, |
| 586 Dart_Handle object) { | 586 Dart_Handle object) { |
| 587 intptr_t class_id; | 587 intptr_t class_id; |
| 588 if (Dart_IsNull(object)) { | 588 if (Dart_IsNull(object)) { |
| 589 buf->Printf("{\"classId\":-1,\"fields\":[]}"); | 589 buf->Printf("{\"classId\":-1,\"fields\":[]}"); |
| 590 return NULL; | 590 return NULL; |
| 591 } | 591 } |
| 592 Dart_Handle res = Dart_GetObjClassId(object, &class_id); | 592 Dart_Handle res = Dart_GetObjClassId(object, &class_id); |
| 593 RETURN_IF_ERROR(res); | 593 RETURN_IF_ERROR(res); |
| 594 buf->Printf("{\"classId\": %d,", class_id); | 594 buf->Printf("{\"classId\": %"Pd",", class_id); |
| 595 buf->Printf("\"kind\":\"object\",\"fields\":"); | 595 buf->Printf("\"kind\":\"object\",\"fields\":"); |
| 596 Dart_Handle fields = Dart_GetInstanceFields(object); | 596 Dart_Handle fields = Dart_GetInstanceFields(object); |
| 597 RETURN_IF_ERROR(fields); | 597 RETURN_IF_ERROR(fields); |
| 598 FormatNamedValueList(buf, fields); | 598 FormatNamedValueList(buf, fields); |
| 599 buf->Printf("}"); | 599 buf->Printf("}"); |
| 600 return NULL; | 600 return NULL; |
| 601 } | 601 } |
| 602 | 602 |
| 603 | 603 |
| 604 static const char* FormatListSlice(dart::TextBuffer* buf, | 604 static const char* FormatListSlice(dart::TextBuffer* buf, |
| 605 Dart_Handle list, | 605 Dart_Handle list, |
| 606 intptr_t list_length, | 606 intptr_t list_length, |
| 607 intptr_t index, | 607 intptr_t index, |
| 608 intptr_t slice_length) { | 608 intptr_t slice_length) { |
| 609 intptr_t end_index = index + slice_length; | 609 intptr_t end_index = index + slice_length; |
| 610 ASSERT(end_index <= list_length); | 610 ASSERT(end_index <= list_length); |
| 611 buf->Printf("{\"index\":%d,", index); | 611 buf->Printf("{\"index\":%"Pd",", index); |
| 612 buf->Printf("\"length\":%d,", slice_length); | 612 buf->Printf("\"length\":%"Pd",", slice_length); |
| 613 buf->Printf("\"elements\":["); | 613 buf->Printf("\"elements\":["); |
| 614 for (intptr_t i = index; i < end_index; i++) { | 614 for (intptr_t i = index; i < end_index; i++) { |
| 615 Dart_Handle value = Dart_ListGetAt(list, i); | 615 Dart_Handle value = Dart_ListGetAt(list, i); |
| 616 if (i > index) { | 616 if (i > index) { |
| 617 buf->Printf(","); | 617 buf->Printf(","); |
| 618 } | 618 } |
| 619 FormatValueObj(buf, value); | 619 FormatValueObj(buf, value); |
| 620 } | 620 } |
| 621 buf->Printf("]}"); | 621 buf->Printf("]}"); |
| 622 return NULL; | 622 return NULL; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 635 Dart_Handle func_name; | 635 Dart_Handle func_name; |
| 636 Dart_Handle script_url; | 636 Dart_Handle script_url; |
| 637 intptr_t line_number = 0; | 637 intptr_t line_number = 0; |
| 638 intptr_t library_id = 0; | 638 intptr_t library_id = 0; |
| 639 res = Dart_ActivationFrameInfo( | 639 res = Dart_ActivationFrameInfo( |
| 640 frame, &func_name, &script_url, &line_number, &library_id); | 640 frame, &func_name, &script_url, &line_number, &library_id); |
| 641 ASSERT_NOT_ERROR(res); | 641 ASSERT_NOT_ERROR(res); |
| 642 ASSERT(Dart_IsString(func_name)); | 642 ASSERT(Dart_IsString(func_name)); |
| 643 msg->Printf("%s{\"functionName\":", (i > 0) ? "," : ""); | 643 msg->Printf("%s{\"functionName\":", (i > 0) ? "," : ""); |
| 644 FormatEncodedString(msg, func_name); | 644 FormatEncodedString(msg, func_name); |
| 645 msg->Printf(",\"libraryId\": %d,", library_id); | 645 msg->Printf(",\"libraryId\": %"Pd",", library_id); |
| 646 | 646 |
| 647 ASSERT(Dart_IsString(script_url)); | 647 ASSERT(Dart_IsString(script_url)); |
| 648 msg->Printf("\"location\": { \"url\":"); | 648 msg->Printf("\"location\": { \"url\":"); |
| 649 FormatEncodedString(msg, script_url); | 649 FormatEncodedString(msg, script_url); |
| 650 msg->Printf(",\"lineNumber\":%d},", line_number); | 650 msg->Printf(",\"lineNumber\":%"Pd"},", line_number); |
| 651 | 651 |
| 652 Dart_Handle locals = Dart_GetLocalVariables(frame); | 652 Dart_Handle locals = Dart_GetLocalVariables(frame); |
| 653 ASSERT_NOT_ERROR(locals); | 653 ASSERT_NOT_ERROR(locals); |
| 654 msg->Printf("\"locals\":"); | 654 msg->Printf("\"locals\":"); |
| 655 FormatNamedValueList(msg, locals); | 655 FormatNamedValueList(msg, locals); |
| 656 msg->Printf("}"); | 656 msg->Printf("}"); |
| 657 } | 657 } |
| 658 msg->Printf("]"); | 658 msg->Printf("]"); |
| 659 } | 659 } |
| 660 | 660 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 684 Dart_Handle bp_id = Dart_SetBreakpoint(url, line_number); | 684 Dart_Handle bp_id = Dart_SetBreakpoint(url, line_number); |
| 685 if (Dart_IsError(bp_id)) { | 685 if (Dart_IsError(bp_id)) { |
| 686 SendError(msg_id, Dart_GetError(bp_id)); | 686 SendError(msg_id, Dart_GetError(bp_id)); |
| 687 return; | 687 return; |
| 688 } | 688 } |
| 689 ASSERT(Dart_IsInteger(bp_id)); | 689 ASSERT(Dart_IsInteger(bp_id)); |
| 690 uint64_t bp_id_value; | 690 uint64_t bp_id_value; |
| 691 Dart_Handle res = Dart_IntegerToUint64(bp_id, &bp_id_value); | 691 Dart_Handle res = Dart_IntegerToUint64(bp_id, &bp_id_value); |
| 692 ASSERT_NOT_ERROR(res); | 692 ASSERT_NOT_ERROR(res); |
| 693 dart::TextBuffer msg(64); | 693 dart::TextBuffer msg(64); |
| 694 msg.Printf("{ \"id\": %d, \"result\": { \"breakpointId\": %d }}", | 694 msg.Printf("{ \"id\": %d, \"result\": { \"breakpointId\": %"Pu64" }}", |
| 695 msg_id, bp_id_value); | 695 msg_id, bp_id_value); |
| 696 SendMsg(&msg); | 696 SendMsg(&msg); |
| 697 } | 697 } |
| 698 | 698 |
| 699 | 699 |
| 700 void DebuggerConnectionHandler::HandlePauseOnExcCmd(const char* json_msg) { | 700 void DebuggerConnectionHandler::HandlePauseOnExcCmd(const char* json_msg) { |
| 701 int msg_id = msgbuf_->MessageId(); | 701 int msg_id = msgbuf_->MessageId(); |
| 702 char* exc_chars = msgbuf_->GetStringParam("exceptions"); | 702 char* exc_chars = msgbuf_->GetStringParam("exceptions"); |
| 703 Dart_ExceptionPauseInfo info = kNoPauseOnExceptions; | 703 Dart_ExceptionPauseInfo info = kNoPauseOnExceptions; |
| 704 if (strcmp(exc_chars, "none") == 0) { | 704 if (strcmp(exc_chars, "none") == 0) { |
| (...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1015 Dart_ExitScope(); | 1015 Dart_ExitScope(); |
| 1016 } | 1016 } |
| 1017 | 1017 |
| 1018 | 1018 |
| 1019 void DebuggerConnectionHandler::BptResolvedHandler(intptr_t bp_id, | 1019 void DebuggerConnectionHandler::BptResolvedHandler(intptr_t bp_id, |
| 1020 Dart_Handle url, | 1020 Dart_Handle url, |
| 1021 intptr_t line_number) { | 1021 intptr_t line_number) { |
| 1022 Dart_EnterScope(); | 1022 Dart_EnterScope(); |
| 1023 dart::TextBuffer msg(128); | 1023 dart::TextBuffer msg(128); |
| 1024 msg.Printf("{ \"event\": \"breakpointResolved\", \"params\": {"); | 1024 msg.Printf("{ \"event\": \"breakpointResolved\", \"params\": {"); |
| 1025 msg.Printf("\"breakpointId\": %d, \"url\":", bp_id); | 1025 msg.Printf("\"breakpointId\": %"Pd", \"url\":", bp_id); |
| 1026 FormatEncodedString(&msg, url); | 1026 FormatEncodedString(&msg, url); |
| 1027 msg.Printf(",\"line\": %d }}", line_number); | 1027 msg.Printf(",\"line\": %"Pd" }}", line_number); |
| 1028 QueueMsg(&msg); | 1028 QueueMsg(&msg); |
| 1029 Dart_ExitScope(); | 1029 Dart_ExitScope(); |
| 1030 } | 1030 } |
| 1031 | 1031 |
| 1032 | 1032 |
| 1033 void DebuggerConnectionHandler::AcceptDbgConnection(int debugger_fd) { | 1033 void DebuggerConnectionHandler::AcceptDbgConnection(int debugger_fd) { |
| 1034 debugger_fd_ = debugger_fd; | 1034 debugger_fd_ = debugger_fd; |
| 1035 ASSERT(msgbuf_ == NULL); | 1035 ASSERT(msgbuf_ == NULL); |
| 1036 msgbuf_ = new MessageBuffer(debugger_fd_); | 1036 msgbuf_ = new MessageBuffer(debugger_fd_); |
| 1037 { | 1037 { |
| (...skipping 28 matching lines...) Expand all Loading... |
| 1066 DebuggerConnectionImpl::StartHandler(port_number); | 1066 DebuggerConnectionImpl::StartHandler(port_number); |
| 1067 Dart_SetBreakpointHandler(BreakpointHandler); | 1067 Dart_SetBreakpointHandler(BreakpointHandler); |
| 1068 Dart_SetBreakpointResolvedHandler(BptResolvedHandler); | 1068 Dart_SetBreakpointResolvedHandler(BptResolvedHandler); |
| 1069 Dart_SetExceptionThrownHandler(ExceptionThrownHandler); | 1069 Dart_SetExceptionThrownHandler(ExceptionThrownHandler); |
| 1070 } | 1070 } |
| 1071 | 1071 |
| 1072 | 1072 |
| 1073 DebuggerConnectionHandler::~DebuggerConnectionHandler() { | 1073 DebuggerConnectionHandler::~DebuggerConnectionHandler() { |
| 1074 CloseDbgConnection(); | 1074 CloseDbgConnection(); |
| 1075 } | 1075 } |
| OLD | NEW |