-
-
Notifications
You must be signed in to change notification settings - Fork 36
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
Update Native SDK #664
Comments
If I can add anything to this topic, I would primarily reframe the questions from "workaround" (i.e., accepting something immutable that one must adapt to) to something that invites a long-term perspective on handling these issues in the Unreal SDK. The only immutable thing is the support range for UE versions (and their supported toolchains). When I suggest
So, suppose you want to provide long-term support for "old" toolchains like Given that context, you must ask yourself what is "not ideal" about And I've only picked this particular trade-off for a question where there should be a goal and commitment behind it, but there are others:
|
Agree this is worth looking at. If anything we'll have the same level of support for crash handling than folks are used to with the built-in crash reporter.
How much adoption does 5.2 have? Could we keep 5.2 and lower behind, on older version of sentry-native and offer only security patches and bug fixes? It was released a year and a half ago so I imagine some studios are probably still working on a games on this versions which are yet to be released, if that's the case, sounds like leaving it behind is a bad idea?
We could say "no more gcc support" or "use breakpad instead" but we decided to maintain a fork. I imagine the impact of dropping gcc support is large, and the effort to maintain the fork is relatively small (how often do we need to touch this?)
Do we have a clear understanding of the trade-offs of breakpad vs crashpad? We need that to be able to weight in the effort to maintain this or not. Out of process crash dumps are more reliable, is what I heard. But do we have details on this? What else is relevant? Numbers or examples would help.
This does make it interesting for us to invest on it. That said, there's a reason why Google dropped this project and invested in crashpad. So we need to understand clearly what we're getting ourselves into if we're going all in on breakpad.
That's OK if the product quality we get out of this is significantly better, and we don't have a better option. We'll keep on this game. This is what we're here for. We deal with this crap so our customers don't have to, and they can get the best quality crash reports.
Agree this is what we need to agree on. It's very possible we'll commit to maintain this, and get the proper resources to do so. Not saying we will, I'm just saying we need to look in detail at the trade offs, and the effort involved.
Right, but also the impact on our customers. We value backward compatibility and will go at great lengths to keep that. Support for stuff is only dropped if the effort to maintain is high and the impact on customers is reasonably low. If the effort is very high but impact on customers is not irrelevant, please raise a flag. We can possibly bring in more help to take on some of that work so we continue to support it.
This is a good point. Can we test that? Is this more of a Linux issue on some distro's (like Amazon Linux)? Could we add a test matrix that tests against the main distros? |
This is actually something i spoke about on discord last week. If we keep running into issues with crashpad then it makes sense to look for alternatives else we are endlessly waiting for the next issue. When talking about it on discord it was mentioned that if we drop crashpad and breakpad for Unreal then we no longer need native all. This opens up some smaller gains in my eyes such as a simplified and more standard Unreal plugin structure. I believe it would also solve the marketplace CLI executable issues iv seen mentioned. It would also improve compatibility as the crash reporter is not something that changes often. In theory we may be able to open support as far back as we desire as i imagine the API being the same or at least close enough to ifdef it. I did spend some time looking into the Unreal crash reporting. Overall i just feel making use of the Unreal crash just fits better into the goals and expectations of game developers as we always aim to use the most simplified. It will likely need a bit more investigation and planning before this approach is taken. |
Could you link some code here for reference?
That will depend on practical terms what we're getting and losing.
This is something that game devs on Unity or private engines could benefit too. So another route is to double down on |
So the Code is a in a few places so not practical to link everything else we end up with an essay of links but i can link the 2 key points. Root for core level abstractions. This includes the stackwalker, crash context and more
This would likely need to be unique per engine as i believe we would have to build into the renderer itself to attached to the device creation based on the graphics API and everything being used. |
Regarding dropping While this approach might seem appealing from a maintenance perspective, it's important to note that currently Native SDK provides much more than just crash reporting. It's integral for features like message/event and user feedback capturing, Release Health and Performance monitoring, etc. Replicating this functionality purely through Unreal's systems would require significant development effort and time. On UE version support: Getting some analytics data can give us a better understanding which engine versions are most commonly adopted among the plugin users and help to inform the decision regarding our UE version support strategy. We're required to support the three latest engine versions according to the UE Marketplace guidelines but it's unclear whether we can/should aim for more? The most recent experiments with updating The discovery about Epic's Docker image for UE 5.2 (and older) running Ubuntu 18.04 and thus missing some libs required by
Getting access to large GitHub runners finally gives us the opportunity to package sample project in CI and run smoke tests in different Linux environments (i.e. Amazon Linux 2/2023, etc.)
Our previous attempts to switch to |
One thing to note here is that analytics data will show us the current usage. While this will be very useful, it's only telling us about games that launched, and that are being played/live. But not necessarly being patched/fixed. One proxy for this is comparing the UE version with our SDK version, if folks are on newer versions of our SDK we can assume they still actively developing those titles. That said, there are still customers (I talked to some) who are building a title they plan to launch only next year, still on UE 4.27. |
Regarding Sentry Native's backends (crashpad, breakpad and inproc) X using Unreal Engine's crash reporting code: |
UPD: I've been investigating what are the limits of different Unreal Engine versions in terms of their compatibility with the latest Native SDK and despite the constraints we have to build against according to Epic Games docs things work as expected after applying the changes suggested in #667. Extending the list of supported UE versions by adding While the linked PR should allow us to move forward with the |
I had a chat with @mitsuhiko who brought up some good points about stackwalking on device (either in-process or perhaps out of process akin to crashpad) as well as creating a minidump, could be the best route in general. Even outside Unreal. |
Building the Sentry Native SDK is an essential part of Unreal Engine plugin CI workflow which is required to support automatic crash capturing on Linux.
Starting from Native SDK version 0.7.7 we've faced issues with updating the
sentry-native
submodule caused by multiple build errors in CI (workflow file, build script). Specifically, the upgrade ofmini_chromium
(one of the crashpad's dependencies) now requires C++20 and that causes compatibility issues with older toolchains used in Unreal Engine and our CI environment.The attempt to address the above problem was made in scope of #639. Switching to newer
clang-13
andlibc++-16
in CI fixed the Native SDK build and even allowed us to pass the test checks for UE 5.3/5.4 however it still fails for UE 5.2 (and probably for older versions too) due to mismatched versions ofGLIBC
andGLIBCXX
. This could mean that Docker containers provided by Epic Games which we're using for testing don’t meet Unreal Engine's toolchain requirements. We've already been in a somewhat similar situation in #173 that made us stick to the olderUbuntu-20.04
version to produce Native SDK build artifacts.Possible alternative workarounds:
breakpad
instead ofcrashpad
(not ideal)PR in UE SDK which's also related to this subject: #657
Related issue in Native SDK: getsentry/sentry-native#1041.
The text was updated successfully, but these errors were encountered: