diff --git a/docs/features/debugging.md b/docs/features/debugging.md index d3069c26..895cb8fc 100644 --- a/docs/features/debugging.md +++ b/docs/features/debugging.md @@ -4,8 +4,77 @@ title: Debugging order: 80 --- -## VSCode Extension +## Install VSCode Extension -You can install our VSCode extension to debug pocketpy scripts. +To debug a pocketpy program, you need to install our VSCode extension first: https://marketplace.visualstudio.com/items?itemName=pocketpy.pocketpy + +## Create a `launch.json` file + +Navigate to the Debug view in VSCode, and click on "create a launch.json file" link. +In the dropdown menu, select "pocketpy". + +![launch_json](../static/debugger/launch_json.png) + +Then a default `launch.json` file will be created in the `.vscode` folder +with a sample pocketpy debug configuration. + +## How does it work? + +pocketpy provides a C-API `py_debugger_waitforattach`, +which starts a debug server and waits for the VSCode extension to attach. +When the debugger is attached, the program will continue to run. + ++ If you are using pocketpy's standalone executable `main.exe`, you can pass `--debug` flag to it. This will automatically call `py_debugger_waitforattach("localhost", 6110)` before running your program. ++ If you are embedding pocketpy as a library, you need to call `py_debugger_waitforattach` manually in your C/C++ code. + +## Configuration + ++ `type`: must be `pocketpy` ++ `request`: can be `attach` or `launch` ++ `name`: the name of this configuration ++ `port`: the port number of the debug server, must match the one in `py_debugger_waitforattach` ++ `host`: the host of the debug server, must match the one in `py_debugger_waitforattach` ++ `sourceFolder`: the root folder of your python source code, default to `${workspaceFolder}`. However, +sometimes you may run your program from a subfolder, in this case you need to set `sourceFolder` to the correct path. If this is not set correctly, breakpoints will not be hit. ++ `program`: (for launch mode only) the path to the executable file which calls `py_debugger_waitforattach`, e.g. the pocketpy standalone executable `main.exe`. ++ `args`: (for launch mode only) the arguments to pass to the executable file, e.g. `--debug` and the script path if you are using `main.exe`. ++ `cwd`: (for launch mode only) the working directory to launch the executable file, default to `${workspaceFolder}`. + +### For attach mode + +In this mode, you need to start your pocketpy program manually which must call `py_debugger_waitforattach` first. +After the program starts, you can let VSCode attach to the debug server. + +```json +{ + "type": "pocketpy", + "request": "attach", + "name": "Attach to pocketpy program", + "port": 6110, + "host": "localhost", + "sourceFolder": "${workspaceFolder}" +} +``` + +### For launch mode + +In this mode, VSCode will start your program with the specified `program`, `args` and `cwd`. +After the program starts, VSCode attempts to attach to the debug server automatically. + +```json +{ + "type": "pocketpy", + "request": "launch", + "name": "Launch pocketpy program", + "port": 6110, + "host": "localhost", + "sourceFolder": "${workspaceFolder}", + "program": "${workspaceFolder}/pocketpy/main.exe", + "args": [ + "--debug" + ], + "cwd": "${workspaceFolder}" +} +``` \ No newline at end of file diff --git a/docs/retype.yml b/docs/retype.yml index 89232f96..7d05eb7e 100644 --- a/docs/retype.yml +++ b/docs/retype.yml @@ -3,7 +3,7 @@ output: .retype url: https://pocketpy.dev branding: title: pocketpy - label: v2.1.0 + label: v2.1.1 logo: "./static/logo.png" favicon: "./static/logo.png" meta: diff --git a/docs/static/debugger/launch_json.png b/docs/static/debugger/launch_json.png new file mode 100644 index 00000000..540aebbe Binary files /dev/null and b/docs/static/debugger/launch_json.png differ