From 5e796331263c7ec9539a5c8205f3490a506702f6 Mon Sep 17 00:00:00 2001 From: rcz Date: Mon, 8 Nov 2021 09:49:11 +0800 Subject: [PATCH 1/3] =?UTF-8?q?Delaying=20loading=20lua=20files=20will=20r?= =?UTF-8?q?esult=20in=20no=20relevant=20files=20in=20the=20debugger,=20and?= =?UTF-8?q?=20an=20exception=20will=20occur=20when=20setting=20a=20breakpo?= =?UTF-8?q?int=20!=20=20DkmModule.FindDocuments=20Not=20implemented=20?= =?UTF-8?q?=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LuaDkmDebuggerComponent/LocalComponent.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/LuaDkmDebuggerComponent/LocalComponent.cs b/LuaDkmDebuggerComponent/LocalComponent.cs index f158e37..b46efbe 100644 --- a/LuaDkmDebuggerComponent/LocalComponent.cs +++ b/LuaDkmDebuggerComponent/LocalComponent.cs @@ -2626,8 +2626,14 @@ DkmResolvedDocument[] IDkmSymbolDocumentCollectionQuery.FindDocuments(DkmModule } log.Error($"IDkmSymbolDocumentCollectionQuery.FindDocuments failure {sourceFileId.DocumentName}"); - - return module.FindDocuments(sourceFileId); + try + { + return module.FindDocuments(sourceFileId); + } + cache + { + return null; + } } bool FindFunctionInstructionForLine(DkmProcess process, LuaFunctionData function, int startLine, int endLine, out LuaFunctionData targetFunction, out int targetInstructionPointer, out int targetLine) From 81ff61f53b1d7d2d1c4cc2efd102ad785ab053fa Mon Sep 17 00:00:00 2001 From: rcz Date: Tue, 9 Nov 2021 09:32:54 +0800 Subject: [PATCH 2/3] DkmModule.FindDocuments undefined! --- LuaDkmDebuggerComponent/LocalComponent.cs | 120 +++++++++++----------- 1 file changed, 60 insertions(+), 60 deletions(-) diff --git a/LuaDkmDebuggerComponent/LocalComponent.cs b/LuaDkmDebuggerComponent/LocalComponent.cs index b46efbe..0db5902 100644 --- a/LuaDkmDebuggerComponent/LocalComponent.cs +++ b/LuaDkmDebuggerComponent/LocalComponent.cs @@ -2531,95 +2531,95 @@ DkmResolvedDocument[] IDkmSymbolDocumentCollectionQuery.FindDocuments(DkmModule { DkmCustomModuleInstance moduleInstance = module.GetModuleInstances().OfType().FirstOrDefault(el => el.Module.CompilerId.VendorId == Guids.luaCompilerGuid); - if (moduleInstance == null) - return module.FindDocuments(sourceFileId); - - log.Debug($"IDkmSymbolDocumentCollectionQuery.FindDocuments begin ({sourceFileId.DocumentName})"); + if (moduleInstance != null) + { + log.Debug($"IDkmSymbolDocumentCollectionQuery.FindDocuments begin ({sourceFileId.DocumentName})"); - var process = moduleInstance.Process; - var processData = process.GetDataItem(); + var process = moduleInstance.Process; + var processData = process.GetDataItem(); - lock (processData.symbolStore) - { - foreach (var state in processData.symbolStore.knownStates) + lock (processData.symbolStore) { - foreach (var source in state.Value.knownSources) + foreach (var state in processData.symbolStore.knownStates) { - // Resolve script path if it's not resolved yet - if (source.Value.resolvedFileName == null) + foreach (var source in state.Value.knownSources) { - var scriptSource = processData.symbolStore.FetchScriptSource(source.Key); + // Resolve script path if it's not resolved yet + if (source.Value.resolvedFileName == null) + { + var scriptSource = processData.symbolStore.FetchScriptSource(source.Key); - if (scriptSource?.resolvedFileName != null) - source.Value.resolvedFileName = scriptSource.resolvedFileName; - else - source.Value.resolvedFileName = TryFindSourcePath(process.Path, processData, source.Key, scriptSource?.scriptContent, true, out string loadStatus); + if (scriptSource?.resolvedFileName != null) + source.Value.resolvedFileName = scriptSource.resolvedFileName; + else + source.Value.resolvedFileName = TryFindSourcePath(process.Path, processData, source.Key, scriptSource?.scriptContent, true, out string loadStatus); - if (source.Value.resolvedFileName != null) - log.Debug($"IDkmSymbolDocumentCollectionQuery.FindDocuments Resolved {source.Value.sourceFileName} to {source.Value.resolvedFileName}"); - } + if (source.Value.resolvedFileName != null) + log.Debug($"IDkmSymbolDocumentCollectionQuery.FindDocuments Resolved {source.Value.sourceFileName} to {source.Value.resolvedFileName}"); + } - var fileName = source.Value.resolvedFileName; + var fileName = source.Value.resolvedFileName; - if (sourceFileId.DocumentName == fileName) - { - var dataItem = new LuaResolvedDocumentItem + if (sourceFileId.DocumentName == fileName) { - source = source.Value - }; + var dataItem = new LuaResolvedDocumentItem + { + source = source.Value + }; - log.Debug($"IDkmSymbolDocumentCollectionQuery.FindDocuments success (known source '{source}')"); + log.Debug($"IDkmSymbolDocumentCollectionQuery.FindDocuments success (known source '{source}')"); - return new DkmResolvedDocument[1] { DkmResolvedDocument.Create(module, sourceFileId.DocumentName, null, DkmDocumentMatchStrength.FullPath, DkmResolvedDocumentWarning.None, false, dataItem) }; + return new DkmResolvedDocument[1] { DkmResolvedDocument.Create(module, sourceFileId.DocumentName, null, DkmDocumentMatchStrength.FullPath, DkmResolvedDocumentWarning.None, false, dataItem) }; + } } } - } - foreach (var state in processData.symbolStore.knownStates) - { - foreach (var script in state.Value.knownScripts) + foreach (var state in processData.symbolStore.knownStates) { - // Resolve script path if it's not resolved yet - if (script.Value.resolvedFileName == null) + foreach (var script in state.Value.knownScripts) { - // Check match based on hash - if (sourceFileId.SHA1HashPart != null && script.Value.sha1Hash != null) + // Resolve script path if it's not resolved yet + if (script.Value.resolvedFileName == null) { - int value0 = (int)(((uint)script.Value.sha1Hash[3] << 24) | ((uint)script.Value.sha1Hash[2] << 16) | ((uint)script.Value.sha1Hash[1] << 8) | (uint)script.Value.sha1Hash[0]); - int value1 = (int)(((uint)script.Value.sha1Hash[7] << 24) | ((uint)script.Value.sha1Hash[6] << 16) | ((uint)script.Value.sha1Hash[5] << 8) | (uint)script.Value.sha1Hash[4]); - int value2 = (int)(((uint)script.Value.sha1Hash[11] << 24) | ((uint)script.Value.sha1Hash[10] << 16) | ((uint)script.Value.sha1Hash[9] << 8) | (uint)script.Value.sha1Hash[8]); - int value3 = (int)(((uint)script.Value.sha1Hash[15] << 24) | ((uint)script.Value.sha1Hash[14] << 16) | ((uint)script.Value.sha1Hash[13] << 8) | (uint)script.Value.sha1Hash[12]); - int value4 = (int)(((uint)script.Value.sha1Hash[19] << 24) | ((uint)script.Value.sha1Hash[18] << 16) | ((uint)script.Value.sha1Hash[17] << 8) | (uint)script.Value.sha1Hash[16]); - - if (sourceFileId.SHA1HashPart.Value.Value0 == value0 && sourceFileId.SHA1HashPart.Value.Value1 == value1 && sourceFileId.SHA1HashPart.Value.Value2 == value2 && sourceFileId.SHA1HashPart.Value.Value3 == value3 && sourceFileId.SHA1HashPart.Value.Value4 == value4) + // Check match based on hash + if (sourceFileId.SHA1HashPart != null && script.Value.sha1Hash != null) { - log.Debug($"IDkmSymbolDocumentCollectionQuery.FindDocuments Resolved {script.Value.sourceFileName} to {sourceFileId.DocumentName} based on SHA-1 hash"); + int value0 = (int)(((uint)script.Value.sha1Hash[3] << 24) | ((uint)script.Value.sha1Hash[2] << 16) | ((uint)script.Value.sha1Hash[1] << 8) | (uint)script.Value.sha1Hash[0]); + int value1 = (int)(((uint)script.Value.sha1Hash[7] << 24) | ((uint)script.Value.sha1Hash[6] << 16) | ((uint)script.Value.sha1Hash[5] << 8) | (uint)script.Value.sha1Hash[4]); + int value2 = (int)(((uint)script.Value.sha1Hash[11] << 24) | ((uint)script.Value.sha1Hash[10] << 16) | ((uint)script.Value.sha1Hash[9] << 8) | (uint)script.Value.sha1Hash[8]); + int value3 = (int)(((uint)script.Value.sha1Hash[15] << 24) | ((uint)script.Value.sha1Hash[14] << 16) | ((uint)script.Value.sha1Hash[13] << 8) | (uint)script.Value.sha1Hash[12]); + int value4 = (int)(((uint)script.Value.sha1Hash[19] << 24) | ((uint)script.Value.sha1Hash[18] << 16) | ((uint)script.Value.sha1Hash[17] << 8) | (uint)script.Value.sha1Hash[16]); + + if (sourceFileId.SHA1HashPart.Value.Value0 == value0 && sourceFileId.SHA1HashPart.Value.Value1 == value1 && sourceFileId.SHA1HashPart.Value.Value2 == value2 && sourceFileId.SHA1HashPart.Value.Value3 == value3 && sourceFileId.SHA1HashPart.Value.Value4 == value4) + { + log.Debug($"IDkmSymbolDocumentCollectionQuery.FindDocuments Resolved {script.Value.sourceFileName} to {sourceFileId.DocumentName} based on SHA-1 hash"); - script.Value.resolvedFileName = sourceFileId.DocumentName; + script.Value.resolvedFileName = sourceFileId.DocumentName; + } } - } - if (script.Value.resolvedFileName == null) - { - script.Value.resolvedFileName = TryFindSourcePath(process.Path, processData, script.Key, script.Value.scriptContent, true, out string loadStatus); + if (script.Value.resolvedFileName == null) + { + script.Value.resolvedFileName = TryFindSourcePath(process.Path, processData, script.Key, script.Value.scriptContent, true, out string loadStatus); - if (script.Value.resolvedFileName != null) - log.Debug($"IDkmSymbolDocumentCollectionQuery.FindDocuments Resolved {script.Value.sourceFileName} to {script.Value.resolvedFileName}"); + if (script.Value.resolvedFileName != null) + log.Debug($"IDkmSymbolDocumentCollectionQuery.FindDocuments Resolved {script.Value.sourceFileName} to {script.Value.resolvedFileName}"); + } } - } - var fileName = script.Value.resolvedFileName; + var fileName = script.Value.resolvedFileName; - if (sourceFileId.DocumentName == fileName) - { - var dataItem = new LuaResolvedDocumentItem + if (sourceFileId.DocumentName == fileName) { - script = script.Value - }; + var dataItem = new LuaResolvedDocumentItem + { + script = script.Value + }; - log.Debug($"IDkmSymbolDocumentCollectionQuery.FindDocuments success (known script '{script}')"); + log.Debug($"IDkmSymbolDocumentCollectionQuery.FindDocuments success (known script '{script}')"); - return new DkmResolvedDocument[1] { DkmResolvedDocument.Create(module, sourceFileId.DocumentName, null, DkmDocumentMatchStrength.FullPath, DkmResolvedDocumentWarning.None, false, dataItem) }; + return new DkmResolvedDocument[1] { DkmResolvedDocument.Create(module, sourceFileId.DocumentName, null, DkmDocumentMatchStrength.FullPath, DkmResolvedDocumentWarning.None, false, dataItem) }; + } } } } From 618f6764967c4258de5b3beb77e06bd6d480a88a Mon Sep 17 00:00:00 2001 From: rcz Date: Wed, 10 Nov 2021 15:31:03 +0800 Subject: [PATCH 3/3] modify try catch --- LuaDkmDebuggerComponent/LocalComponent.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LuaDkmDebuggerComponent/LocalComponent.cs b/LuaDkmDebuggerComponent/LocalComponent.cs index 0db5902..a01403c 100644 --- a/LuaDkmDebuggerComponent/LocalComponent.cs +++ b/LuaDkmDebuggerComponent/LocalComponent.cs @@ -2630,7 +2630,7 @@ DkmResolvedDocument[] IDkmSymbolDocumentCollectionQuery.FindDocuments(DkmModule { return module.FindDocuments(sourceFileId); } - cache + catch { return null; }