Skip to content

Commit f4ff60b

Browse files
Fixing DebuggerDisplayAttribute when using utf16 characters. Fixes #58046 (#58087)
Co-authored-by: Thays <thaystg@gmail.com>
1 parent 6145251 commit f4ff60b

File tree

3 files changed

+18
-4
lines changed

3 files changed

+18
-4
lines changed

src/mono/wasm/debugger/BrowserDebugProxy/MonoSDBHelper.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
using Microsoft.CodeAnalysis.CSharp.Syntax;
1818
using Microsoft.CodeAnalysis.CSharp;
1919
using System.Reflection;
20+
using System.Text;
2021

2122
namespace Microsoft.WebAssembly.Diagnostics
2223
{
@@ -397,9 +398,10 @@ internal static unsafe void PutBytesBE (byte *dest, byte *src, int count)
397398
public override string ReadString()
398399
{
399400
var valueLen = ReadInt32();
400-
char[] value = new char[valueLen];
401+
byte[] value = new byte[valueLen];
401402
Read(value, 0, valueLen);
402-
return new string(value);
403+
404+
return new string(Encoding.UTF8.GetChars(value, 0, valueLen));
403405
}
404406
public unsafe long ReadLong()
405407
{

src/mono/wasm/debugger/DebuggerTestSuite/CustomViewTests.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public class CustomViewTests : DebuggerTestBase
1717
[Fact]
1818
public async Task UsingDebuggerDisplay()
1919
{
20-
var bp = await SetBreakpointInMethod("debugger-test.dll", "DebuggerTests.DebuggerCustomViewTest", "run", 12);
20+
var bp = await SetBreakpointInMethod("debugger-test.dll", "DebuggerTests.DebuggerCustomViewTest", "run", 15);
2121
var pause_location = await EvaluateAndCheck(
2222
"window.setTimeout(function() { invoke_static_method ('[debugger-test] DebuggerTests.DebuggerCustomViewTest:run'); }, 1);",
2323
"dotnet://debugger-test.dll/debugger-custom-view-test.cs",
@@ -29,12 +29,14 @@ public async Task UsingDebuggerDisplay()
2929
CheckObject(locals, "a", "DebuggerTests.WithDisplayString", description:"Some one Value 2 End");
3030
CheckObject(locals, "c", "DebuggerTests.DebuggerDisplayMethodTest", description: "First Int:32 Second Int:43");
3131
CheckObject(locals, "myList", "System.Collections.Generic.List<int>", description: "Count = 4");
32+
CheckObject(locals, "person1", "DebuggerTests.Person", description: "FirstName: Anton, SurName: Mueller, Age: 44");
33+
CheckObject(locals, "person2", "DebuggerTests.Person", description: "FirstName: Lisa, SurName: Müller, Age: 41");
3234
}
3335

3436
[Fact]
3537
public async Task UsingDebuggerTypeProxy()
3638
{
37-
var bp = await SetBreakpointInMethod("debugger-test.dll", "DebuggerTests.DebuggerCustomViewTest", "run", 12);
39+
var bp = await SetBreakpointInMethod("debugger-test.dll", "DebuggerTests.DebuggerCustomViewTest", "run", 15);
3840
var pause_location = await EvaluateAndCheck(
3941
"window.setTimeout(function() { invoke_static_method ('[debugger-test] DebuggerTests.DebuggerCustomViewTest:run'); }, 1);",
4042
"dotnet://debugger-test.dll/debugger-custom-view-test.cs",

src/mono/wasm/debugger/tests/debugger-test/debugger-custom-view-test.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,13 @@ string GetDebuggerDisplay ()
5858
}
5959
}
6060

61+
[DebuggerDisplay("FirstName: {FirstName}, SurName: {SurName}, Age: {Age}")]
62+
public class Person {
63+
public string FirstName { get; set; }
64+
public string SurName { get; set; }
65+
public int Age { get; set; }
66+
}
67+
6168
class DebuggerCustomViewTest
6269
{
6370
public static void run()
@@ -73,6 +80,9 @@ public static void run()
7380
openWith.Add("txt", "notepad");
7481
openWith.Add("bmp", "paint");
7582
openWith.Add("dib", "paint");
83+
var person1 = new Person { FirstName = "Anton", SurName="Mueller", Age = 44};
84+
var person2 = new Person { FirstName = "Lisa", SurName="Müller", Age = 41};
85+
7686
Console.WriteLine("break here");
7787

7888
Console.WriteLine("break here");

0 commit comments

Comments
 (0)