Просмотр исходного кода

feat: Give the new `newstyle:2023-01-11` grouping its own enhancers (#43940)

The enhancers file starts out as a copy of the `mobile:2021-04-02` file
which should have quite a few useful rules in it already.

The snapshots should give a small glimpse at the changes, which should
primarily ignore a lot more irrelevant frames in stack traces.
Arpad Borsos 2 лет назад
Родитель
Сommit
378d5d2897

+ 402 - 0
src/sentry/grouping/enhancer/enhancement-configs/newstyle@2023-01-11.txt

@@ -0,0 +1,402 @@
+## * The default configuration of stacktrace grouping enhancers
+
+# iOS known apps
+family:native package:/var/containers/Bundle/Application/**          +app
+family:native package:/private/var/containers/Bundle/Application/**  +app
+
+# iOS apps in simulator
+family:native package:**/Developer/CoreSimulator/Devices/**          +app
+family:native package:**/Containers/Bundle/Application/**            +app
+
+# known well locations for unix paths
+family:native package:/lib/**                                        -app
+family:native package:/usr/lib/**                                    -app
+family:native path:/usr/local/lib/**                                 -app
+family:native path:/usr/local/Cellar/**                              -app
+family:native package:linux-gate.so*                                 -app
+
+# well known path components for mac paths
+family:native package:**.app/Contents/**                             +app
+family:native package:/Users/**                                      +app
+
+# rust common modules
+family:native function:std::*                                     -app
+family:native function:core::*                                    -app
+family:native function:alloc::*                                   -app
+family:native function:__rust_*                                   -app
+
+# rust borders
+family:native function:std::panicking::begin_panic                ^-group -group ^-app -app
+family:native function:core::panicking::begin_panic               ^-group -group ^-app -app
+family:native function:failure::backtrace::Backtrace::new         ^-group -group ^-app -app
+family:native function:error_chain::make_backtrace                ^-group -group ^-app -app
+
+# C++ borders
+family:native function:_CxxThrowException                         ^-group -group ^-app -app
+family:native function:__cxa_throw                                ^-group -group ^-app -app
+family:native function:__assert_rtn                               ^-group -group ^-app -app
+
+# Objective-C
+family:native function:_NSRaiseError                              ^-group -group ^-app -app
+family:native function:_mh_execute_header                         -group -app
+
+# Breakpad
+family:native function:google_breakpad::*                         -app -group
+family:native function:google_breakpad::ExceptionHandler::SignalHandler ^-group -group
+family:native function:google_breakpad::ExceptionHandler::WriteMinidumpWithException ^-group -group
+
+# Support frameworks that are not in-app
+family:native package:**/Frameworks/libswift*.dylib                  -app
+family:native package:**/Frameworks/KSCrash.framework/**             -app
+family:native package:**/Frameworks/SentrySwift.framework/**         -app
+family:native package:**/Frameworks/Sentry.framework/**              -app
+
+# Needed for versions < sentry-cocoa 7.0.0 and static linking.
+# Before sentry-cocoa 7.0.0, we marked all packages located inside the application bundle as inApp.
+# Since 7.0.0, the Cocoa SKD only marks the main executable as inApp. This change doesn't impact
+# applications using static libraries, as when using static libraries, all of them end up in the
+# main executable.
+family:native function:kscm_*                                     -app -group
+family:native function:sentrycrashcm_*                            -app -group
+family:native function:kscrash_*                                  -app -group
+family:native function:*sentrycrash_*                             -app -group
+family:native function:"?[[]KSCrash*"                             -app -group
+family:native function:"?[[]RNSentry*"                            -app -group
+
+# Projects shipping their own class called "SentryFoo" can then easily override this in their
+# own grouping enhancers.
+family:native function:"?[[]Sentry*"                              -app -group
+
+# Android ANR: Exception stack is a snapshot of the UI/main thread. The
+# *outermost* in-app frame is most indicative of which user action has led to ANR,
+# and that's what we want to group by. (innermost=crashing frame)
+#
+# Note: Newer Android SDKs send the snapshot flag with ANRs, so this rule is
+# not strictly necessary.
+error.mechanism:ANR invert-stacktrace=1
+
+# NSError iOS: Stacktrace is a thread snapshot as well.
+# Note: Newer iOS SDK sends snapshot flag, so this is not strictly necessary.
+error.mechanism:NSError invert-stacktrace=1
+
+# Dart/Flutter stacktraces that are not in-app
+family:javascript stack.abs_path:org-dartlang-sdk:///** -app -group
+family:javascript module:**/packages/flutter/** -app
+
+# Categorization of frames
+family:native package:"/System/Library/Frameworks/**" category=system
+family:native package:"C:/Windows/**" category=system
+family:native package:/usr/lib/** category=system
+family:native function:memset category=system
+family:native function:memcpy category=system
+family:native function:__memcpy category=system
+family:native function:memcmp category=system
+family:native package:CoreFoundation category=system
+family:native package:Foundation category=system
+family:native package:CFNetwork category=system
+family:native package:IOKit category=system
+family:native package:QuartzCore category=system
+family:native package:IOMobileFramebuffer category=system
+family:native package:libobjc* category=system
+family:native package:libsystem* category=system
+family:native package:/system/** category=system
+family:native package:/vendor/** category=system
+module:dalvik.system.* category=system
+module:com.android.* category=system
+family:native package:libdispatch.dylib category=system
+family:native package:WebKit category=system
+family:native package:**/libart.so category=system
+package:/apex/com.android.*/lib*/** category=system
+
+# (Presumably) preinstalled stuff on Lenovo Android devices
+module:com.lenovo.lsf.* category=system
+module:com.lenovo.payplus.* category=system
+
+family:native function:boost::* category=std
+family:native function:std::* category=std
+module:java.* category=std
+# common crypto library on android
+module:com.google.crypto.* category=std
+module:com.google.android.* category=std
+module:javax.crypto.* category=std
+
+module:android.database.* category=std
+module:androidx.* category=std
+module:android.* category=std
+module:android.os.* category=system
+
+family:native package:UIKit category=ui
+family:native package:UIKitCore category=ui
+family:native package:SwiftUI category=ui
+family:native package:AttributeGraph category=ui
+family:native package:CoreAutoLayout category=ui
+family:native package:GraphicsServices category=ui
+family:native function:"-\[NSISEngine*" category=ui  # auto-layout engine
+module:android.view.* category=ui
+module:android.text.* category=ui
+module:android.widget.* category=ui
+module:android.app.Dialog category=ui
+module:androidx.*.widget.* category=ui
+module:com.google.android.material.* category=ui
+category:ui function:handleMessage category=indirection
+category:ui function:run category=indirection
+
+family:native function:art::jit::* category=runtime
+
+family:native package:/system/lib/libmedia.so category=av
+family:native package:/System/lib/libaudioclient.so category=av
+family:native package:AudioToolbox* category=av
+family:native package:libAudioToolboxUtility.dylib category=av
+
+family:native function:std::_* category=internals
+family:native function:__swift_* category=internals
+family:native function:block_destroy_helper* category=internals
+family:native function:*_block_invoke* category=internals
+
+family:native package:/usr/lib/system/** function:start category=threadbase
+family:native package:libdyld.dylib function:start category=threadbase
+family:native package:UIKitCore function:UIApplicationMain category=threadbase
+family:native function:wWinMain category=threadbase
+family:native function:invoke_main category=threadbase
+family:native function:BaseThreadInitThunk category=threadbase
+family:native function:RtlUserThreadStart category=threadbase
+family:native function:thread_start category=threadbase
+family:native function:_pthread_start category=threadbase
+family:native function:__pthread_start category=threadbase
+family:native function:_pthread_body category=threadbase
+family:native function:_dispatch_worker_thread2 category=threadbase
+family:native function:_dispatch_client_callout category=threadbase
+family:native function:start_wqthread category=threadbase
+family:native function:_pthread_wqthread category=threadbase
+family:native function:boost::*::thread_proxy category=threadbase
+family:native package:/usr/lib/system/libsystem_pthread.dylib function:"<unknown>" category=threadbase
+module:android.os.AsyncTask* function:call category=threadbase
+family:native package:UIKit function:UIApplicationMain category=threadbase
+module:java.util.concurrent.ThreadPoolExecutor* function:runWorker category=threadbase
+module:android.os.* function:call category=threadbase
+module:android.app.ActivityThread function:main category=threadbase
+module:android.view.View function:layout category=threadbase
+module:android.os.Looper function:loop category=threadbase
+family:native function:TppWorkerThread category=threadbase
+family:native function:TppWorkpExecuteCallback category=threadbase
+family:native function:RtlpTpWorkCallback category=threadbase
+module:android.os.Handler function:dispatchMessage category=threadbase
+module:android.os.Handler function:handleCallback category=threadbase
+module:android.app.ActivityThread* function:handleMessage category=threadbase
+
+family:native package:"**/libsystem_malloc.dylib" category=malloc
+family:native function:malloc category=malloc
+family:native function:malloc_base category=malloc
+family:native function:RtlpAllocateHeapInternal category=malloc
+family:native function:std::*::allocator_traits* category=malloc
+
+family:native function:*::operator()* category=indirection
+family:native function:*<lambda>* category=indirection
+family:native function:destructor' category=indirection
+family:native function:__dynamic_cast category=indirection
+family:native function:boost::function* category=indirection
+family:native function:boost::_bi::* category=indirection
+family:native function:boost::detail::function::functor_manager* category=indirection
+family:native function:Array.subscript.* category=indirection
+module:java.lang.reflect.* category=indirection
+module:java.lang.Class function:getMethod category=indirection
+module:androidx.work.impl.utils.ForceStopRunnable category=indirection
+
+family:native function:"*::\\{dtor\\}" category=dtor
+family:native function:"destructor'" category=dtor
+
+family:native function:exit category=shutdown
+family:native function:RtlExitUserProcess category=shutdown
+family:native function:ExitProcessImplementation category=shutdown
+family:native function:RtlExitUserThread category=shutdown
+
+family:native function:RtlpExecuteHandlerForException category=handler
+family:native function:_sigtramp category=handler
+family:native function:DispatchHookW category=handler
+family:native function:execute_onexit_table category=handler
+
+family:native function:abort category=throw
+family:native function:raise category=throw
+family:native function:std::terminate category=throw
+family:native function:RtlExitUserThread category=throw
+family:native function:TppRaiseInvalidParameter category=throw
+family:native function:_CxxThrowException category=throw
+family:native function:RaiseException category=throw
+family:native function:RaiseComPlusException category=throw
+family:native function:_CFThrowFormattedException category=throw
+family:native function:objc_exception_throw category=throw
+family:native function:AG::precondition_failure* category=throw
+
+family:native package:"C:/WINDOWS/system32/DriverStore/**" category=driver
+family:native package:"/System/Library/Extensions/AppleIntel*GraphicsGLDriver.bundle/**" category=driver
+family:native function:*CUDA* category=driver
+family:native package:**/nvcuda.dll category=driver
+family:native package:"C:/Program Files/NVIDIA Corporation/**" category=driver
+family:native package:/System/Library/Extensions/GeForceGLDriver.bundle/** category=driver
+family:native package:/System/Library/Extensions/AMDRadeon*/** category=driver
+family:native package:/System/Library/PrivateFrameworks/GPUSupport.framework/** category=driver
+family:native package:libGPUSupportMercury.dylib category=driver
+family:native package:AGXGLDriver category=driver
+
+family:native function:RtlFreeHeap category=free
+family:native function:RtlFreeUnicodeString category=free
+family:native function:std::_Deallocate category=free
+family:native function:free category=free
+family:native function:objc_release category=free
+family:native function:_swift_release_dealloc category=free
+family:native function:_CFRelease category=free
+
+family:native package:C:/Windows/SYSTEM32/OPENGL32.dll category=gl
+family:native package:/System/Library/Frameworks/OpenGL.framework/** category=gl
+family:native package:OpenGLES category=gl
+family:native package:GLEngine category=gl
+family:native package:/system/lib/libEGL.so category=gl
+family:native package:**/libGLES*.so category=gl
+family:native package:**/libESXGLES*.so category=gl
+family:native package:/system/lib/libskia.so category=gl
+# Not a graphics library but we've seen it be interchangeable with OpenGL in stacktraces.
+family:native package:/System/Library/Frameworks/OpenCL.framework/** category=gl
+
+family:native package:"/System/Library/PrivateFrameworks/GPUSupport.framework/**" function:gpusGenerateCrashLog* category=telemetry
+family:native function:gpusKillClientExt category=telemetry
+family:native function:crashpad::* category=telemetry
+# Presumably some chinese user-tracking SDK. Wraps activity creation in Android.
+module:cn.gundam.sdk.* category=telemetry
+
+# No app actually uses this. This appears to be some type of framework that
+# comes up as part of some "Lenovo ID" activity (user login prompt?). Not
+# entirely sure if any of that is linked into the app, it's probably something
+# preinstalled on Lenovo devices.
+module:com.lenovo.payplus.analytics.* category=telemetry
+package:"**/libBugly.so" category=telemetry
+
+family:native function:dlopen category=load
+family:native function:dladdr category=load
+family:native function:ImageLoaderMachO::findClosestSymbol category=load
+family:native package:/system/lib/libnativeloader.so function:android::OpenNativeLibrary category=load
+module:java.lang.System function:loadLibrary category=load
+module:java.lang.Runtime function:loadLibrary* category=load
+
+family:native function:pthread_mutex_lock category=lock
+
+# not interesting at all, if for some reason this gets picked as grouping
+# frame, add the next one too
+category:free +prefix
+category:malloc +prefix
+
+# lock: fails to get acquired/released
+category:lock +sentinel +prefix
+
+# load: dylib/module fails to get loaded
+category:load +sentinel +prefix
+
+# driver crash, similar reasoning as for GL
+category:driver +sentinel +prefix
+
+# UI: This is mostly interesting for ANR, where we need to pick interesting UI
+# frames to group by. Sometimes it can also happen that some UI framework
+# crashes without the (calling) app being at fault, that's where this also gets
+# useful.
+category:ui +sentinel +prefix
+
+# GL: We've observed that the same sequence of app
+# ("submit data buffer") frames triggers very different crashes in there.
+category:gl +sentinel
+
+# runtime: frames from a garbage collector, JIT or something else in the language
+# runtime. Only add frames to this category if you think their presence makes it
+# unlikely that app frames are relevant, e.g. because app frames can't call the
+# JIT/GC directly, or at least not this way and it's really the runtime being
+# buggy, not the app (or at least unlikely that it's the app code currently running).
+category:runtime +sentinel
+
+
+# Ignore driver frame if it is directly calling another driver frame. This
+# removes a lot of noise from the stack especially if most of the called frames
+# failed symbolication, stack scanning was done or to paper over differences in
+# driver versions.
+category:driver | [ category:driver ] category=internals
+
+# Only group by top-level GL operaton, not any helper functions it may have called.
+
+[ category:gl ] | category:gl category=internals
+[ category:av ] | category:av  category=internals
+
+# Only group by top-level malloc op, not any helper function it may have called.
+[ category:malloc ] | category:malloc category=internals
+
+# abort() and exception raising is technically the culprit for crashes, but not
+# the thing we want to show.
+category:throw +prefix ^-group
+
+# On Windows, _purecall internally aborts when the function pointer is invalid.
+# We want to treat this the same as a segfault happening before calling
+# _purecall.
+[ function:_purecall ] | category:throw category=internals
+
+# raise() called by abort() should only group by abort()
+[ category:throw ] | category:throw category=internals
+
+# Thread bases such as `main()` are just noise and are called by noise.
+category:threadbase -group v-group
+
+# handler frames typically call code for crash reporting, so the frames below
+# are noise and do not represent the actual crash. We usually expect something to
+# be above handler frames that represents the actual crash. The stackwalker
+# has a bug where it cannot walk past _sigtramp on OS X but that is expected to
+# be fixed eventually.
+category:handler ^-group -group
+
+# Crash reporting tools are noise that can occur outside of signal handlers
+# too, apparently (Apple's GPUSupport module)
+category:telemetry -group
+
+category:indirection -group
+category:internals -group
+category:threadbase v-group -group
+
+# system frames starting with underscore are likely garbage
+# unsymbolicated system frames are likely system frames starting with underscore
+# _purecall is an exception as it is often the only important frame in a block of system frames
+family:native category:system function:_* !function:_purecall category=internals
+family:native category:system function:"<unknown>" category=internals
+family:native function:_INTERNAL* category=internals
+
+
+# We should be able to write this, but unfortunately sentry-cocoa 6.x is so
+# buggy with detecting compiler-generated code that we have decided to go with a
+# list of function name patterns instead:
+# path:"<compiler-generated>" category=internals
+
+family:native function:closure category=internals
+family:native function:Collection.map<T> category=internals
+family:native function:Array.subscript.getter category=internals
+family:native function:Array._getElement category=internals
+family:native function:_ArrayBuffer._nativeTypeChecked.getter category=internals
+family:native function:range category=internals
+family:native function:@callee_guaranteed category=internals
+
+# frames with .cold.1 are probably hotpaths vs slow paths but not relevant for grouping
+# e.g., two callstacks that should group together:
+#   foo -> bar
+#   foo -> foo.cold.1 -> bar
+family:native function:*.cold.1 category=indirection
+
+# System frame wedged between two other frames is just noise.
+[ !category:system ] | category:system | [ !category:system ] category=indirection
+
+# TODO: multi-category / category inheritance
+[ category:free ]       | category:system  category=internals
+[ category:system ]     | category:system  category=internals
+[ category:std ]        | category:system  category=internals
+[ category:std ]        | category:std     category=internals
+[ category:ui ]         | category:ui      category=internals
+[ category:ui ]         | category:system  category=internals
+[ category:internals ]  | category:system  category=internals
+[ category:internals ]  | category:ui      category=internals
+[ category:load ]       | category:system  category=internals
+[ category:load ]       | category:load    category=internals
+[ category:throw ]      | category:system  category=internals
+[ category:runtime ]    | category:system  category=internals
+[ category:runtime ]    | category:runtime category=internals
+[ category:dtor ]       | category:dtor    category=internals

+ 1 - 0
src/sentry/grouping/strategies/configurations.py

@@ -192,6 +192,7 @@ register_strategy_config(
         * Initial version
         * Initial version
     """,
     """,
     initial_context={},
     initial_context={},
+    enhancements_base="newstyle:2023-01-11",
 )
 )
 
 
 
 

+ 16 - 16
tests/sentry/grouping/snapshots/test_variants/test_event_hash_variant/newstyle@2023_01_11/actix.pysnap

@@ -1,15 +1,15 @@
 ---
 ---
-created: '2023-01-11T11:41:27.430476Z'
+created: '2023-02-01T08:22:00.619240Z'
 creator: sentry
 creator: sentry
 source: tests/sentry/grouping/test_variants.py
 source: tests/sentry/grouping/test_variants.py
 ---
 ---
 app:
 app:
-  hash: "703d3dd9cb763e3f5037f659d27da947"
+  hash: "738e7d2503464bc264b4f791286f5122"
   component:
   component:
     app*
     app*
       exception*
       exception*
         stacktrace*
         stacktrace*
-          frame*
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
             function*
             function*
               "__pthread_start"
               "__pthread_start"
           frame*
           frame*
@@ -396,12 +396,12 @@ app:
           "Error occurred during request handling, status: <int> Internal Server Error Something went really wrong here"
           "Error occurred during request handling, status: <int> Internal Server Error Something went really wrong here"
 --------------------------------------------------------------------------
 --------------------------------------------------------------------------
 system:
 system:
-  hash: "1df163ce3be65319df4fcc9cb34b60c1"
+  hash: "19a96e0438d28e48355653def82f887a"
   component:
   component:
     system*
     system*
       exception*
       exception*
         stacktrace*
         stacktrace*
-          frame*
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
             function*
             function*
               "__pthread_start"
               "__pthread_start"
           frame*
           frame*
@@ -422,12 +422,12 @@ system:
               "mod.rs"
               "mod.rs"
             function*
             function*
               "std::thread::Builder::spawn_unchecked::{{closure}}"
               "std::thread::Builder::spawn_unchecked::{{closure}}"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             filename*
             filename*
               "panic.rs"
               "panic.rs"
             function*
             function*
               "std::panic::catch_unwind"
               "std::panic::catch_unwind"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             filename*
             filename*
               "panicking.rs"
               "panicking.rs"
             function*
             function*
@@ -442,17 +442,17 @@ system:
               "panicking.rs"
               "panicking.rs"
             function*
             function*
               "std::panicking::try::do_call"
               "std::panicking::try::do_call"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             filename*
             filename*
               "panic.rs"
               "panic.rs"
             function*
             function*
               "std::panic::AssertUnwindSafe<T>::call_once"
               "std::panic::AssertUnwindSafe<T>::call_once"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             filename*
             filename*
               "mod.rs"
               "mod.rs"
             function*
             function*
               "std::thread::Builder::spawn_unchecked::{{closure}}::{{closure}}"
               "std::thread::Builder::spawn_unchecked::{{closure}}::{{closure}}"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             filename*
             filename*
               "backtrace.rs"
               "backtrace.rs"
             function*
             function*
@@ -482,7 +482,7 @@ system:
               "local.rs"
               "local.rs"
             function*
             function*
               "std::thread::local::LocalKey<T>::with"
               "std::thread::local::LocalKey<T>::with"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             filename*
             filename*
               "local.rs"
               "local.rs"
             function*
             function*
@@ -507,7 +507,7 @@ system:
               "local.rs"
               "local.rs"
             function*
             function*
               "std::thread::local::LocalKey<T>::with"
               "std::thread::local::LocalKey<T>::with"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             filename*
             filename*
               "local.rs"
               "local.rs"
             function*
             function*
@@ -532,7 +532,7 @@ system:
               "local.rs"
               "local.rs"
             function*
             function*
               "std::thread::local::LocalKey<T>::with"
               "std::thread::local::LocalKey<T>::with"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             filename*
             filename*
               "local.rs"
               "local.rs"
             function*
             function*
@@ -557,7 +557,7 @@ system:
               "local.rs"
               "local.rs"
             function*
             function*
               "std::thread::local::LocalKey<T>::with"
               "std::thread::local::LocalKey<T>::with"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             filename*
             filename*
               "local.rs"
               "local.rs"
             function*
             function*
@@ -602,7 +602,7 @@ system:
               "local.rs"
               "local.rs"
             function*
             function*
               "std::thread::local::LocalKey<T>::with"
               "std::thread::local::LocalKey<T>::with"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             filename*
             filename*
               "local.rs"
               "local.rs"
             function*
             function*
@@ -767,7 +767,7 @@ system:
               "local.rs"
               "local.rs"
             function*
             function*
               "std::thread::local::LocalKey<T>::with"
               "std::thread::local::LocalKey<T>::with"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             filename*
             filename*
               "local.rs"
               "local.rs"
             function*
             function*

Разница между файлами не показана из-за своего большого размера
+ 132 - 132
tests/sentry/grouping/snapshots/test_variants/test_event_hash_variant/newstyle@2023_01_11/android_anr.pysnap


+ 24 - 24
tests/sentry/grouping/snapshots/test_variants/test_event_hash_variant/newstyle@2023_01_11/callee_guaranteed.pysnap

@@ -1,10 +1,10 @@
 ---
 ---
-created: '2023-01-11T11:41:30.137493Z'
+created: '2023-02-01T08:22:07.751949Z'
 creator: sentry
 creator: sentry
 source: tests/sentry/grouping/test_variants.py
 source: tests/sentry/grouping/test_variants.py
 ---
 ---
 app:
 app:
-  hash: "e2ea2eb86d26407f06b59beb3a444c91"
+  hash: "4ef1fb44d656c3be2a146971f2a222dc"
   component:
   component:
     app*
     app*
       exception*
       exception*
@@ -12,13 +12,13 @@ app:
           frame (non app frame)
           frame (non app frame)
             function*
             function*
               "start"
               "start"
-          frame*
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
             function*
             function*
               "stripped_application_code"
               "stripped_application_code"
           frame (non app frame)
           frame (non app frame)
             function*
             function*
               "UIApplicationMain"
               "UIApplicationMain"
-          frame (non app frame)
+          frame (marked as prefix frame by stack trace rule (category:ui +sentinel +prefix))
             function*
             function*
               "-[UIApplication _run]"
               "-[UIApplication _run]"
           frame (non app frame)
           frame (non app frame)
@@ -42,7 +42,7 @@ app:
           frame (non app frame)
           frame (non app frame)
             function*
             function*
               "_dispatch_call_block_and_release"
               "_dispatch_call_block_and_release"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             filename*
             filename*
               "<compiler-generated>"
               "<compiler-generated>"
             function*
             function*
@@ -56,7 +56,7 @@ app:
           frame (ignored due to recursion)
           frame (ignored due to recursion)
             function*
             function*
               "stripped_application_code"
               "stripped_application_code"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             filename*
             filename*
               "<compiler-generated>"
               "<compiler-generated>"
             function*
             function*
@@ -69,7 +69,7 @@ app:
           frame (non app frame)
           frame (non app frame)
             function*
             function*
               "stripped_application_code"
               "stripped_application_code"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             filename*
             filename*
               "<compiler-generated>"
               "<compiler-generated>"
             function*
             function*
@@ -80,7 +80,7 @@ app:
           frame (ignored due to recursion)
           frame (ignored due to recursion)
             function*
             function*
               "stripped_application_code"
               "stripped_application_code"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             filename*
             filename*
               "<compiler-generated>"
               "<compiler-generated>"
             function*
             function*
@@ -127,45 +127,45 @@ app:
           2
           2
 --------------------------------------------------------------------------
 --------------------------------------------------------------------------
 system:
 system:
-  hash: "d23d0dfeac5f1349ceb624b330670b25"
+  hash: "0211daaed35e19ba74b4d6f08cd00fef"
   component:
   component:
     system*
     system*
       exception*
       exception*
         stacktrace*
         stacktrace*
-          frame*
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
             function*
             function*
               "start"
               "start"
-          frame*
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
             function*
             function*
               "stripped_application_code"
               "stripped_application_code"
-          frame*
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
             function*
             function*
               "UIApplicationMain"
               "UIApplicationMain"
-          frame*
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
             function*
             function*
               "-[UIApplication _run]"
               "-[UIApplication _run]"
-          frame*
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
             function*
             function*
               "GSEventRunModal"
               "GSEventRunModal"
-          frame*
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
             function*
             function*
               "CFRunLoopRunSpecific"
               "CFRunLoopRunSpecific"
-          frame*
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
             function*
             function*
               "__CFRunLoopRun"
               "__CFRunLoopRun"
-          frame*
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
             function*
             function*
               "__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__"
               "__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__"
-          frame*
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
             function*
             function*
               "_dispatch_main_queue_callback_4CF"
               "_dispatch_main_queue_callback_4CF"
-          frame*
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
             function*
             function*
               "_dispatch_client_callout"
               "_dispatch_client_callout"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             function*
             function*
               "_dispatch_call_block_and_release"
               "_dispatch_call_block_and_release"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             filename*
             filename*
               "<compiler-generated>"
               "<compiler-generated>"
             function*
             function*
@@ -179,7 +179,7 @@ system:
           frame (ignored due to recursion)
           frame (ignored due to recursion)
             function*
             function*
               "stripped_application_code"
               "stripped_application_code"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             filename*
             filename*
               "<compiler-generated>"
               "<compiler-generated>"
             function*
             function*
@@ -192,7 +192,7 @@ system:
           frame*
           frame*
             function*
             function*
               "stripped_application_code"
               "stripped_application_code"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             filename*
             filename*
               "<compiler-generated>"
               "<compiler-generated>"
             function*
             function*
@@ -203,7 +203,7 @@ system:
           frame (ignored due to recursion)
           frame (ignored due to recursion)
             function*
             function*
               "stripped_application_code"
               "stripped_application_code"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             filename*
             filename*
               "<compiler-generated>"
               "<compiler-generated>"
             function*
             function*

+ 24 - 24
tests/sentry/grouping/snapshots/test_variants/test_event_hash_variant/newstyle@2023_01_11/exception_cocoa_nserror.pysnap

@@ -1,5 +1,5 @@
 ---
 ---
-created: '2023-01-11T11:41:29.229136Z'
+created: '2023-02-01T08:22:06.277778Z'
 creator: sentry
 creator: sentry
 source: tests/sentry/grouping/test_variants.py
 source: tests/sentry/grouping/test_variants.py
 ---
 ---
@@ -20,13 +20,13 @@ app:
           frame (non app frame)
           frame (non app frame)
             function*
             function*
               "start"
               "start"
-          frame*
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
             function*
             function*
               "main"
               "main"
           frame (non app frame)
           frame (non app frame)
             function*
             function*
               "UIApplicationMain"
               "UIApplicationMain"
-          frame (non app frame)
+          frame (marked as prefix frame by stack trace rule (category:ui +sentinel +prefix))
             function*
             function*
               "-[UIApplication _run]"
               "-[UIApplication _run]"
           frame (non app frame)
           frame (non app frame)
@@ -93,67 +93,67 @@ system:
     system (exception of app takes precedence)
     system (exception of app takes precedence)
       threads (exception of app takes precedence)
       threads (exception of app takes precedence)
         stacktrace*
         stacktrace*
-          frame*
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
             function*
             function*
               "start"
               "start"
-          frame*
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
             function*
             function*
               "main"
               "main"
-          frame*
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
             function*
             function*
               "UIApplicationMain"
               "UIApplicationMain"
-          frame*
+          frame* (marked as prefix frame by stack trace rule (category:ui +sentinel +prefix))
             function*
             function*
               "-[UIApplication _run]"
               "-[UIApplication _run]"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             function*
             function*
               "GSEventRunModal"
               "GSEventRunModal"
-          frame*
+          frame (ignored by stack trace rule (category:indirection -group))
             function*
             function*
               "CFRunLoopRunSpecific"
               "CFRunLoopRunSpecific"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             function*
             function*
               "__CFRunLoopRun"
               "__CFRunLoopRun"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             function*
             function*
               "__CFRunLoopDoSources0"
               "__CFRunLoopDoSources0"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             function*
             function*
               "__CFRunLoopDoSource0"
               "__CFRunLoopDoSource0"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             function*
             function*
               "__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__"
               "__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             function*
             function*
               "__eventFetcherSourceCallback"
               "__eventFetcherSourceCallback"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             function*
             function*
               "__processEventQueue"
               "__processEventQueue"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             function*
             function*
               "-[UIApplicationAccessibility sendEvent:]"
               "-[UIApplicationAccessibility sendEvent:]"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             function*
             function*
               "-[UIApplication sendEvent:]"
               "-[UIApplication sendEvent:]"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             function*
             function*
               "-[UIWindow sendEvent:]"
               "-[UIWindow sendEvent:]"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             function*
             function*
               "-[UIWindow _sendTouchesForEvent:]"
               "-[UIWindow _sendTouchesForEvent:]"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             function*
             function*
               "-[UIControl touchesEnded:withEvent:]"
               "-[UIControl touchesEnded:withEvent:]"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             function*
             function*
               "-[UIControl _sendActionsForEvents:withEvent:]"
               "-[UIControl _sendActionsForEvents:withEvent:]"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             function*
             function*
               "-[UIControl sendAction:to:forEvent:]"
               "-[UIControl sendAction:to:forEvent:]"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             function*
             function*
               "__44-[SentryBreadcrumbTracker swizzleSendAction]_block_invoke_2"
               "__44-[SentryBreadcrumbTracker swizzleSendAction]_block_invoke_2"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             function*
             function*
               "-[UIApplication sendAction:to:from:forEvent:]"
               "-[UIApplication sendAction:to:from:forEvent:]"
           frame*
           frame*

+ 10 - 10
tests/sentry/grouping/snapshots/test_variants/test_event_hash_variant/newstyle@2023_01_11/fallback_prefix_level_1.pysnap

@@ -1,5 +1,5 @@
 ---
 ---
-created: '2023-01-11T11:41:28.417889Z'
+created: '2023-02-01T08:22:03.397605Z'
 creator: sentry
 creator: sentry
 source: tests/sentry/grouping/test_variants.py
 source: tests/sentry/grouping/test_variants.py
 ---
 ---
@@ -18,40 +18,40 @@ app:
           frame (non app frame)
           frame (non app frame)
             function*
             function*
               "UIApplicationMain"
               "UIApplicationMain"
-          frame (non app frame)
+          frame (marked as prefix frame by stack trace rule (category:ui +sentinel +prefix))
             function*
             function*
               "-[UIApplication _run]"
               "-[UIApplication _run]"
           frame (non app frame)
           frame (non app frame)
             function*
             function*
               "GSEventRunModal"
               "GSEventRunModal"
-          frame (non app frame)
+          frame (marked as prefix frame by stack trace rule (category:free +prefix))
             function*
             function*
               "objc_release"
               "objc_release"
         type*
         type*
           "EXC_BAD_ACCESS"
           "EXC_BAD_ACCESS"
 --------------------------------------------------------------------------
 --------------------------------------------------------------------------
 system:
 system:
-  hash: "b85897bf204fd8e90ff495b47502f281"
+  hash: "87497299851e09febfecf4e84e0d45ba"
   component:
   component:
     system*
     system*
       exception*
       exception*
         stacktrace*
         stacktrace*
-          frame*
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
             function*
             function*
               "start"
               "start"
-          frame*
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
             function*
             function*
               "stripped_application_code"
               "stripped_application_code"
-          frame*
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
             function*
             function*
               "UIApplicationMain"
               "UIApplicationMain"
-          frame*
+          frame* (marked as prefix frame by stack trace rule (category:ui +sentinel +prefix))
             function*
             function*
               "-[UIApplication _run]"
               "-[UIApplication _run]"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             function*
             function*
               "GSEventRunModal"
               "GSEventRunModal"
-          frame*
+          frame* (marked as prefix frame by stack trace rule (category:free +prefix))
             function*
             function*
               "objc_release"
               "objc_release"
         type*
         type*

+ 11 - 8
tests/sentry/grouping/snapshots/test_variants/test_event_hash_variant/newstyle@2023_01_11/frame_ignores_dartlang_sdk.pysnap

@@ -1,25 +1,28 @@
 ---
 ---
-created: '2023-01-11T11:41:29.997291Z'
+created: '2023-02-01T08:22:07.524066Z'
 creator: sentry
 creator: sentry
 source: tests/sentry/grouping/test_variants.py
 source: tests/sentry/grouping/test_variants.py
 ---
 ---
 app:
 app:
   hash: null
   hash: null
   component:
   component:
-    app (stacktrace of system takes precedence)
-      stacktrace (ignored because hash matches system variant)
-        frame*
+    app
+      stacktrace
+        frame (marked out of app by stack trace rule (family:javascript path:org-dartlang-sdk:///** -app -group))
           filename*
           filename*
             "async_patch.dart"
             "async_patch.dart"
           function*
           function*
             "_asyncStartSync"
             "_asyncStartSync"
 --------------------------------------------------------------------------
 --------------------------------------------------------------------------
+fallback:
+  hash: "d41d8cd98f00b204e9800998ecf8427e"
+--------------------------------------------------------------------------
 system:
 system:
-  hash: "82639bcdd4eca16551e8cd3448f48ed4"
+  hash: null
   component:
   component:
-    system*
-      stacktrace*
-        frame*
+    system
+      stacktrace
+        frame (ignored by stack trace rule (family:javascript path:org-dartlang-sdk:///** -app -group))
           filename*
           filename*
             "async_patch.dart"
             "async_patch.dart"
           function*
           function*

+ 4 - 4
tests/sentry/grouping/snapshots/test_variants/test_event_hash_variant/newstyle@2023_01_11/frame_ignores_flutter_sdk.pysnap

@@ -1,5 +1,5 @@
 ---
 ---
-created: '2023-01-11T11:41:27.836591Z'
+created: '2023-02-01T08:22:01.298242Z'
 creator: sentry
 creator: sentry
 source: tests/sentry/grouping/test_variants.py
 source: tests/sentry/grouping/test_variants.py
 ---
 ---
@@ -7,8 +7,8 @@ app:
   hash: null
   hash: null
   component:
   component:
     app (stacktrace of system takes precedence)
     app (stacktrace of system takes precedence)
-      stacktrace (ignored because hash matches system variant)
-        frame*
+      stacktrace
+        frame (marked out of app by stack trace rule (family:javascript module:**/packages/flutter/** -app))
           module*
           module*
             "opt/hostedtoolcache/flutter/2.5.0-stable/x64/packages/flutter/lib/src/gestures/binding"
             "opt/hostedtoolcache/flutter/2.5.0-stable/x64/packages/flutter/lib/src/gestures/binding"
           filename (ignored because frame points to a URL)
           filename (ignored because frame points to a URL)
@@ -21,7 +21,7 @@ system:
   component:
   component:
     system*
     system*
       stacktrace*
       stacktrace*
-        frame*
+        frame* (marked out of app by stack trace rule (family:javascript module:**/packages/flutter/** -app))
           module*
           module*
             "opt/hostedtoolcache/flutter/2.5.0-stable/x64/packages/flutter/lib/src/gestures/binding"
             "opt/hostedtoolcache/flutter/2.5.0-stable/x64/packages/flutter/lib/src/gestures/binding"
           filename (ignored because frame points to a URL)
           filename (ignored because frame points to a URL)

+ 20 - 20
tests/sentry/grouping/snapshots/test_variants/test_event_hash_variant/newstyle@2023_01_11/group_125_event_126.pysnap

@@ -1,5 +1,5 @@
 ---
 ---
-created: '2023-01-11T11:41:26.638149Z'
+created: '2023-02-01T08:21:59.369986Z'
 creator: sentry
 creator: sentry
 source: tests/sentry/grouping/test_variants.py
 source: tests/sentry/grouping/test_variants.py
 ---
 ---
@@ -119,7 +119,7 @@ app:
           frame (non app frame)
           frame (non app frame)
             function*
             function*
               "_CFBundleDlfcnLoadBundle"
               "_CFBundleDlfcnLoadBundle"
-          frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+          frame (marked as prefix frame by stack trace rule (category:load +sentinel +prefix))
             function*
             function*
               "dlopen"
               "dlopen"
           frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
           frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
@@ -143,12 +143,12 @@ app:
           "Fatal Error: EXC_BAD_ACCESS / <hex>"
           "Fatal Error: EXC_BAD_ACCESS / <hex>"
 --------------------------------------------------------------------------
 --------------------------------------------------------------------------
 system:
 system:
-  hash: "725b26e5c390004cd0eca6018a7ad200"
+  hash: "3da34e8c72dbcd4a490ac36eb7130638"
   component:
   component:
     system*
     system*
       exception*
       exception*
         stacktrace*
         stacktrace*
-          frame* (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+          frame (ignored by stack trace rule (category:threadbase -group v-group))
             function*
             function*
               "start"
               "start"
           frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
           frame (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
@@ -190,37 +190,37 @@ system:
           frame (ignored due to recursion)
           frame (ignored due to recursion)
             function*
             function*
               "stripped_application_code"
               "stripped_application_code"
-          frame* (marked out of app by stack trace rule (family:native function:std::* -app))
+          frame (ignored by stack trace rule (category:indirection -group))
             filename*
             filename*
               "functional"
               "functional"
             function*
             function*
               "std::__1::function<T>::operator()"
               "std::__1::function<T>::operator()"
-          frame* (marked out of app by stack trace rule (family:native function:std::* -app))
+          frame (ignored by stack trace rule (category:indirection -group))
             filename*
             filename*
               "functional"
               "functional"
             function*
             function*
               "std::__1::__function::__value_func<T>::operator()"
               "std::__1::__function::__value_func<T>::operator()"
-          frame* (marked out of app by stack trace rule (family:native function:std::* -app))
+          frame (ignored by stack trace rule (category:indirection -group))
             filename*
             filename*
               "functional"
               "functional"
             function*
             function*
               "std::__1::__function::__func<T>::operator()"
               "std::__1::__function::__func<T>::operator()"
-          frame* (marked out of app by stack trace rule (family:native function:std::* -app))
+          frame (ignored by stack trace rule (category:indirection -group))
             filename*
             filename*
               "functional"
               "functional"
             function*
             function*
               "std::__1::__function::__alloc_func<T>::operator()"
               "std::__1::__function::__alloc_func<T>::operator()"
-          frame* (marked out of app by stack trace rule (family:native function:std::* -app))
+          frame (ignored by stack trace rule (category:internals -group))
             filename*
             filename*
               "__functional_base"
               "__functional_base"
             function*
             function*
               "std::__1::__invoke_void_return_wrapper<T>::__call<T>"
               "std::__1::__invoke_void_return_wrapper<T>::__call<T>"
-          frame* (marked out of app by stack trace rule (family:native function:std::* -app))
+          frame (ignored by stack trace rule (category:internals -group))
             filename*
             filename*
               "type_traits"
               "type_traits"
             function*
             function*
               "std::__1::__invoke<T>"
               "std::__1::__invoke<T>"
-          frame*
+          frame (ignored by stack trace rule (category:indirection -group))
             filename*
             filename*
               "initialize.cpp"
               "initialize.cpp"
             function*
             function*
@@ -249,31 +249,31 @@ system:
           frame (ignored due to recursion)
           frame (ignored due to recursion)
             function*
             function*
               "stripped_application_code"
               "stripped_application_code"
-          frame*
+          frame (ignored by stack trace rule (category:indirection -group))
             function*
             function*
               "CFBundleGetFunctionPointerForName"
               "CFBundleGetFunctionPointerForName"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             function*
             function*
               "_CFBundleLoadExecutableAndReturnError"
               "_CFBundleLoadExecutableAndReturnError"
-          frame*
+          frame (ignored by stack trace rule (category:internals -group))
             function*
             function*
               "_CFBundleDlfcnLoadBundle"
               "_CFBundleDlfcnLoadBundle"
-          frame* (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+          frame* (marked as prefix frame by stack trace rule (category:load +sentinel +prefix))
             function*
             function*
               "dlopen"
               "dlopen"
-          frame* (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+          frame (ignored by stack trace rule (category:internals -group))
             function*
             function*
               "dlopen_internal"
               "dlopen_internal"
-          frame* (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+          frame (ignored by stack trace rule (category:internals -group))
             function*
             function*
               "dyld::link"
               "dyld::link"
-          frame* (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+          frame (ignored by stack trace rule (category:internals -group))
             function*
             function*
               "ImageLoader::link"
               "ImageLoader::link"
-          frame* (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+          frame (ignored by stack trace rule (category:internals -group))
             function*
             function*
               "ImageLoader::recursiveRebase"
               "ImageLoader::recursiveRebase"
-          frame* (marked out of app by stack trace rule (family:native package:/usr/lib/** -app))
+          frame (ignored by stack trace rule (category:internals -group))
             function*
             function*
               "ImageLoaderMachOCompressed::rebase"
               "ImageLoaderMachOCompressed::rebase"
         type (ignored because exception is synthetic)
         type (ignored because exception is synthetic)

Некоторые файлы не были показаны из-за большого количества измененных файлов