Cosmos/source2/Debug/Cosmos.Debug.Common/CDebugger/DebugSymbol.cs

114 lines
No EOL
2.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace Cosmos.Debug.Common.CDebugger
{
public class DebugSymbol {
public string AssemblyFileName {
get;
set;
}
public int MethodMetaDataToken {
get;
set;
}
public int InstructionOffset {
get;
set;
}
public string LabelName {
get;
set;
}
}
public class MLDebugSymbol {
public static void WriteSymbolsListToFile(IEnumerable<MLDebugSymbol> aSymbols, string aFile) {
using (XmlWriter xWriter = XmlWriter.Create(aFile)) {
xWriter.WriteStartDocument();
{
xWriter.WriteStartElement("MSILInstructions");
{
foreach (var item in aSymbols) {
xWriter.WriteStartElement("Instruction");
{
xWriter.WriteAttributeString("Label", item.LabelName);
xWriter.WriteAttributeString("Address", item.Address.ToString());
xWriter.WriteAttributeString("StackDifference", item.StackDifference.ToString());
xWriter.WriteAttributeString("AssemblyFile", item.AssemblyFile);
xWriter.WriteAttributeString("TypeToken", item.TypeToken.ToString());
xWriter.WriteAttributeString("MethodToken", item.MethodToken.ToString());
xWriter.WriteAttributeString("ILOffset", item.ILOffset.ToString());
xWriter.WriteAttributeString("MethodName", item.MethodName);
}
xWriter.WriteEndElement();
}
}
xWriter.WriteEndElement();
}
xWriter.WriteEndDocument();
}
}
public static void ReadSymbolsListFromFile(List<MLDebugSymbol> aSymbols, string aFile) {
var xDoc = XDocument.Load(aFile);
aSymbols.Clear();
aSymbols.AddRange((from item in xDoc.Descendants("Instruction")
select new MLDebugSymbol() {
LabelName = item.Attribute("Label").Value,
Address = (uint)item.Attribute("Address"),
StackDifference = (int)item.Attribute("StackDifference"),
AssemblyFile = (string)item.Attribute("AssemblyFile"),
TypeToken = (int)item.Attribute("TypeToken"),
MethodToken = (int)item.Attribute("MethodToken"),
ILOffset = (int)item.Attribute("ILOffset"),
MethodName = (string)item.Attribute("MethodName")
}));
}
public string LabelName {
get;
set;
}
public uint Address {
get;
set;
}
public int StackDifference {
get;
set;
}
public string AssemblyFile {
get;
set;
}
public int TypeToken {
get;
set;
}
public int MethodToken {
get;
set;
}
public int ILOffset {
get;
set;
}
public string MethodName
{
get;
set;
}
}
}