Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
StackFrame.cs
Go to the documentation of this file.
3using System.Text;
4
5namespace System.Diagnostics;
6
7public class StackFrame
8{
10
11 private int _nativeOffset;
12
13 private int _ilOffset;
14
15 private string _fileName;
16
17 private int _lineNumber;
18
19 private int _columnNumber;
20
22
23 public const int OFFSET_UNKNOWN = -1;
24
26
27 internal StackFrame(StackFrameHelper stackFrameHelper, int skipFrames, bool needFileInfo)
28 {
29 _method = stackFrameHelper.GetMethodBase(skipFrames);
30 _nativeOffset = stackFrameHelper.GetOffset(skipFrames);
31 _ilOffset = stackFrameHelper.GetILOffset(skipFrames);
33 if (needFileInfo)
34 {
35 _fileName = stackFrameHelper.GetFilename(skipFrames);
36 _lineNumber = stackFrameHelper.GetLineNumber(skipFrames);
37 _columnNumber = stackFrameHelper.GetColumnNumber(skipFrames);
38 }
39 }
40
41 private void BuildStackFrame(int skipFrames, bool needFileInfo)
42 {
43 StackFrameHelper stackFrameHelper = new StackFrameHelper(null);
44 stackFrameHelper.InitializeSourceInfo(0, needFileInfo, null);
45 int numberOfFrames = stackFrameHelper.GetNumberOfFrames();
46 skipFrames += StackTrace.CalculateFramesToSkip(stackFrameHelper, numberOfFrames);
47 if (numberOfFrames - skipFrames > 0)
48 {
49 _method = stackFrameHelper.GetMethodBase(skipFrames);
50 _nativeOffset = stackFrameHelper.GetOffset(skipFrames);
51 _ilOffset = stackFrameHelper.GetILOffset(skipFrames);
52 if (needFileInfo)
53 {
54 _fileName = stackFrameHelper.GetFilename(skipFrames);
55 _lineNumber = stackFrameHelper.GetLineNumber(skipFrames);
56 _columnNumber = stackFrameHelper.GetColumnNumber(skipFrames);
57 }
58 }
59 }
60
62 {
63 return false;
64 }
65
66 private void InitMembers()
67 {
68 _nativeOffset = -1;
69 _ilOffset = -1;
70 }
71
72 [MethodImpl(MethodImplOptions.NoInlining)]
73 public StackFrame()
74 {
76 BuildStackFrame(0, needFileInfo: false);
77 }
78
79 [MethodImpl(MethodImplOptions.NoInlining)]
80 public StackFrame(bool needFileInfo)
81 {
83 BuildStackFrame(0, needFileInfo);
84 }
85
86 [MethodImpl(MethodImplOptions.NoInlining)]
87 public StackFrame(int skipFrames)
88 {
90 BuildStackFrame(skipFrames, needFileInfo: false);
91 }
92
93 [MethodImpl(MethodImplOptions.NoInlining)]
94 public StackFrame(int skipFrames, bool needFileInfo)
95 {
97 BuildStackFrame(skipFrames, needFileInfo);
98 }
99
100 [MethodImpl(MethodImplOptions.NoInlining)]
101 public StackFrame(string? fileName, int lineNumber)
102 {
103 InitMembers();
104 BuildStackFrame(0, needFileInfo: false);
105 _fileName = fileName;
106 _lineNumber = lineNumber;
107 }
108
109 [MethodImpl(MethodImplOptions.NoInlining)]
110 public StackFrame(string? fileName, int lineNumber, int colNumber)
111 {
112 InitMembers();
113 BuildStackFrame(0, needFileInfo: false);
114 _fileName = fileName;
115 _lineNumber = lineNumber;
116 _columnNumber = colNumber;
117 }
118
119 public virtual MethodBase? GetMethod()
120 {
121 return _method;
122 }
123
124 public virtual int GetNativeOffset()
125 {
126 return _nativeOffset;
127 }
128
129 public virtual int GetILOffset()
130 {
131 return _ilOffset;
132 }
133
134 public virtual string? GetFileName()
135 {
136 return _fileName;
137 }
138
139 public virtual int GetFileLineNumber()
140 {
141 return _lineNumber;
142 }
143
144 public virtual int GetFileColumnNumber()
145 {
146 return _columnNumber;
147 }
148
149 public override string ToString()
150 {
151 StringBuilder stringBuilder = new StringBuilder(255);
152 bool flag2;
153 if (_method != null)
154 {
155 stringBuilder.Append(_method.Name);
156 if (_method is MethodInfo { IsGenericMethod: not false } methodInfo)
157 {
158 Type[] genericArguments = methodInfo.GetGenericArguments();
159 stringBuilder.Append('<');
160 int i = 0;
161 bool flag = true;
162 for (; i < genericArguments.Length; i++)
163 {
164 if (!flag)
165 {
166 stringBuilder.Append(',');
167 }
168 else
169 {
170 flag = false;
171 }
172 stringBuilder.Append(genericArguments[i].Name);
173 }
174 stringBuilder.Append('>');
175 }
176 flag2 = true;
177 }
178 else
179 {
180 flag2 = AppendStackFrameWithoutMethodBase(stringBuilder);
181 }
182 if (flag2)
183 {
184 stringBuilder.Append(" at offset ");
185 if (_nativeOffset == -1)
186 {
187 stringBuilder.Append("<offset unknown>");
188 }
189 else
190 {
191 stringBuilder.Append(_nativeOffset);
192 }
193 stringBuilder.Append(" in file:line:column ");
194 stringBuilder.Append(_fileName ?? "<filename unknown>");
195 stringBuilder.Append(':');
196 stringBuilder.Append(_lineNumber);
197 stringBuilder.Append(':');
198 stringBuilder.Append(_columnNumber);
199 }
200 else
201 {
202 stringBuilder.Append("<null>");
203 }
204 stringBuilder.AppendLine();
205 return stringBuilder.ToString();
206 }
207}
void InitializeSourceInfo(int iSkip, bool fNeedFileInfo, Exception exception)
virtual int GetFileColumnNumber()
void BuildStackFrame(int skipFrames, bool needFileInfo)
Definition StackFrame.cs:41
virtual ? string GetFileName()
StackFrame(string? fileName, int lineNumber, int colNumber)
StackFrame(string? fileName, int lineNumber)
override string ToString()
StackFrame(int skipFrames, bool needFileInfo)
Definition StackFrame.cs:94
static bool AppendStackFrameWithoutMethodBase(StringBuilder sb)
Definition StackFrame.cs:61
StackFrame(bool needFileInfo)
Definition StackFrame.cs:80
StackFrame(StackFrameHelper stackFrameHelper, int skipFrames, bool needFileInfo)
Definition StackFrame.cs:27
virtual ? MethodBase GetMethod()
static int CalculateFramesToSkip(StackFrameHelper StackF, int iNumFrames)
Definition StackTrace.cs:32
override string ToString()
StringBuilder Append(char value, int repeatCount)
virtual Type[] GetGenericArguments()
Definition Type.cs:500