Skip to content

blockarchitech/pebble-debug

 
 

Repository files navigation

Pebble Debug

Debug Pebble apps running in the emulator using gdb, right inside Visual Studio Code.

View a video demo of this extension:
Pebble Debug Demo

Configuration

Add a configuration to your launch.json file, like so:

{
    "name": "Debug Aplite",
    "type": "pebble",
    "request": "launch", // See "Configurations" below.
    "platform": "aplite", // or "basalt", "chalk", "diorite", "emery"
    "elfPath": "${workspaceRoot}/build/aplite/app.elf", // Path to the .elf file of your app.
    "workDir": "${workspaceRoot}", // Path to the root of your project.
}

VS Code IntelliSense will also help you fill in the configuration. Simply create a new .vscode/launch.json file and click the "ADD CONFIGURATION" button.

Possible Configurations

  • "request": "launch": Launch the app in the emulator.
    • This will start a new emulator, and it will fail if one is already running with your requested platform.
    • It will also build your app before launching it.
  • "request": "attach": Attach to an already running emulator.
    • This will not build your app before launching it.
    • You must have an emulator running with your requested platform.
    • It will fail if you do not have an emulator running with your requested platform.
  • "platform": "aplite": The platform to run the app on.
    • Possible values are "aplite", "basalt", "chalk", "diorite", "emery".
  • "elfPath": "${workspaceRoot}/build/aplite/app.elf": The path to the .elf file of your app.
    • This is platform-specific. You must provide the correct .elf file for the platform you are targeting.
  • "workDir": "${workspaceRoot}": The path to the root of your project.
    • Generally, this is ${workspaceRoot}.
  • "pebbleDevPath": "~/pebble-dev": The path to your pebble-dev directory.
    • This is where the pebble toolchain is installed.
    • This is optional, and defaults to ~/pebble-dev.
  • sdkCorePath: The path to the core SDK files.
    • This is optional, and defaults to ~/.pebble-sdk/SDKs/current/sdk-core.
  • usePathGDB: Whether to use the GDB in your PATH.
    • This is optional, and defaults to false.
    • If you have GDB in your PATH, you can set this to true to use it.
    • It must be arm-none-eabi-gdb to maintain compatibility with the Pebble SDK.
  • pebbleToolName: The name of the Pebble tool in your path. Usually pebble.
    • This is optional, and defaults to pebble.
    • If you use something like rebbletool, you can set this to rebble.
  • armCSToolsPath: The path to the ARM CS Tools.
    • This is optional, and the extension will try to find it automagically.
    • If you have it installed in a non-standard location, you can set this to the correct path.
    • arm-none-eabi-readelf, arm-none-eabi-objdump and arm-none-eabi-gdb must be in this directory.
    • GDB from this path is ignored and not required if usePathGDB is set to true.

Caveats

  • This is currently a work in progress. Please report any issues you encounter.
  • It sometimes will not kill the emulator when you stop debugging. You may need to manually kill it, or the next time you try to debug, it will fail.
  • It technically may work with multiple emulators running at the same time (integration testing? :D), but it's not recommended as this is not a tested use case.
  • I have no idea if this works on Apple Silicon Macs. It should work, but if you encounter any issues, please open a new issue and I'll look into them. Unfortunately, I don't have an Apple Silicon Mac to test on, but I can assist in debugging any issues you encounter.
  • You currently have to manually pause the debugger, set/remove breakpoints, and continue the debugger. This is a limitation of the current implementation, and will be fixed in the future.
    • It's mainly because the upstream version of this plugin (code-debug) used a promise-based API instead of the async/await API, and adding the auto reload functionality breaks some things downstream. I'm working on changing this to use the async/await API, and then I can add the auto reload functionality. For now, however, you're not losing much functionality, as GDB requires you to manually pause the debugger to set/remove breakpoints anyway.
    • You can also set your breakpoints, and then stop + reload, and that will also work, if that's easier for you.

About

Pebble debugging for VSCode

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 100.0%