C#C
C#3y ago
Wizard

❔ Get locals and their values from an Exception object.

Is it possible to get the local variables and their values from a StackTrace object created from a System.Exception object?

I have the method public void LogException(ex). I'm trying to log all variables names and values. I'm not using compiler optimizations if it matters.

I tried using reflection and a few other crazy things but nothing seems to work properly.

Current code:
        public static void LogException( Exception ex )
        {
            Log( $"Exception: {ex.GetType().Name} - {ex.Message}" );
            Log( $"Stack trace: {ex.StackTrace}" );

            StackTrace stackTrace = new StackTrace( ex, true );
            for ( int i = 0; i < stackTrace.FrameCount; i++ )
            {
                StackFrame frame = stackTrace.GetFrame( i );
                MethodBase method = frame.GetMethod();
                Type declaringType = method.DeclaringType;

                Log( $"Local variables at frame {i}:" );

                MethodInfo methodInfo = method as MethodInfo;
                if ( methodInfo != null )
                {
                    LocalVariableInfo[] localVariables = methodInfo.GetMethodBody()?.LocalVariables?.ToArray();
                    if ( localVariables != null )
                    {
                        foreach ( LocalVariableInfo localVariable in localVariables )
                        {
                            object value = frame.GetMethod().GetMethodBody()?.LocalVariables[localVariable.LocalIndex];
                            Log( $"{localVariable.LocalType} {localVariable} = {value}" );
                        }
                    }
                }

                Log( $"Method: {declaringType?.FullName}.{method.Name}" );
                Log( $"File: {frame.GetFileName()}" );
                Log( $"Line: {frame.GetFileLineNumber()}" );
            }

            ExceptionLogged.Invoke( ex ); // Raise the ExceptionLogged event
        }
Was this page helpful?