-
-
Notifications
You must be signed in to change notification settings - Fork 216
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Seeing unhandled SIGABRT xamarin_unhandled_exception_handler crashes on MAUI iOS #3678
Comments
Hey @MichaelLHerman, reading Matt's comment in that Sentry snippet you referenced:
Since you're not seeing any managed exceptions, my assumption would be that this SIGABRT is coming from unmanaged (not managed) code. What does the full stack trace look like (rather than just the "Most relevant" - which seems to be showing just In App frames)? |
The only frames that are omitted by "Most relevant" are pthread_kill and abort. Since the frames below it are mono/xamarin I assume this is a managed exception.
|
@MichaelLHerman I agree. I don't have any theories as to why this might be happening though. If we could reproduce the problem, it would be possible to look into it further. |
This has been fixed via: #3776 |
@albyrock87 We haven't updated docs for the feature yet. We don't want to turn these errors of by default for users. This is currently only released to iOS and is coming to Android in the next week or two. Example: services.UseSentry(options => {
#if IOS
options.SuppressSegfaults = true;
#endif
}); |
@aritchie what I understand from your message is that Sentry is reporting duplicate crashes and we can suppress the duplicates using the option above. If that was true, I should see From the chart you can also see that there's no managed crash happening at the same time of a This brings me to the conclusion that Sentry is not reporting managed crashes correctly. Am I missing something? |
@albyrock87 It's hard to say from a screenshot. The nature of what was fixed was to filter out duplicate filings between native & dotnet. If you're not seeing the same amount of managed crashes, perhaps one is truly a native issue?
This is probably a bit of a jump conclusion. We would have a lot more reports if this was an issue. @jamescrosswell Your thoughts on this? |
@aritchie we only have these two crashes in this moment in this specific release on iOS, so that screenshot includes all the numbers related to iOS. The time chart shows how there's no managed exception reported at the same time. I see
Either way, we don't have a clue of what is crashing the application. |
@albyrock87 I think you might be seeing the opposite problem, which another user reported here: Historically Sentry captured native exceptions (and suppressed SIGABRT xamarin_unhandled_exception_handler crashes) using the UnhandledException hook. However, that hook doesn't fire correctly for AOT compiled iOS applications (see discussion here). As such, PR #3909 uses the MarshalManagedException hook instead... which does fire in AOT compiled iOS applications. It looks like there might be compiler/linker configurations for which this hook doesn't always fire though. The user who reported issue #4012 indicated a potential workaround might be to use the FirstChanceException hook. I haven't had a chance to look into this and FirstChanceException is a bit tricky (it fires before the runtime checks for exception handlers)... So some head scratching would be required in order to work out how/whether we could use that as well. |
@jamescrosswell I see, so the following can't be done sentry-dotnet/src/Sentry/Platforms/Cocoa/SentrySdk.cs Lines 13 to 17 in c20d162
because it would create an assertion but what if we simply capture the exception directly? ObjCRuntime.Runtime.MarshalManagedException += (_, args) =>
{
if (args.ExceptionMode != ObjCRuntime.MarshalManagedExceptionMode.UnwindNativeCode)
{
AppDomainAdapter.Instance.RaiseUnhandledException(args.Exception);
}
}; Idk if Have I got this right by supposing that https://learn.microsoft.com/en-us/previous-versions/xamarin/ios/platform/exception-marshaling#events Just asking because we don't want duplicate crash reports obviously. Also this should only be done in .NET8 right? So my issue should be gone when upgrading to .NET9, am I correct? On top of this change we'd also suppress the native exceptions I'm seeing. |
I'd have to check but I think that would result in capturing exceptions even when these were wrapped in a try/catch block... which is not what we want.
That's probably a question for the dotnet runtime team (or you could read through the source code).
From that comment: It's still a problem when using CoreCLR (on macOS or when using NativeAOT). So no, we still can't rely on that event hook in net9.0. We need another mechanism (either instead or as well). |
Package
Sentry
.NET Flavor
.NET
.NET Version
8.0
OS
iOS
SDK Version
4.10.1
Self-Hosted Sentry Version
No response
Steps to Reproduce
Unsure of how to reproduce
https://cricket-health-ml.sentry.io/issues/5858865093/events/?cursor=0%3A50%3A0&environment=production&project=4507788345868288&referrer=issue-stream&statsPeriod=14d&stream_index=3
Seeing a bunch of SIGABRT xamarin_unhandled_exception_handler (Signal 6, Code 0) unhandled crashes.
From looking at Sentry code, it appears these are supposed to be filtered out client side but I don't see corresponding managed crashes being reported (when I search by app.device or user.username tags, I don't see other managed crashes) so I have no way to look into the underlying cause.
Expected Result
Should see managed crashes, and not these native crashes
Actual Result
See plenty of instances of SIGABRT xamarin_unhandled_exception_handler (Signal 6, Code 0) with no corresponding managed crash
The text was updated successfully, but these errors were encountered: