This extension allows debugging Lua code and using the Source engine console of Garry's Mod clients or SRCDS (SouRCe Dedicated Server) instances, through Visual Studio Code.
This works by running a remote debugging server on SRCDS listening on a port. The VSCode extension is then used to attach a debugger to provide breakpoints.
This fork works only with the Garry's Mod module danielga/gm_rdb.
Based on the work from satoren/vscode-lrdb and kapecp/vscode-lrdb.
- Supports Windows, macOS and Linux
- Add/remove breakpoints
- Conditional breakpoints
- Continue, pause, step over, step in, step out
- Local, global, _ENV, upvalue variables and arguments
- Watch window
- Evaluate expressions
- Remote debugging over TCP
- Garry's Mod Remote Debugger binary modules
- SRCDS 32-bit or 64-bit
Be sure to use 64-bit or 32-bit modules on the respective platforms, otherwise the modules will not be loaded.
For this example, we're using SRCDS from the x86-64
beta branch on Windows.
The server will freeze until we attach the debugger through VSCode and resume.
- Place the
gmsv_rdb_win64.dll
binary module ingarrysmod/lua/bin
- guide - (Optional) Add the following snippet wherever we want to start the server
-- Fetch the remote debugging server binary module
require("rdb")
-- Start a debugging server
-- This will pause the server until we attach a debugger
-- Listens on port 21111 by default, use the first argument to change it
rdb.activate()
Feel free to use variables like workspaceFolder
to specify paths as a shortcut.
launch.json
example:
{
"version": "0.2.0",
"configurations": [
{
"type": "gmrdb",
"request": "attach",
"host": "127.0.0.1",
"port": 21111,
"name": "Attach to Garry's Mod",
"sourceRoot": "C:/example-srcds/garrysmod",
// Important to map Lua source code to breakpoints
// (otherwise we'll see missing file errors on VSCode)
"sourceFileMap": {
// Local absolute path: remote path
"C:/example-srcds/garrysmod/addons/exampleaddon": "addons/exampleaddon",
"C:/example-srcds/garrysmod/gamemode/examplerp": "gamemodes/examplerp"
},
"stopOnEntry": true
},
{
"type": "gmrdb",
"request": "launch",
"name": "Launch Garry's Mod",
"program": "C:/example-srcds/srcds_win64.exe",
"cwd": "C:/example-srcds",
"args": [
"-console",
"-game",
"garrysmod",
"-ip",
"127.0.0.1",
"-port",
"27015",
"+map",
"gm_construct",
"+maxplayers",
"2"
],
"sourceRoot": "C:/example-srcds/garrysmod",
"port": 21111,
"sourceFileMap": {
"C:/example-srcds/garrysmod/addons/test2": "addons/test2",
"C:/example-srcds/garrysmod/gamemode/examplerp": "gamemodes/examplerp"
},
"stopOnEntry": true
}
]
}
This follows similar steps to server-side debugging on Windows 64-bit.
The client will freeze until we attach the debugger through VSCode and resume.
It is possible to join a server that will load the module on your client. Just be wary if this is what you want, since ANY server can do this. The only effect of this should be your game freezing until you attach a debugger on it. Someone else remotely debugging your game should be considered a bug!
- Place the
gmcl_rdb_win64.dll
binary module ingarrysmod/lua/bin
in our local Garry's Mod installation - guide - (Optional) Add the following snippet wherever we want to start the debugging server
-- Fetch the remote debugging server binary module
require("rdb")
-- Start a debugging server
-- This will pause the server until we attach a debugger
-- Listens on port 21111 by default, use the first argument to change it
rdb.activate()
Feel free to use variables like workspaceFolder
to specify paths as a shortcut.
launch.json
example:
{
"version": "0.2.0",
"configurations": [
{
"type": "gmrdb",
"request": "attach",
"host": "127.0.0.1",
"port": 21111,
"name": "Attach to Garry's Mod",
"sourceRoot": "C:/steamapps/common/garrysmod",
// Important to map Lua source code to breakpoints
// (otherwise we'll see missing file errors on VSCode)
"sourceFileMap": {
// Local absolute path: remote path
"C:/steamapps/common/garrysmod/addons/exampleaddon": "addons/exampleaddon",
"C:/steamapps/common/garrysmod/gamemode/examplerp": "gamemodes/examplerp"
},
"stopOnEntry": true
}
]
}