Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 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
12 changes: 4 additions & 8 deletions src/mono/mono/component/mini-wasm-debugger.c
Original file line number Diff line number Diff line change
Expand Up @@ -361,9 +361,7 @@ EMSCRIPTEN_KEEPALIVE gboolean
mono_wasm_send_dbg_command_with_parms (int id, MdbgProtCommandSet command_set, int command, guint8* data, unsigned int size, int valtype, char* newvalue)
{
if (!debugger_enabled) {
EM_ASM ({
MONO.mono_wasm_add_dbg_command_received ($0, $1, $2, $3);
}, 0, id, 0, 0);
mono_wasm_add_dbg_command_received (0, id, 0, 0);
return TRUE;
}
MdbgProtBuffer bufWithParms;
Expand All @@ -382,9 +380,7 @@ EMSCRIPTEN_KEEPALIVE gboolean
mono_wasm_send_dbg_command (int id, MdbgProtCommandSet command_set, int command, guint8* data, unsigned int size)
{
if (!debugger_enabled) {
EM_ASM ({
MONO.mono_wasm_add_dbg_command_received ($0, $1, $2, $3);
}, 0, id, 0, 0);
mono_wasm_add_dbg_command_received(0, id, 0, 0);
return TRUE;
}
ss_calculate_framecount (NULL, NULL, TRUE, NULL, NULL);
Expand All @@ -403,7 +399,7 @@ mono_wasm_send_dbg_command (int id, MdbgProtCommandSet command_set, int command,
else
error = mono_process_dbg_packet (id, command_set, command, &no_reply, data, data + size, &buf);

mono_wasm_add_dbg_command_received(error == MDBGPROT_ERR_NONE, id, buf.buf, buf.p-buf.buf);
mono_wasm_add_dbg_command_received (error == MDBGPROT_ERR_NONE, id, buf.buf, buf.p-buf.buf);

buffer_free (&buf);
return TRUE;
Expand All @@ -412,7 +408,7 @@ mono_wasm_send_dbg_command (int id, MdbgProtCommandSet command_set, int command,
static gboolean
receive_debugger_agent_message (void *data, int len)
{
mono_wasm_add_dbg_command_received(1, -1, data, len);
mono_wasm_add_dbg_command_received(1, 0, data, len);
mono_wasm_save_thread_context();
mono_wasm_fire_debugger_agent_message ();
return FALSE;
Expand Down
12 changes: 8 additions & 4 deletions src/mono/wasm/debugger/BrowserDebugProxy/MonoSDBHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -700,7 +700,7 @@ public PointerValue(long address, int typeId, string varName)
internal class MonoSDBHelper
{
private static int debuggerObjectId;
private static int cmdId;
private static int cmdId = 1;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cmdId == 0 is a special one now. Can you add a comment for that here?

private static int GetId() {return cmdId++;}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we rename this to GetNewId?

private static int MINOR_VERSION = 61;
private static int MAJOR_VERSION = 2;
Expand Down Expand Up @@ -2180,6 +2180,7 @@ public async Task<JArray> GetValueTypeProxy(int valueTypeId, CancellationToken t
command = CmdVM.InvokeMethod,
buffer = data,
length = length,
id = GetId()
}),
name = propertyNameStr
}));
Expand Down Expand Up @@ -2505,7 +2506,8 @@ async Task<JArray> GetFieldsValues(List<FieldTypeClass> fields, bool isOwn, bool
command = CmdObject.RefSetValues,
buffer = data,
valtype,
length = length
length,
id = GetId()
}));
}
if (!isRootHidden)
Expand Down Expand Up @@ -2636,7 +2638,8 @@ public async Task<JArray> GetObjectProxy(int objectId, CancellationToken token)
command = CmdVM.InvokeMethod,
buffer = data,
valtype = attr["set"]["valtype"],
length = length
length,
id = GetId()
});
}
continue;
Expand All @@ -2655,7 +2658,8 @@ public async Task<JArray> GetObjectProxy(int objectId, CancellationToken token)
commandSet = CommandSet.Vm,
command = CmdVM.InvokeMethod,
buffer = data,
length = length
length = length,
id = GetId()
}),
name = propertyNameStr
}));
Expand Down
19 changes: 11 additions & 8 deletions src/mono/wasm/runtime/debug.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { toBase64StringImpl } from "./base64";
import cwraps from "./cwraps";
import { VoidPtr, CharPtr } from "./types/emscripten";

let commands_received: CommandResponse;
const commands_received = new Map<number, CommandResponse>();
let _call_function_res_cache: any = {};
let _next_call_function_res_id = 0;
let _debugger_buffer_len = -1;
Expand Down Expand Up @@ -43,7 +43,7 @@ export function mono_wasm_add_dbg_command_received(res_ok: boolean, id: number,
value: base64String
}
};
commands_received = buffer_obj;
commands_received.set(id, buffer_obj);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Check if there is an existing entry for id.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And if there is, should I print a warning?

}

function mono_wasm_malloc_and_set_debug_buffer(command_parameters: string) {
Expand All @@ -63,7 +63,8 @@ export function mono_wasm_send_dbg_command_with_parms(id: number, command_set: n
mono_wasm_malloc_and_set_debug_buffer(command_parameters);
cwraps.mono_wasm_send_dbg_command_with_parms(id, command_set, command, _debugger_buffer, length, valtype, newvalue.toString());

const { res_ok, res } = commands_received;
const { res_ok, res } = commands_received.get(id) as CommandResponse;
commands_received.delete(id);

@lewing lewing Feb 1, 2022

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd suggest making a method that combines get and delete

if (!res_ok)
throw new Error("Failed on mono_wasm_invoke_method_debugger_agent_with_parms");
return res;
Expand All @@ -73,15 +74,17 @@ export function mono_wasm_send_dbg_command(id: number, command_set: number, comm
mono_wasm_malloc_and_set_debug_buffer(command_parameters);
cwraps.mono_wasm_send_dbg_command(id, command_set, command, _debugger_buffer, command_parameters.length);

const { res_ok, res } = commands_received;
const { res_ok, res } = commands_received.get(id) as CommandResponse;
commands_received.delete(id);
if (!res_ok)
throw new Error("Failed on mono_wasm_send_dbg_command");
return res;

}

export function mono_wasm_get_dbg_command_info(): CommandResponseResult {
const { res_ok, res } = commands_received;
const { res_ok, res } = commands_received.get(0) as CommandResponse;
commands_received.delete(0);
if (!res_ok)
throw new Error("Failed on mono_wasm_get_dbg_command_info");
return res;
Expand Down Expand Up @@ -134,10 +137,10 @@ function _create_proxy_from_object_id(objectId: string, details: any) {
prop.name,
{
get() {
return mono_wasm_send_dbg_command(-1, prop.get.commandSet, prop.get.command, prop.get.buffer);
return mono_wasm_send_dbg_command(prop.get.id, prop.get.commandSet, prop.get.command, prop.get.buffer);
},
set: function (newValue) {
mono_wasm_send_dbg_command_with_parms(-1, prop.set.commandSet, prop.set.command, prop.set.buffer, prop.set.length, prop.set.valtype, newValue); return commands_received.res_ok;
mono_wasm_send_dbg_command_with_parms(prop.set.id, prop.set.commandSet, prop.set.command, prop.set.buffer, prop.set.length, prop.set.valtype, newValue); return true;
}
}
);
Expand All @@ -149,7 +152,7 @@ function _create_proxy_from_object_id(objectId: string, details: any) {
return prop.value;
},
set: function (newValue) {
mono_wasm_send_dbg_command_with_parms(-1, prop.set.commandSet, prop.set.command, prop.set.buffer, prop.set.length, prop.set.valtype, newValue); return commands_received.res_ok;
mono_wasm_send_dbg_command_with_parms(prop.set.id, prop.set.commandSet, prop.set.command, prop.set.buffer, prop.set.length, prop.set.valtype, newValue); return true;
}
}
);
Expand Down