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

Unified Diff: runtime/vm/service.cc

Issue 1312763010: Support column-based breakpoints in the VM and Observatory. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: hausner review Created 5 years, 3 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/object.cc ('k') | runtime/vm/service/service.md » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/service.cc
diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc
index c0959e3510c12e8a6425d68a4f1b5b7a28234294..a9eea6ae6174ca2a4e1032d023fd918a9511cfee 100644
--- a/runtime/vm/service.cc
+++ b/runtime/vm/service.cc
@@ -2041,8 +2041,10 @@ static bool GetCallSiteData(Isolate* isolate, JSONStream* js) {
static const MethodParameter* add_breakpoint_params[] = {
ISOLATE_PARAMETER,
- new IdParameter("scriptId", true),
+ new IdParameter("scriptId", false),
+ new IdParameter("scriptUri", false),
new UIntParameter("line", true),
+ new UIntParameter("column", false),
NULL,
};
@@ -2050,16 +2052,41 @@ static const MethodParameter* add_breakpoint_params[] = {
static bool AddBreakpoint(Isolate* isolate, JSONStream* js) {
const char* line_param = js->LookupParam("line");
intptr_t line = UIntParameter::Parse(line_param);
- const char* script_id = js->LookupParam("scriptId");
- Object& obj = Object::Handle(LookupHeapObject(isolate, script_id, NULL));
- if (obj.raw() == Object::sentinel().raw() || !obj.IsScript()) {
- PrintInvalidParamError(js, "scriptId");
+ const char* col_param = js->LookupParam("column");
+ intptr_t col = -1;
+ if (col_param != NULL) {
+ col = UIntParameter::Parse(col_param);
+ if (col == 0) {
+ // Column number is 1-based.
+ PrintInvalidParamError(js, "column");
+ return true;
+ }
+ }
+ const char* script_id_param = js->LookupParam("scriptId");
+ const char* script_uri_param = js->LookupParam("scriptUri");
+ if (script_id_param == NULL && script_uri_param == NULL) {
+ js->PrintError(kInvalidParams,
+ "%s expects the 'scriptId' or the 'scriptUri' parameter",
+ js->method());
return true;
}
- const Script& script = Script::Cast(obj);
- const String& script_url = String::Handle(script.url());
- Breakpoint* bpt =
- isolate->debugger()->SetBreakpointAtLine(script_url, line);
+ String& script_uri = String::Handle(isolate);
+ if (script_id_param != NULL) {
+ Object& obj =
+ Object::Handle(LookupHeapObject(isolate, script_id_param, NULL));
+ if (obj.raw() == Object::sentinel().raw() || !obj.IsScript()) {
+ PrintInvalidParamError(js, "scriptId");
+ return true;
+ }
+ const Script& script = Script::Cast(obj);
+ script_uri = script.url();
+ }
+ if (script_uri_param != NULL) {
+ script_uri = String::New(script_uri_param);
+ }
+ ASSERT(!script_uri.IsNull());
+ Breakpoint* bpt = NULL;
+ bpt = isolate->debugger()->SetBreakpointAtLineCol(script_uri, line, col);
if (bpt == NULL) {
js->PrintError(kCannotAddBreakpoint,
"%s: Cannot add breakpoint at line '%s'",
@@ -2866,8 +2893,8 @@ static const MethodParameter* get_version_params[] = {
static bool GetVersion(Isolate* isolate, JSONStream* js) {
JSONObject jsobj(js);
jsobj.AddProperty("type", "Version");
- jsobj.AddProperty("major", static_cast<intptr_t>(2));
- jsobj.AddProperty("minor", static_cast<intptr_t>(1));
+ jsobj.AddProperty("major", static_cast<intptr_t>(3));
+ jsobj.AddProperty("minor", static_cast<intptr_t>(0));
jsobj.AddProperty("_privateMajor", static_cast<intptr_t>(0));
jsobj.AddProperty("_privateMinor", static_cast<intptr_t>(0));
return true;
« no previous file with comments | « runtime/vm/object.cc ('k') | runtime/vm/service/service.md » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698