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

Side by Side Diff: runtime/vm/debugger.cc

Issue 113513004: Handle vmservice messages while at breakpoint. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/debugger.h ('k') | runtime/vm/debugger_api_impl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "vm/debugger.h" 5 #include "vm/debugger.h"
6 6
7 #include "include/dart_api.h" 7 #include "include/dart_api.h"
8 8
9 #include "vm/code_generator.h" 9 #include "vm/code_generator.h"
10 #include "vm/code_patcher.h" 10 #include "vm/code_patcher.h"
11 #include "vm/compiler.h" 11 #include "vm/compiler.h"
12 #include "vm/dart_entry.h" 12 #include "vm/dart_entry.h"
13 #include "vm/deopt_instructions.h" 13 #include "vm/deopt_instructions.h"
14 #include "vm/flags.h" 14 #include "vm/flags.h"
15 #include "vm/globals.h" 15 #include "vm/globals.h"
16 #include "vm/longjump.h" 16 #include "vm/longjump.h"
17 #include "vm/json_stream.h"
17 #include "vm/object.h" 18 #include "vm/object.h"
18 #include "vm/object_store.h" 19 #include "vm/object_store.h"
19 #include "vm/os.h" 20 #include "vm/os.h"
20 #include "vm/port.h" 21 #include "vm/port.h"
21 #include "vm/stack_frame.h" 22 #include "vm/stack_frame.h"
22 #include "vm/stub_code.h" 23 #include "vm/stub_code.h"
23 #include "vm/symbols.h" 24 #include "vm/symbols.h"
24 #include "vm/visitor.h" 25 #include "vm/visitor.h"
25 26
26 27
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 78
78 RawScript* SourceBreakpoint::SourceCode() { 79 RawScript* SourceBreakpoint::SourceCode() {
79 const Function& func = Function::Handle(function_); 80 const Function& func = Function::Handle(function_);
80 return func.script(); 81 return func.script();
81 } 82 }
82 83
83 84
84 void SourceBreakpoint::GetCodeLocation( 85 void SourceBreakpoint::GetCodeLocation(
85 Library* lib, 86 Library* lib,
86 Script* script, 87 Script* script,
87 intptr_t* pos) { 88 intptr_t* pos) const {
88 const Function& func = Function::Handle(function_); 89 const Function& func = Function::Handle(function_);
89 const Class& cls = Class::Handle(func.origin()); 90 const Class& cls = Class::Handle(func.origin());
90 *lib = cls.library(); 91 *lib = cls.library();
91 *script = func.script(); 92 *script = func.script();
92 *pos = token_pos(); 93 *pos = token_pos();
93 } 94 }
94 95
95 96
96 RawString* SourceBreakpoint::SourceUrl() { 97 RawString* SourceBreakpoint::SourceUrl() {
97 const Script& script = Script::Handle(SourceCode()); 98 const Script& script = Script::Handle(SourceCode());
(...skipping 14 matching lines...) Expand all
112 void SourceBreakpoint::set_function(const Function& func) { 113 void SourceBreakpoint::set_function(const Function& func) {
113 function_ = func.raw(); 114 function_ = func.raw();
114 } 115 }
115 116
116 117
117 void SourceBreakpoint::VisitObjectPointers(ObjectPointerVisitor* visitor) { 118 void SourceBreakpoint::VisitObjectPointers(ObjectPointerVisitor* visitor) {
118 visitor->VisitPointer(reinterpret_cast<RawObject**>(&function_)); 119 visitor->VisitPointer(reinterpret_cast<RawObject**>(&function_));
119 } 120 }
120 121
121 122
123 void SourceBreakpoint::PrintToJSONStream(JSONStream* stream) const {
124 Isolate* isolate = Isolate::Current();
125
126 JSONObject jsobj(stream);
127 jsobj.AddProperty("type", "Breakpoint");
128
129 jsobj.AddProperty("id", id());
130 jsobj.AddProperty("enabled", IsEnabled());
131
132 const Function& func = Function::Handle(function());
133 jsobj.AddProperty("resolved", func.HasCode());
134
135 Library& library = Library::Handle(isolate);
136 Script& script = Script::Handle(isolate);
137 intptr_t token_pos;
138 GetCodeLocation(&library, &script, &token_pos);
139 {
140 JSONObject location(&jsobj, "location");
141 location.AddProperty("type", "Location");
142 location.AddProperty("libId", library.index());
143
144 const String& url = String::Handle(script.url());
145 location.AddProperty("script", url.ToCString());
146 location.AddProperty("tokenPos", token_pos);
147 }
148 }
149
122 150
123 void CodeBreakpoint::VisitObjectPointers(ObjectPointerVisitor* visitor) { 151 void CodeBreakpoint::VisitObjectPointers(ObjectPointerVisitor* visitor) {
124 visitor->VisitPointer(reinterpret_cast<RawObject**>(&function_)); 152 visitor->VisitPointer(reinterpret_cast<RawObject**>(&function_));
125 } 153 }
126 154
155
127 ActivationFrame::ActivationFrame( 156 ActivationFrame::ActivationFrame(
128 uword pc, 157 uword pc,
129 uword fp, 158 uword fp,
130 uword sp, 159 uword sp,
131 const Code& code, 160 const Code& code,
132 const Array& deopt_frame, 161 const Array& deopt_frame,
133 intptr_t deopt_frame_offset) 162 intptr_t deopt_frame_offset)
134 : pc_(pc), fp_(fp), sp_(sp), 163 : pc_(pc), fp_(fp), sp_(sp),
135 ctx_(Context::ZoneHandle()), 164 ctx_(Context::ZoneHandle()),
136 code_(Code::ZoneHandle(code.raw())), 165 code_(Code::ZoneHandle(code.raw())),
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 while (cbpt != NULL) { 241 while (cbpt != NULL) {
213 if (func.raw() == cbpt->function()) { 242 if (func.raw() == cbpt->function()) {
214 return true; 243 return true;
215 } 244 }
216 cbpt = cbpt->next_; 245 cbpt = cbpt->next_;
217 } 246 }
218 return false; 247 return false;
219 } 248 }
220 249
221 250
251 void Debugger::PrintBreakpointsToJSONArray(JSONArray* jsarr) const {
252 SourceBreakpoint* sbpt = src_breakpoints_;
253 while (sbpt != NULL) {
254 jsarr->AddValue(sbpt);
255 sbpt = sbpt->next_;
256 }
257 }
258
259
222 RawString* ActivationFrame::QualifiedFunctionName() { 260 RawString* ActivationFrame::QualifiedFunctionName() {
223 return String::New(Debugger::QualifiedFunctionName(function())); 261 return String::New(Debugger::QualifiedFunctionName(function()));
224 } 262 }
225 263
226 264
227 RawString* ActivationFrame::SourceUrl() { 265 RawString* ActivationFrame::SourceUrl() {
228 const Script& script = Script::Handle(SourceScript()); 266 const Script& script = Script::Handle(SourceScript());
229 return script.url(); 267 return script.url();
230 } 268 }
231 269
(...skipping 1207 matching lines...) Expand 10 before | Expand all | Expand 10 after
1439 SourceBreakpoint* Debugger::SetBreakpointAtEntry( 1477 SourceBreakpoint* Debugger::SetBreakpointAtEntry(
1440 const Function& target_function) { 1478 const Function& target_function) {
1441 ASSERT(!target_function.IsNull()); 1479 ASSERT(!target_function.IsNull());
1442 return SetBreakpoint(target_function, 1480 return SetBreakpoint(target_function,
1443 target_function.token_pos(), 1481 target_function.token_pos(),
1444 target_function.end_token_pos()); 1482 target_function.end_token_pos());
1445 } 1483 }
1446 1484
1447 1485
1448 SourceBreakpoint* Debugger::SetBreakpointAtLine(const String& script_url, 1486 SourceBreakpoint* Debugger::SetBreakpointAtLine(const String& script_url,
1449 intptr_t line_number) { 1487 intptr_t line_number) {
1450 Library& lib = Library::Handle(isolate_); 1488 Library& lib = Library::Handle(isolate_);
1451 Script& script = Script::Handle(isolate_); 1489 Script& script = Script::Handle(isolate_);
1452 const GrowableObjectArray& libs = 1490 const GrowableObjectArray& libs =
1453 GrowableObjectArray::Handle(isolate_->object_store()->libraries()); 1491 GrowableObjectArray::Handle(isolate_->object_store()->libraries());
1454 for (intptr_t i = 0; i < libs.Length(); i++) { 1492 for (intptr_t i = 0; i < libs.Length(); i++) {
1455 lib ^= libs.At(i); 1493 lib ^= libs.At(i);
1456 script = lib.LookupScript(script_url); 1494 script = lib.LookupScript(script_url);
1457 if (!script.IsNull()) { 1495 if (!script.IsNull()) {
1458 break; 1496 break;
1459 } 1497 }
(...skipping 636 matching lines...) Expand 10 before | Expand all | Expand 10 after
2096 } 2134 }
2097 2135
2098 2136
2099 void Debugger::RegisterCodeBreakpoint(CodeBreakpoint* bpt) { 2137 void Debugger::RegisterCodeBreakpoint(CodeBreakpoint* bpt) {
2100 ASSERT(bpt->next() == NULL); 2138 ASSERT(bpt->next() == NULL);
2101 bpt->set_next(code_breakpoints_); 2139 bpt->set_next(code_breakpoints_);
2102 code_breakpoints_ = bpt; 2140 code_breakpoints_ = bpt;
2103 } 2141 }
2104 2142
2105 } // namespace dart 2143 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/debugger.h ('k') | runtime/vm/debugger_api_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698