timcassell / ProtoPromise

Robust and efficient library for management of asynchronous operations in C#/.Net.
MIT License
153 stars 13 forks source link

Insert end of stacktrace message in causality trace #270

Closed timcassell closed 1 year ago

timcassell commented 1 year ago

Matches the message that ExceptionDispatchInfo inserts in stack traces. Also ignore all stack frames from [DebuggerNonUserCode] methods and DeclaringTypes (recursive).

Master:

Exception: Exception of type 'System.Exception' was thrown.
PromiseTest+<>c.<Func2>b__2_0 () (at Assets/PromiseTest.cs:26)
Proto.Promises.Internal+PromiseRefBase+DelegatePromiseVoidVoid.Invoke () (at Assets/Package/Core/Promises/Internal/DelegateWrappersInternal.cs:777)
Proto.Promises.Internal+PromiseRefBase+DelegatePromiseVoidVoid.Proto.Promises.Internal.PromiseRefBase.IDelegateResolveOrCancelPromise.InvokeResolver (Proto.Promises.Internal+PromiseRefBase handler, Proto.Promises.Promise+State state, Proto.Promises.Internal+PromiseRefBase owner) (at Assets/Package/Core/Promises/Internal/DelegateWrappersInternal.cs:784)
Proto.Promises.Internal+PromiseRefBase+PromiseResolvePromise`2[TResult,TResolver].Execute (Proto.Promises.Internal+PromiseRefBase handler, System.Object rejectContainer, Proto.Promises.Promise+State state, System.Boolean& invokingRejected) (at Assets/Package/Core/Promises/Internal/PromiseInternal.cs:1604)
Proto.Promises.Internal+PromiseRefBase+PromiseSingleAwait`1[TResult].Handle (Proto.Promises.Internal+PromiseRefBase handler, System.Object rejectContainer, Proto.Promises.Promise+State state) (at Assets/Package/Core/Promises/Internal/PromiseInternal.cs:706)
Rethrow as UnhandledExceptionInternal: An exception was not handled. -- This exception's Stacktrace contains the causality trace of all async callbacks that ran.
PromiseTest.Func2 () (at Assets/PromiseTest.cs:23)
Proto.Promises.Internal+PromiseRefBase+PromiseConfigured`1+<>c[TResult].<ScheduleContinuationOnContext>b__15_0 (System.Object obj) (at Assets/Package/Core/Promises/Internal/PromiseInternal.cs:1136)
Proto.Promises.Internal+<>c__DisplayClass33_0.<ScheduleContextCallback>b__1 (System.Object _) (at Assets/Package/Core/InternalShared/HelperFunctionsInternal.cs:71)
PromiseTest.Func1 () (at Assets/PromiseTest.cs:17)
PromiseTest.Start () (at Assets/PromiseTest.cs:12)

PR:

Exception: Exception of type 'System.Exception' was thrown.
PromiseTest+<>c.<Func2>b__2_0 () (at Assets/PromiseTest.cs:26)
Proto.Promises.Internal+PromiseRefBase+DelegatePromiseVoidVoid.Invoke () (at Assets/Package/Core/Promises/Internal/DelegateWrappersInternal.cs:777)
Proto.Promises.Internal+PromiseRefBase+DelegatePromiseVoidVoid.Proto.Promises.Internal.PromiseRefBase.IDelegateResolveOrCancelPromise.InvokeResolver (Proto.Promises.Internal+PromiseRefBase handler, Proto.Promises.Promise+State state, Proto.Promises.Internal+PromiseRefBase owner) (at Assets/Package/Core/Promises/Internal/DelegateWrappersInternal.cs:784)
Proto.Promises.Internal+PromiseRefBase+PromiseResolvePromise`2[TResult,TResolver].Execute (Proto.Promises.Internal+PromiseRefBase handler, System.Object rejectContainer, Proto.Promises.Promise+State state, System.Boolean& invokingRejected) (at Assets/Package/Core/Promises/Internal/PromiseInternal.cs:1604)
Proto.Promises.Internal+PromiseRefBase+PromiseSingleAwait`1[TResult].Handle (Proto.Promises.Internal+PromiseRefBase handler, System.Object rejectContainer, Proto.Promises.Promise+State state) (at Assets/Package/Core/Promises/Internal/PromiseInternal.cs:706)
Rethrow as UnhandledExceptionInternal: An exception was not handled. -- This exception's Stacktrace contains the causality trace of all async callbacks that ran.
PromiseTest.Func2 () (at Assets/PromiseTest.cs:23)
--- End of stack trace from the previous location where the exception was thrown ---
PromiseTest.Func1 () (at Assets/PromiseTest.cs:17)
PromiseTest.Start () (at Assets/PromiseTest.cs:12)