Skip to content

Commit 2cdf437

Browse files
committed
log: On malformed event, include stack trace in log and alert dialog
(The comment about log entries being truncated at 1 kiB is copied from a similar debugLog call.) Issue #1083 isn't completely fixed here; we'd still like to show stack traces for malformed `/register` responses. Fixes-partly: #1083
1 parent 9aa68b2 commit 2cdf437

File tree

1 file changed

+17
-8
lines changed

1 file changed

+17
-8
lines changed

lib/model/store.dart

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1339,9 +1339,9 @@ class UpdateMachine {
13391339
lastEventId = events.last.id;
13401340
}
13411341
}
1342-
} catch (e) {
1342+
} catch (e, stackTrace) {
13431343
if (_disposed) return;
1344-
await _handlePollError(e);
1344+
await _handlePollError(e, stackTrace);
13451345
assert(_disposed);
13461346
return;
13471347
}
@@ -1458,7 +1458,7 @@ class UpdateMachine {
14581458
/// See also:
14591459
/// * [_handlePollRequestError], which handles certain errors
14601460
/// and causes them not to reach this method.
1461-
Future<void> _handlePollError(Object error) async {
1461+
Future<void> _handlePollError(Object error, StackTrace stackTrace) async {
14621462
// An error occurred, other than the transient request errors we retry on.
14631463
// This means either a lost/expired event queue on the server (which is
14641464
// normal after the app is offline for a period like 10 minutes),
@@ -1493,9 +1493,12 @@ class UpdateMachine {
14931493
isUnexpected = true;
14941494

14951495
default:
1496-
assert(debugLog('BUG: Unexpected error in event polling: $error\n' // TODO(log)
1497-
'Replacing event queue…'));
1498-
_reportToUserErrorConnectingToServer(error);
1496+
assert(debugLog('BUG: Unexpected error in event polling: $error')); // TODO(log)
1497+
// Print stack trace in its own log entry; log entries are truncated
1498+
// at 1 kiB (at least on Android), and stack can be longer than that.
1499+
assert(debugLog('Stack trace:\n$stackTrace'));
1500+
assert(debugLog('Replacing event queue…'));
1501+
_reportToUserErrorConnectingToServer(error, stackTrace);
14991502
// Similar story to the _EventHandlingException case;
15001503
// separate only so that that other case can print more context.
15011504
// The bug here could be in the server if it's an ApiRequestException,
@@ -1530,12 +1533,18 @@ class UpdateMachine {
15301533
}
15311534
}
15321535

1533-
void _reportToUserErrorConnectingToServer(Object error) {
1536+
void _reportToUserErrorConnectingToServer(Object error, [StackTrace? stackTrace]) {
15341537
final zulipLocalizations = GlobalLocalizations.zulipLocalizations;
1538+
1539+
final details = StringBuffer()..write(error.toString());
1540+
if (stackTrace != null) {
1541+
details.write('\nStack:\n$stackTrace');
1542+
}
1543+
15351544
reportErrorToUserBriefly(
15361545
zulipLocalizations.errorConnectingToServerShort,
15371546
details: zulipLocalizations.errorConnectingToServerDetails(
1538-
store.realmUrl.toString(), error.toString()));
1547+
store.realmUrl.toString(), details.toString()));
15391548
}
15401549

15411550
/// Cleans up resources and tells the instance not to make new API requests.

0 commit comments

Comments
 (0)