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

Unified Diff: runtime/vm/service/vmservice.dart

Issue 1100583006: Add crash dumps to service protocol and Observatory (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 8 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
« runtime/vm/debugger.h ('K') | « runtime/vm/service/running_isolate.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/service/vmservice.dart
diff --git a/runtime/vm/service/vmservice.dart b/runtime/vm/service/vmservice.dart
index ee6f2cd22a63a4007e26af8cc33944a594dfc187..e86b58f4902400424f56225ed1fed6b621a71eaa 100644
--- a/runtime/vm/service/vmservice.dart
+++ b/runtime/vm/service/vmservice.dart
@@ -140,6 +140,49 @@ class VMService extends MessageRouter {
message.setResponse(JSON.encode(result));
}
+ Future<String> _getCrashDump() async {
+ final perIsolateRequests = [
+ // ?isolateId=<isolate id> will be appended to each of these requests.
+ Uri.parse('getIsolate'), // Isolate information.
+ Uri.parse('_getAllocationProfile'), // State of heap.
+ Uri.parse('getStack?full=true'), // Call stack + local variables.
+ ];
+
+ // Snapshot of running isolates.
+ var isolates = runningIsolates.isolates.values.toList();
+
+ // Collect the mapping from request uris to responses.
+ var responses = {
+ };
+
+ // Request VM.
+ var getVM = Uri.parse('getVM');
+ var getVmResponse = await new Message.fromUri(getVM).sendToVM();
+ responses[getVM.toString()] = JSON.decode(getVmResponse);
+
+ // Request command line flags.
+ var getFlagList = Uri.parse('getFlagList');
+ var getFlagListResponse = await new Message.fromUri(getFlagList).sendToVM();
+ responses[getFlagList.toString()] = JSON.decode(getFlagListResponse);
+
+ // Make requests to each isolate.
+ for (var isolate in isolates) {
+ for (var request in perIsolateRequests) {
+ var message = new Message.forIsolate(request, isolate);
+ var response = await isolate.route(message);
+ // Decode the JSON and and insert it into the map. The map key
+ // is the request Uri.
+ responses[message.toUri().toString()] = JSON.decode(response);
+ }
+ }
+
+ // Encode the entire crash dump.
+ return JSON.encode({
+ 'type' : '_crashDump',
+ 'responses' : responses,
+ });
+ }
+
Future<String> route(Message message) {
if (message.completed) {
return message.response;
@@ -149,6 +192,9 @@ class VMService extends MessageRouter {
_clientCollection(message);
return message.response;
}
+ if (message.method == '_getCrashDump') {
+ return _getCrashDump();
+ }
if (message.params['isolateId'] != null) {
return runningIsolates.route(message);
}
« runtime/vm/debugger.h ('K') | « runtime/vm/service/running_isolate.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698