diff --git a/src/debugger/godot3/server_controller.ts b/src/debugger/godot3/server_controller.ts index 85801bdf8..4dda105ef 100644 --- a/src/debugger/godot3/server_controller.ts +++ b/src/debugger/godot3/server_controller.ts @@ -377,10 +377,16 @@ export class ServerController { break; } case "message:inspect_object": { - const id = BigInt(command.parameters[0]); + let id = BigInt(command.parameters[0]); const className: string = command.parameters[1]; const properties: any[] = command.parameters[2]; + // message:inspect_object returns the id as an unsigned 64 bit integer, but it is decoded as a signed 64 bit integer, + // thus we need to convert it to its equivalent unsigned value here. + if (id < 0) { + id = id + BigInt(2) ** BigInt(64); + } + const rawObject = new RawObject(className); properties.forEach((prop) => { rawObject.set(prop[0], prop[5]); diff --git a/src/debugger/godot4/server_controller.ts b/src/debugger/godot4/server_controller.ts index 3c833bb7d..724e11e97 100644 --- a/src/debugger/godot4/server_controller.ts +++ b/src/debugger/godot4/server_controller.ts @@ -376,10 +376,16 @@ export class ServerController { break; } case "scene:inspect_object": { - const id = BigInt(command.parameters[0]); + let id = BigInt(command.parameters[0]); const className: string = command.parameters[1]; const properties: any[] = command.parameters[2]; + // message:inspect_object returns the id as an unsigned 64 bit integer, but it is decoded as a signed 64 bit integer, + // thus we need to convert it to its equivalent unsigned value here. + if (id < 0) { + id = id + BigInt(2) ** BigInt(64); + } + const rawObject = new RawObject(className); properties.forEach((prop) => { rawObject.set(prop[0], prop[5]);