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

Unified Diff: runtime/vm/debugger_api_impl.cc

Issue 10383164: Debugger wire protocol: setting breakpoints (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 7 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
Index: runtime/vm/debugger_api_impl.cc
===================================================================
--- runtime/vm/debugger_api_impl.cc (revision 7627)
+++ runtime/vm/debugger_api_impl.cc (working copy)
@@ -84,6 +84,44 @@
}
+static Dart_BreakpointResolvedHandler* bp_resolved_handler = NULL;
+
+static void DebuggerEventHandler(Debugger::DebuggerEvent* event) {
+ printf("Debugger event %d\n", event->type);
+ Isolate* isolate = Isolate::Current();
+ ASSERT(isolate != NULL);
+ if (event->type == Debugger::kBreakpointResolved) {
+ if (bp_resolved_handler == NULL) {
+ return;
+ }
+ SourceBreakpoint* bpt = event->breakpoint;
+ ASSERT(bpt != NULL);
+ Dart_Handle url = Api::NewHandle(isolate, bpt->SourceUrl());
+ (*bp_resolved_handler)(bpt->id(), url, bpt->LineNumber());
+ } else {
+ UNIMPLEMENTED();
+ }
+}
+
+
+DART_EXPORT void Dart_SetBreakpointResolvedHandler(
+ Dart_BreakpointResolvedHandler handler) {
+ bp_resolved_handler = handler;
+ Isolate* isolate = Isolate::Current();
+ DARTSCOPE(isolate);
+ isolate->debugger()->SetEventHandler(DebuggerEventHandler);
+}
+
+
+DART_EXPORT Dart_Handle Dart_GetStackTrace(Dart_StackTrace* trace) {
+ Isolate* isolate = Isolate::Current();
+ DARTSCOPE(isolate);
+ CHECK_NOT_NULL(trace);
+ *trace = reinterpret_cast<Dart_StackTrace>(isolate->debugger()->StackTrace());
+ return Api::True(isolate);
+}
+
+
DART_EXPORT Dart_Handle Dart_ActivationFrameInfo(
Dart_ActivationFrame activation_frame,
Dart_Handle* function_name,
@@ -114,6 +152,28 @@
}
+DART_EXPORT Dart_Handle Dart_SetBreakpoint(
+ Dart_Handle script_url_in,
+ intptr_t line_number) {
+ Isolate* isolate = Isolate::Current();
+ DARTSCOPE(isolate);
+
+ String& script_url = String::Handle();
+ UNWRAP_AND_CHECK_PARAM(String, script_url, script_url_in);
+
+ Debugger* debugger = isolate->debugger();
+ ASSERT(debugger != NULL);
+ SourceBreakpoint* bpt =
+ debugger->SetBreakpointAtLine(script_url, line_number);
+ if (bpt == NULL) {
+ return Api::NewError("%s: could not set breakpoint at line %d in '%s'",
+ CURRENT_FUNC, line_number, script_url.ToCString());
+ }
+ return Dart_NewInteger(bpt->id());
+}
+
+
+// TODO(hausner): remove this function.
DART_EXPORT Dart_Handle Dart_SetBreakpointAtLine(
Dart_Handle script_url_in,
Dart_Handle line_number_in,
@@ -153,6 +213,36 @@
}
+DART_EXPORT Dart_Handle Dart_GetBreakpointURL(intptr_t bp_id) {
+ Isolate* isolate = Isolate::Current();
+ DARTSCOPE(isolate);
+ Debugger* debugger = isolate->debugger();
+ ASSERT(debugger != NULL);
+
+ SourceBreakpoint* bpt = debugger->GetBreakpointById(bp_id);
+ if (bpt == NULL) {
+ return Api::NewError("%s: breakpoint with id %d does not exist",
+ CURRENT_FUNC, bp_id);
+ }
+ return Api::NewHandle(isolate, bpt->SourceUrl());
+}
+
+
+DART_EXPORT Dart_Handle Dart_GetBreakpointLine(intptr_t bp_id) {
+ Isolate* isolate = Isolate::Current();
+ DARTSCOPE(isolate);
+ Debugger* debugger = isolate->debugger();
+ ASSERT(debugger != NULL);
+
+ SourceBreakpoint* bpt = debugger->GetBreakpointById(bp_id);
+ if (bpt == NULL) {
+ return Api::NewError("%s: breakpoint with id %d does not exist",
+ CURRENT_FUNC, bp_id);
+ }
+ return Dart_NewInteger(bpt->LineNumber());
+}
+
+
DART_EXPORT Dart_Handle Dart_SetBreakpointAtEntry(
Dart_Handle library_in,
Dart_Handle class_name_in,
@@ -202,13 +292,24 @@
}
+DART_EXPORT Dart_Handle Dart_RemoveBreakpoint(intptr_t bp_id) {
+ Isolate* isolate = Isolate::Current();
+ DARTSCOPE(isolate);
+ Debugger* debugger = isolate->debugger();
+ ASSERT(debugger != NULL);
+
+ isolate->debugger()->RemoveBreakpoint(bp_id);
+ return Api::True(isolate);
+}
+
+
DART_EXPORT Dart_Handle Dart_DeleteBreakpoint(
Dart_Breakpoint breakpoint_in) {
Isolate* isolate = Isolate::Current();
DARTSCOPE(isolate);
CHECK_AND_CAST(SourceBreakpoint, breakpoint, breakpoint_in);
- isolate->debugger()->RemoveBreakpoint(breakpoint);
+ isolate->debugger()->RemoveBreakpoint(breakpoint->id());
return Api::True(isolate);
}

Powered by Google App Engine
This is Rietveld 408576698