Unverified Commit c30f998e authored by Jia Hao's avatar Jia Hao Committed by GitHub

[flutter_tools] Fix missing stack trace from daemon (#144113)

When the daemon throws an exception, the receiving client is unable to surface stack traces from the daemon.

This is because it is sent with the `trace` key here:

https://github.com/flutter/flutter/blob/1e8dd1e4d6d70c5e06525bea3fb164a03d7a6c1d/packages/flutter_tools/lib/src/daemon.dart#L308

But the client tries to read it with the `stackTrace` key here:

https://github.com/flutter/flutter/blob/1e8dd1e4d6d70c5e06525bea3fb164a03d7a6c1d/packages/flutter_tools/lib/src/daemon.dart#L343

Thanks to @mraleph for spotting this!

*List which issues are fixed by this PR. You must list at least one issue. An issue is not required if the PR fixes something trivial like a typo.*

b/326825892
parent 331769f3
......@@ -340,7 +340,7 @@ class DaemonConnection {
// This is an error response.
_logger.printTrace('<- Error response received from daemon, id = $id');
final Object error = data['error']!;
final String stackTrace = data['stackTrace'] as String? ?? '';
final String stackTrace = data['trace'] as String? ?? '';
_outgoingRequestCompleters.remove(id)?.completeError(error, StackTrace.fromString(stackTrace));
} else {
_logger.printTrace('<- Response received from daemon, id = $id');
......
......@@ -173,7 +173,18 @@ void main() {
final String id = message.data['id']! as String;
daemonStreams.inputs.add(DaemonMessage(<String, dynamic>{'id': id, 'error': 'some_error', 'trace': 'stack trace'}));
expect(requestFuture, throwsA('some_error'));
Object? gotError;
StackTrace? gotStackTrace;
try {
await requestFuture;
} on Object catch (error, stackTrace) {
gotError = error;
gotStackTrace = stackTrace;
}
expect(gotError, 'some_error');
expect(gotStackTrace.toString(), 'stack trace');
});
});
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment