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

Unified Diff: pkg/analysis_server/lib/src/analysis_server.dart

Issue 2914383002: Expose the exceptions info in the diagnostics page. (Closed)
Patch Set: review comments Created 3 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
« no previous file with comments | « no previous file | pkg/analysis_server/lib/src/collections.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analysis_server/lib/src/analysis_server.dart
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index fa718fccb2b69a3414156bfefcddec26274259f5..546859f79381a13a9be471321679340aa3c4446a 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -13,6 +13,7 @@ import 'package:analysis_server/protocol/protocol_generated.dart'
hide AnalysisOptions;
import 'package:analysis_server/src/analysis_logger.dart';
import 'package:analysis_server/src/channel/channel.dart';
+import 'package:analysis_server/src/collections.dart';
import 'package:analysis_server/src/computer/computer_highlights.dart';
import 'package:analysis_server/src/computer/computer_highlights2.dart';
import 'package:analysis_server/src/computer/computer_outline.dart';
@@ -262,6 +263,12 @@ class AnalysisServer {
}
/**
+ * A [RecentBuffer] of the most recent exceptions encountered by the analysis
+ * server.
+ */
+ final RecentBuffer<ServerException> exceptions = new RecentBuffer(10);
+
+ /**
* The class into which performance information is currently being recorded.
* During startup, this will be the same as [performanceDuringStartup]
* and after startup is complete, this switches to [performanceAfterStartup].
@@ -1233,26 +1240,26 @@ class AnalysisServer {
void sendServerErrorNotification(String message, exception, stackTrace,
{bool fatal: false}) {
StringBuffer buffer = new StringBuffer();
- if (exception != null) {
- buffer.write(exception);
- } else {
- buffer.write('null exception');
- }
+ buffer.write(exception ?? 'null exception');
if (stackTrace != null) {
buffer.writeln();
buffer.write(stackTrace);
} else if (exception is! CaughtException) {
- try {
- throw 'ignored';
- } catch (ignored, stackTrace) {
- buffer.writeln();
- buffer.write(stackTrace);
- }
+ stackTrace = StackTrace.current;
Brian Wilkerson 2017/06/02 17:00:47 Or buffer.writeln(); buffer.write(stackTrace ?? S
+ buffer.writeln();
+ buffer.write(stackTrace);
}
+
// send the notification
channel.sendNotification(
new ServerErrorParams(fatal, message, buffer.toString())
.toNotification());
+
+ // remember the last few exceptions
+ if (exception is CaughtException) {
+ stackTrace ??= exception.stackTrace;
Brian Wilkerson 2017/06/02 17:00:47 stackTrace will never be null at this point (unles
devoncarew 2017/06/02 17:12:59 I think it can be, if it starts null, and the exce
Brian Wilkerson 2017/06/02 17:20:28 Yep. I missed the condition.
+ }
+ exceptions.add(new ServerException(message, exception, stackTrace, fatal));
}
/**
@@ -2384,3 +2391,18 @@ class ServerPerformanceStatistics {
*/
static PerformanceTag splitStore = new PerformanceTag('splitStore');
}
+
+/**
+ * Used to record server exceptions.
+ */
+class ServerException {
+ final String message;
+ final dynamic exception;
+ final StackTrace stackTrace;
+ final bool fatal;
+
+ ServerException(this.message, this.exception, this.stackTrace, this.fatal);
+
+ @override
+ String toString() => message;
+}
« no previous file with comments | « no previous file | pkg/analysis_server/lib/src/collections.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698