Closed flodaniel closed 3 months ago
Hi @flodaniel,
thank you for the message,
the stack trace you are seeing is attached by the SDK in case the original exception, in this case PhoenixException
does not contain its own stack trace.
Could you share you current implementation of the beforeSend
and how do you capture the PhoenixException
, does it contain stack trace?
Thank you for the reply. I did not know that! This is my shortened beforeSend method:
static FutureOr<SentryEvent?> beforeSend(SentryEvent event, Hint hint) {
final throwable = event.throwable;
/// here are actually much more checks for all kind of other exceptions
/// used by knock as a socket connection
if (throwable is PhoenixException) {
return null;
}
return event;
}
This is how I set up sentry. I am not using the appRunner due to https://github.com/getsentry/sentry-dart/issues/1943#issuecomment-2185880234
void main() async {
await runZonedGuarded(() async {
await SentryFlutter.init(
(options) {
options
..dsn = 'DNS'
..tracesSampleRate = 0.5
..profilesSampleRate = Endpoint.current.isProduction() ? 0.5 : 0
..environment = Endpoint.current.name
..beforeSend = SentryService.beforeSend;
},
);
return runApp(
AppInjector(),
);
}, (error, stackTrace) async {
unawaited(SentryService().recordError(error, stackTrace: stackTrace));
});
}
And this is my recordError
method:
Future<void> recordError(
dynamic exception, {
StackTrace? stackTrace,
String? stringHint,
Map<String, dynamic>? mapHint,
}) async {
await Sentry.captureException(
exception,
stackTrace: stackTrace,
withScope: (scope) {
if (stringHint != null) {
scope.setContexts('Extra Data (string)', stringHint);
}
if (mapHint != null) {
scope.setContexts('Extra Data (map)', mapHint);
}
},
);
}
Hi, which platform are you using
Hi, which platform are you using
The described behavior is on iOS
Got it, this should be related to #2148
seems like the stacktrace is truncated so we're not seeing the full context, we'll look into it
If we don't have a stacktrace supplied we call StackTrace.current
internally that's why it looks like it crashed in the Sentry SDK
Can this call be wrapped in a try-catch? No matter what the beforeSend
hook should allow me to drop or modify events even if the stacktrace is not available.
As it is right now it looks like the beforeSend
is no longer called due to the crash.
@flodaniel the stacktrace is misleading. the error is not crashing in stacktrace utils
see this PR on fixing this issue: https://github.com/getsentry/sentry-dart/pull/2152
Can this call be wrapped in a try-catch
that won't do anything, the error is PhoenixException: PhoenixException: socket closed
and not the sentry sdk, we just have to provide the proper stacktrace
Thanks for explaining.
That also means me dropping the PhoenixException
in my beforeSend
should already work? As shared in this comment above (https://github.com/getsentry/sentry-dart/issues/2146#issuecomment-2210500698) I am trying to ignore it, but I still see the PhoenixException
in my sentry instance and I don't understand how a better stacktrace would change that.
Do you have a sure way to reproduce the PhoenixException?
you can try this
final exception = event.exceptions
?.firstWhereOrNull((element) => element.type == 'PhoenixException');
if (exception != null) {
return null;
}
Do you have a sure way to reproduce the PhoenixException?
Unfortunately no :( I will wait on the PR you linked which might help me to reproduce it somehow.
could you share a screenshot of the event page? or you can send the event link to me to giancarlo.buenaflor@sentry.io if you don't want to share anything here.
hey we've release 8.5.0
which includes a fix to improve the stacktrace you mentioned
Closing this now, please feel free to reopen if you still have any issues
Platform
Flutter Mobile
Obfuscation
Enabled
Debug Info
Enabled
Doctor
[✓] Flutter (Channel stable, 3.22.1, on macOS 14.4.1 23E224 darwin-arm64, locale en-AT) • Flutter version 3.22.1 on channel stable at /Users/floriandaniel/fvm/versions/3.22.1 • Upstream repository https://github.com/flutter/flutter.git • Framework revision a14f74ff3a (6 weeks ago), 2024-05-22 11:08:21 -0500 • Engine revision 55eae6864b • Dart version 3.4.1 • DevTools version 2.34.3
[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0) • Android SDK at /Users/floriandaniel/Library/Android/sdk • Platform android-34, build-tools 34.0.0 • ANDROID_HOME = /Users/floriandaniel/Library/Android/sdk • Java binary at: /Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java • Java version OpenJDK Runtime Environment (build 17.0.7+0-17.0.7b1000.6-10550314) • All Android licenses accepted.
[✓] Xcode - develop for iOS and macOS (Xcode 15.4) • Xcode at /Applications/Xcode.app/Contents/Developer • Build 15F31d • CocoaPods version 1.15.2
[✓] Chrome - develop for the web • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
[✓] Android Studio (version 2023.1) • Android Studio at /Applications/Android Studio.app/Contents • Flutter plugin can be installed from: 🔨 https://plugins.jetbrains.com/plugin/9212-flutter • Dart plugin can be installed from: 🔨 https://plugins.jetbrains.com/plugin/6351-dart • Java version OpenJDK Runtime Environment (build 17.0.7+0-17.0.7b1000.6-10550314)
[✓] IntelliJ IDEA Community Edition (version 2023.2.2) • IntelliJ at /Applications/IntelliJ IDEA CE.app • Flutter plugin can be installed from: 🔨 https://plugins.jetbrains.com/plugin/9212-flutter • Dart plugin can be installed from: 🔨 https://plugins.jetbrains.com/plugin/6351-dart
[✓] VS Code (version 1.90.2) • VS Code at /Applications/Visual Studio Code.app/Contents • Flutter extension version 3.90.0
Version
8.3.0
Steps to Reproduce
PhoenixException
from thephoenix_socket:0.6.4
package (so far only on iOS)Expected Result
I expect a proper stacktrace. It also looks like the
beforeSend
is then not called for thePhoenixException
as I am actually trying to ignore those directly on the device.Actual Result
Actual StackTrace:
Are you willing to submit a PR?
None