Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion src/mono/wasm/debugger/BrowserDebugProxy/DebugStore.cs
Original file line number Diff line number Diff line change
Expand Up @@ -514,12 +514,13 @@ internal class AssemblyInfo
internal PEReader peReader;
internal MemoryStream asmStream;
internal MemoryStream pdbStream;
public int DebugId { get; set; }
private int debugId;

public bool TriedToLoadSymbolsOnDemand { get; set; }

public unsafe AssemblyInfo(string url, byte[] assembly, byte[] pdb)
{
debugId = -1;
this.id = Interlocked.Increment(ref next_id);
asmStream = new MemoryStream(assembly);
peReader = new PEReader(asmStream);
Expand All @@ -542,7 +543,19 @@ public unsafe AssemblyInfo(string url, byte[] assembly, byte[] pdb)
AssemblyNameUnqualified = asmMetadataReader.GetAssemblyDefinition().GetAssemblyName().Name + ".dll";
Populate();
}
public async Task<int> GetDebugId(SessionId sessionId, MonoSDBHelper sdbAgent, CancellationToken token)
{
if (debugId > 0)
return debugId;
debugId = await sdbAgent.GetAssemblyId(sessionId, Name, token);
return debugId;
}

public void SetDebugId(int id)
{
if (debugId <= 0 && debugId != id)
debugId = id;
}
public bool EnC(byte[] meta, byte[] pdb)
{
var asmStream = new MemoryStream(meta);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ public async Task<JObject> TryToRunOnLoadedClasses(string varName, CancellationT
var type = asm.GetTypeByName(classNameToFind);
if (type != null)
{
typeId = await sdbHelper.GetTypeIdFromToken(sessionId, asm.DebugId, type.Token, token);
typeId = await sdbHelper.GetTypeIdFromToken(sessionId, await asm.GetDebugId(sessionId, sdbHelper, token), type.Token, token);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -710,7 +710,7 @@ public async Task<AssemblyInfo> GetAssemblyInfo(SessionId sessionId, int assembl
return null;
}
}
asm.DebugId = assemblyId;
asm.SetDebugId(assemblyId);
assemblies[assemblyId] = asm;
return asm;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -641,6 +641,28 @@ await EvaluateOnCallFrameFail(id,
);
});

[Fact]
public async Task EvaluateStaticAttributeInAssemblyNotRelatedButLoaded() => await CheckInspectLocalsAtBreakpointSite(
"DebuggerTests.EvaluateTestsClass/TestEvaluate", "EvaluateLocalsFromAnotherAssembly", 5, "EvaluateLocalsFromAnotherAssembly",
"window.setTimeout(function() { invoke_static_method ('[debugger-test] DebuggerTests.EvaluateTestsClass:EvaluateLocalsFromAnotherAssembly'); })",
wait_for_event_fn: async (pause_location) =>
{
var id = pause_location["callFrames"][0]["callFrameId"].Value<string>();
await EvaluateOnCallFrameAndCheck(id,
("DebuggerTests.ClassToBreak.valueToCheck", TNumber(10)));
});

[Fact]
public async Task EvaluateLocalObjectFromAssemblyNotRelatedButLoaded()
=> await CheckInspectLocalsAtBreakpointSite(
"DebuggerTests.EvaluateTestsClass/TestEvaluate", "EvaluateLocalsFromAnotherAssembly", 5, "EvaluateLocalsFromAnotherAssembly",
"window.setTimeout(function() { invoke_static_method ('[debugger-test] DebuggerTests.EvaluateTestsClass:EvaluateLocalsFromAnotherAssembly'); })",
wait_for_event_fn: async (pause_location) =>
{
var id = pause_location["callFrames"][0]["callFrameId"].Value<string>();
await EvaluateOnCallFrameAndCheck(id,
("a.valueToCheck", TNumber(20)));
});
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,14 @@ public static int TestBreakpoint()
{
return 50;
}
public static int valueToCheck = 10;
}
}
public class ClassToCheckFieldValue
{
public int valueToCheck;
public ClassToCheckFieldValue()
{
valueToCheck = 20;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,13 @@ public void run(int g, int h, string a, string valString, int this_a)
b = b + 1;
c = c + 1;
}
public void EvaluateLocalsFromAnotherAssembly()
{
var asm = System.Reflection.Assembly.LoadFrom("debugger-test-with-source-link.dll");
var myType = asm.GetType("DebuggerTests.ClassToCheckFieldValue");
var myMethod = myType.GetConstructor(new Type[] { });
var a = myMethod.Invoke(new object[]{});
}
}

public static void EvaluateLocals()
Expand All @@ -41,6 +48,11 @@ public static void EvaluateLocals()
var f_g_s = new EvaluateTestsGenericStruct<int>();
f_g_s.EvaluateTestsGenericStructInstanceMethod(100, 200, "test");
}
public static void EvaluateLocalsFromAnotherAssembly()
{
TestEvaluate eval = new TestEvaluate();
eval.EvaluateLocalsFromAnotherAssembly();
}

}

Expand Down