| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 "vm/service.h" | 5 #include "vm/service.h" |
| 6 | 6 |
| 7 #include "include/dart_api.h" | 7 #include "include/dart_api.h" |
| 8 #include "include/dart_native_api.h" | 8 #include "include/dart_native_api.h" |
| 9 #include "platform/globals.h" | 9 #include "platform/globals.h" |
| 10 | 10 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 40 | 40 |
| 41 #define Z (T->zone()) | 41 #define Z (T->zone()) |
| 42 | 42 |
| 43 | 43 |
| 44 DECLARE_FLAG(bool, trace_service); | 44 DECLARE_FLAG(bool, trace_service); |
| 45 DECLARE_FLAG(bool, trace_service_pause_events); | 45 DECLARE_FLAG(bool, trace_service_pause_events); |
| 46 DEFINE_FLAG(charp, vm_name, "vm", | 46 DEFINE_FLAG(charp, vm_name, "vm", |
| 47 "The default name of this vm as reported by the VM service " | 47 "The default name of this vm as reported by the VM service " |
| 48 "protocol"); | 48 "protocol"); |
| 49 | 49 |
| 50 DEFINE_FLAG(bool, warn_on_pause_with_no_debugger, false, |
| 51 "Print a message when an isolate is paused but there is no " |
| 52 "debugger attached."); |
| 53 |
| 50 // The name of this of this vm as reported by the VM service protocol. | 54 // The name of this of this vm as reported by the VM service protocol. |
| 51 static char* vm_name = NULL; | 55 static char* vm_name = NULL; |
| 52 | 56 |
| 53 | 57 |
| 54 static const char* GetVMName() { | 58 static const char* GetVMName() { |
| 55 if (vm_name == NULL) { | 59 if (vm_name == NULL) { |
| 56 return FLAG_vm_name; | 60 return FLAG_vm_name; |
| 57 } | 61 } |
| 58 return vm_name; | 62 return vm_name; |
| 59 } | 63 } |
| (...skipping 855 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 915 { | 919 { |
| 916 NoSafepointScope no_safepoint; | 920 NoSafepointScope no_safepoint; |
| 917 memmove(message.DataAddr(offset), data, size); | 921 memmove(message.DataAddr(offset), data, size); |
| 918 offset += size; | 922 offset += size; |
| 919 } | 923 } |
| 920 ASSERT(offset == total_bytes); | 924 ASSERT(offset == total_bytes); |
| 921 SendEvent(stream_id, event_type, message); | 925 SendEvent(stream_id, event_type, message); |
| 922 } | 926 } |
| 923 | 927 |
| 924 | 928 |
| 929 static void ReportPauseOnConsole(ServiceEvent* event) { |
| 930 const char* name = event->isolate()->debugger_name(); |
| 931 switch (event->kind()) { |
| 932 case ServiceEvent::kPauseStart: |
| 933 OS::PrintErr( |
| 934 "vm-service: isolate '%s' has no debugger attached and is paused at " |
| 935 "start. Connect to Observatory to debug.\n", name); |
| 936 break; |
| 937 case ServiceEvent::kPauseExit: |
| 938 OS::PrintErr( |
| 939 "vm-service: isolate '%s' has no debugger attached and is paused at " |
| 940 "exit. Connect to Observatory to debug.\n", name); |
| 941 break; |
| 942 case ServiceEvent::kPauseException: |
| 943 OS::PrintErr( |
| 944 "vm-service: isolate '%s' has no debugger attached and is paused due " |
| 945 "to exception. Connect to Observatory to debug.\n", name); |
| 946 break; |
| 947 case ServiceEvent::kPauseInterrupted: |
| 948 OS::PrintErr( |
| 949 "vm-service: isolate '%s' has no debugger attached and is paused due " |
| 950 "to interrupt. Connect to Observatory to debug.\n", name); |
| 951 break; |
| 952 case ServiceEvent::kPauseBreakpoint: |
| 953 OS::PrintErr( |
| 954 "vm-service: isolate '%s' has no debugger attached and is paused. " |
| 955 "Connect to Observatory to debug.\n", name); |
| 956 break; |
| 957 default: |
| 958 UNREACHABLE(); |
| 959 break; |
| 960 } |
| 961 } |
| 962 |
| 963 |
| 925 void Service::HandleEvent(ServiceEvent* event) { | 964 void Service::HandleEvent(ServiceEvent* event) { |
| 926 if (event->isolate() != NULL && | 965 if (event->isolate() != NULL && |
| 927 ServiceIsolate::IsServiceIsolateDescendant(event->isolate())) { | 966 ServiceIsolate::IsServiceIsolateDescendant(event->isolate())) { |
| 928 return; | 967 return; |
| 929 } | 968 } |
| 969 if (FLAG_warn_on_pause_with_no_debugger && |
| 970 event->IsPause() && !Service::debug_stream.enabled()) { |
| 971 // If we are about to pause a running program which has no |
| 972 // debugger connected, tell the user about it. |
| 973 ReportPauseOnConsole(event); |
| 974 } |
| 930 if (!ServiceIsolate::IsRunning()) { | 975 if (!ServiceIsolate::IsRunning()) { |
| 931 return; | 976 return; |
| 932 } | 977 } |
| 933 JSONStream js; | 978 JSONStream js; |
| 934 const char* stream_id = event->stream_id(); | 979 const char* stream_id = event->stream_id(); |
| 935 ASSERT(stream_id != NULL); | 980 ASSERT(stream_id != NULL); |
| 936 { | 981 { |
| 937 JSONObject jsobj(&js); | 982 JSONObject jsobj(&js); |
| 938 jsobj.AddProperty("jsonrpc", "2.0"); | 983 jsobj.AddProperty("jsonrpc", "2.0"); |
| 939 jsobj.AddProperty("method", "streamNotify"); | 984 jsobj.AddProperty("method", "streamNotify"); |
| (...skipping 2926 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3866 const ServiceMethodDescriptor& method = service_methods_[i]; | 3911 const ServiceMethodDescriptor& method = service_methods_[i]; |
| 3867 if (strcmp(method_name, method.name) == 0) { | 3912 if (strcmp(method_name, method.name) == 0) { |
| 3868 return &method; | 3913 return &method; |
| 3869 } | 3914 } |
| 3870 } | 3915 } |
| 3871 return NULL; | 3916 return NULL; |
| 3872 } | 3917 } |
| 3873 | 3918 |
| 3874 | 3919 |
| 3875 } // namespace dart | 3920 } // namespace dart |
| OLD | NEW |