[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:

1e8dd1e4d6/packages/flutter_tools/lib/src/daemon.dart (L308)

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

1e8dd1e4d6/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
This commit is contained in:
Jia Hao 2024-02-27 16:39:49 +08:00 committed by GitHub
parent 331769f397
commit c30f998eb5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 13 additions and 2 deletions

View file

@ -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');

View file

@ -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');
});
});