diff --git a/source/Cosmos.Build.MSBuild/ReadNAsmMapToDebugInfo.cs b/source/Cosmos.Build.MSBuild/ReadNAsmMapToDebugInfo.cs index 9af9801c3..c64c8cf4a 100644 --- a/source/Cosmos.Build.MSBuild/ReadNAsmMapToDebugInfo.cs +++ b/source/Cosmos.Build.MSBuild/ReadNAsmMapToDebugInfo.cs @@ -33,6 +33,7 @@ namespace Cosmos.Build.MSBuild { using (var xDebugInfo = new DebugInfo(DebugInfoFile)) { xDebugInfo.AddLabels(xSourceInfos); + xDebugInfo.CreateIndexes(); } return true; } diff --git a/source/Cosmos.Debug.Common/Cosmos.Debug.Common.csproj b/source/Cosmos.Debug.Common/Cosmos.Debug.Common.csproj index 3a0a5385f..9fe13bb5f 100644 --- a/source/Cosmos.Debug.Common/Cosmos.Debug.Common.csproj +++ b/source/Cosmos.Debug.Common/Cosmos.Debug.Common.csproj @@ -182,6 +182,7 @@ + diff --git a/source/Cosmos.Debug.Common/DebugInfo.cs b/source/Cosmos.Debug.Common/DebugInfo.cs index fd1287fc7..b8d66767a 100644 --- a/source/Cosmos.Debug.Common/DebugInfo.cs +++ b/source/Cosmos.Debug.Common/DebugInfo.cs @@ -1,23 +1,18 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.IO; using System.Data; -using System.Data.Common; -using System.Reflection; -using System.Text; -using Microsoft.Win32; -using Microsoft.Samples.Debugging.CorSymbolStore; -using System.Diagnostics.SymbolStore; -using System.Configuration; -using System.Threading; using System.Data.SQLite; +using System.Diagnostics.SymbolStore; +using System.IO; +using System.Linq; +using System.Reflection; using Dapper; -using SQLinq; -using SQLinq.Dapper; using DapperExtensions; using DapperExtensions.Mapper; using DapperExtensions.Sql; +using Microsoft.Samples.Debugging.CorSymbolStore; +using SQLinq; +using SQLinq.Dapper; namespace Cosmos.Debug.Common { @@ -68,7 +63,7 @@ namespace Cosmos.Debug.Common File.Delete(aDbName); } - public DebugInfo(string aPathname, bool aCreate = false) + public DebugInfo(string aPathname, bool aCreate = false, bool aCreateIndexes = false) { CurrentInstance = this; @@ -98,9 +93,10 @@ namespace Cosmos.Debug.Common // Be careful with indexes, they slow down inserts. So on tables that we have a // lot of inserts, but limited look ups, dont add them. // - xSQL.MakeIndex("Labels", "Address", false); - xSQL.MakeIndex("Labels", "Name", true); - xSQL.MakeIndex("Methods", "DocumentID", false); + if (aCreateIndexes) + { + this.CreateIndexes(); + } } } if (mConnection.State == ConnectionState.Closed) @@ -117,6 +113,20 @@ namespace Cosmos.Debug.Common } } + /// + /// Create indexes inside the database. + /// + public void CreateIndexes() + { + var xSQL = new SQL(mConnection); + + xSQL.MakeIndex("Labels", "Address", false); + xSQL.MakeIndex("Labels", "Name", true); + xSQL.MakeIndex("Methods", "DocumentID", false); + + xSQL.ExecuteAssemblyResource("SQLiteIndexes.sql"); + } + // The GUIDs etc are populated by the MSBuild task, so they wont be loaded when the debugger runs. // Because of this, we also allow manual loading. public void LoadLookups() diff --git a/source/Cosmos.Debug.Common/ObjDump.cs b/source/Cosmos.Debug.Common/ObjDump.cs index 84c39c5ee..89b86fa37 100644 --- a/source/Cosmos.Debug.Common/ObjDump.cs +++ b/source/Cosmos.Debug.Common/ObjDump.cs @@ -125,6 +125,7 @@ namespace Cosmos.Debug.Common { } xDebugInfo.AddLabels(xLabels, true); + xDebugInfo.CreateIndexes(); } } } diff --git a/source/Cosmos.Debug.Common/SQLite.sql b/source/Cosmos.Debug.Common/SQLite.sql index 04b5874f0..179f87758 100644 --- a/source/Cosmos.Debug.Common/SQLite.sql +++ b/source/Cosmos.Debug.Common/SQLite.sql @@ -91,30 +91,3 @@ alter table methods alter table MethodIlOps add column MethodID integer null;-- references Methods(ID); - --- Creating non-clustered index for FOREIGN KEY 'FK_AssemblyFileMethod' -CREATE INDEX [IX_FK_AssemblyFileMethod] -ON [Methods] - ([AssemblyFileID]); - - --- Creating non-clustered index for FOREIGN KEY 'FK_DocumentMethod' -CREATE INDEX [IX_FK_DocumentMethod] -ON [Methods] - ([DocumentID]); - --- Creating non-clustered index for FOREIGN KEY 'FK_LabelMethod' -CREATE INDEX [IX_FK_LabelMethod] -ON [Methods] - ([LabelStartID]); - --- Creating non-clustered index for FOREIGN KEY 'FK_LabelMethodEnd' -CREATE INDEX [IX_FK_LabelMethodEnd] -ON [Methods] - ([LabelEndID]); - - --- Creating non-clustered index for FOREIGN KEY 'FK_MethodIlOpMethod' -CREATE INDEX [IX_FK_MethodIlOpMethod] -ON [MethodIlOps] - ([MethodID]); diff --git a/source/Cosmos.Debug.Common/SQLiteIndexes.sql b/source/Cosmos.Debug.Common/SQLiteIndexes.sql new file mode 100644 index 000000000..cc7b1d581 --- /dev/null +++ b/source/Cosmos.Debug.Common/SQLiteIndexes.sql @@ -0,0 +1,26 @@ +-- Creating non-clustered index for FOREIGN KEY 'FK_AssemblyFileMethod' +CREATE INDEX [IX_FK_AssemblyFileMethod] +ON [Methods] + ([AssemblyFileID]); + + +-- Creating non-clustered index for FOREIGN KEY 'FK_DocumentMethod' +CREATE INDEX [IX_FK_DocumentMethod] +ON [Methods] + ([DocumentID]); + +-- Creating non-clustered index for FOREIGN KEY 'FK_LabelMethod' +CREATE INDEX [IX_FK_LabelMethod] +ON [Methods] + ([LabelStartID]); + +-- Creating non-clustered index for FOREIGN KEY 'FK_LabelMethodEnd' +CREATE INDEX [IX_FK_LabelMethodEnd] +ON [Methods] + ([LabelEndID]); + + +-- Creating non-clustered index for FOREIGN KEY 'FK_MethodIlOpMethod' +CREATE INDEX [IX_FK_MethodIlOpMethod] +ON [MethodIlOps] + ([MethodID]); diff --git a/source/Cosmos.IL2CPU.Profiler/Assembler.cs b/source/Cosmos.IL2CPU.Profiler/Assembler.cs index 8cb8b5c69..f3d966ac1 100644 --- a/source/Cosmos.IL2CPU.Profiler/Assembler.cs +++ b/source/Cosmos.IL2CPU.Profiler/Assembler.cs @@ -15,7 +15,7 @@ namespace Cosmos.IL2CPU.Profiler { protected override void InitILOps(Type aAssemblerBaseOp) { var xILOp = new ILOp(this.Assembler); - DebugInfo = new Debug.Common.DebugInfo(AppDomain.CurrentDomain.BaseDirectory + "DebugInfo.mdf", true); + DebugInfo = new Debug.Common.DebugInfo(AppDomain.CurrentDomain.BaseDirectory + "DebugInfo.mdf", true, true); // Don't change the type in the foreach to a var, its necessary as it is now // to typecast it, so we can then recast to an int. foreach (ILOpCode.Code xCode in Enum.GetValues(typeof(ILOpCode.Code))) diff --git a/source/Cosmos.IL2CPU.Profiler/Program.cs b/source/Cosmos.IL2CPU.Profiler/Program.cs index a1130af78..3b8f73d05 100644 --- a/source/Cosmos.IL2CPU.Profiler/Program.cs +++ b/source/Cosmos.IL2CPU.Profiler/Program.cs @@ -47,7 +47,7 @@ namespace Cosmos.IL2CPU.Profiler { { Console.WriteLine("ILScanner exception : " + e.Message); }; - using (var xDebugInfo = new DebugInfo(MDFFile, true)) + using (var xDebugInfo = new DebugInfo(MDFFile, true, true)) { xAsmblr.DebugInfo = xDebugInfo; xAsmblr.DebugEnabled = true; diff --git a/source/Cosmos.IL2CPU/CompilerEngine.cs b/source/Cosmos.IL2CPU/CompilerEngine.cs index 20be551fe..098be7262 100644 --- a/source/Cosmos.IL2CPU/CompilerEngine.cs +++ b/source/Cosmos.IL2CPU/CompilerEngine.cs @@ -206,7 +206,7 @@ namespace Cosmos.IL2CPU using (var xAsm = GetAppAssembler()) { - using (var xDebugInfo = new DebugInfo(xOutputFilename + ".cdb", true)) + using (var xDebugInfo = new DebugInfo(xOutputFilename + ".cdb", true, false)) { xAsm.DebugInfo = xDebugInfo; xAsm.DebugEnabled = DebugEnabled;