Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
StackTraceSymbols.cs
Go to the documentation of this file.
2using System.IO;
8
9namespace System.Diagnostics;
10
11internal sealed class StackTraceSymbols : IDisposable
12{
14
19
29
31 {
32 sourceFile = null;
33 sourceLine = 0;
34 sourceColumn = 0;
36 if (metadataReader == null)
37 {
38 return;
39 }
41 if (handle.Kind != HandleKind.MethodDefinition)
42 {
43 return;
44 }
47 if (methodDebugInformation.SequencePointsBlob.IsNil)
48 {
49 return;
50 }
54 {
55 if (item.Offset > ilOffset)
56 {
57 break;
58 }
59 if (item.StartLine != 16707566)
60 {
62 }
63 }
64 if (sequencePoint.HasValue)
65 {
66 sourceLine = sequencePoint.Value.StartLine;
67 sourceColumn = sequencePoint.Value.StartColumn;
68 sourceFile = metadataReader.GetString(metadataReader.GetDocument(sequencePoint.Value.Document).Name);
69 }
70 }
71
80
82 {
83 if (inMemoryPdbSize < 4 || *(uint*)(void*)inMemoryPdbAddress != 1112167234)
84 {
85 return null;
86 }
88 try
89 {
90 metadataReaderProvider.GetMetadataReader();
92 }
94 {
95 metadataReaderProvider.Dispose();
96 return null;
97 }
98 }
99
101 {
103 {
104 return new PEReader((byte*)(void*)loadedPeAddress, loadedPeSize, !isFileLayout);
105 }
107 if (stream != null)
108 {
109 return new PEReader(stream);
110 }
111 return null;
112 }
113
115 {
117 {
118 if (pEReader == null)
119 {
120 return null;
121 }
122 if (pEReader.TryOpenAssociatedPortablePdb(assemblyPath, TryOpenFile, out MetadataReaderProvider pdbReaderProvider, out string _))
123 {
124 return pdbReaderProvider;
125 }
126 }
127 return null;
128 }
129
130 private static Stream TryOpenFile(string path)
131 {
132 if (!File.Exists(path))
133 {
134 return null;
135 }
136 try
137 {
138 return new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Delete);
139 }
140 catch
141 {
142 return null;
143 }
144 }
145}
static unsafe MetadataReaderProvider TryOpenReaderForInMemoryPdb(IntPtr inMemoryPdbAddress, int inMemoryPdbSize)
static Stream TryOpenFile(string path)
static unsafe PEReader TryGetPEReader(string assemblyPath, IntPtr loadedPeAddress, int loadedPeSize, bool isFileLayout)
readonly ConditionalWeakTable< Assembly, MetadataReaderProvider > _metadataCache
void GetSourceLineInfo(Assembly assembly, string assemblyPath, IntPtr loadedPeAddress, int loadedPeSize, bool isFileLayout, IntPtr inMemoryPdbAddress, int inMemoryPdbSize, int methodToken, int ilOffset, out string sourceFile, out int sourceLine, out int sourceColumn)
MetadataReader TryGetReader(Assembly assembly, string assemblyPath, IntPtr loadedPeAddress, int loadedPeSize, bool isFileLayout, IntPtr inMemoryPdbAddress, int inMemoryPdbSize)
static MetadataReaderProvider TryOpenReaderFromAssemblyFile(string assemblyPath, IntPtr loadedPeAddress, int loadedPeSize, bool isFileLayout)
static bool Exists([NotNullWhen(true)] string? path)
Definition File.cs:97
static unsafe MetadataReaderProvider FromMetadataImage(byte *start, int size)
TValue GetValue(TKey key, CreateValueCallback createValueCallback)
static readonly IntPtr Zero
Definition IntPtr.cs:18