Add Debugging with LLDB
							parent
							
								
									7c4c3d9d48
								
							
						
					
					
						commit
						be84b89b20
					
				|  | @ -0,0 +1,42 @@ | |||
| # Debugging with LLDB | ||||
| 
 | ||||
| Lemur can be used as a server for the gdb/lldb debuggers. If you're a homebrew developer, this gives you a rich source-level debugging experience for your C, C++, Rust, or assembly games. If you're reverse-engineering commercial games, it does a passable job at debugging ROMs without source code. | ||||
| 
 | ||||
| ## Setting up LLDB | ||||
| 
 | ||||
| To debug Virtual Boy games, you need a version of gdb or lldb built to target the Virtual Boy. The llvm-v810 compiler comes with a working version of lldb. At this time, there is no compatible version of gdb, so just use lldb. | ||||
| 
 | ||||
| 1. Download the latest [llvm-v810 compiler](https://github.com/SupernaviX/v810-llvm/releases) for your OS (Windows, Darwin/Mac, or Linux). | ||||
| 2. On closer inspection, lldb isn't getting bundled in there. Gotta fix that. Sorry whoever's reading this, either compile llvm yourself or give me a few days to fix it. | ||||
| 
 | ||||
| ## Compiling with debug info | ||||
| 
 | ||||
| To use source-level debugging, you must compile debug info into your game. To do this, simply add `-g` to your `CFLAGS`. | ||||
| 
 | ||||
| The `-g` flag is supported in | ||||
| * [v810-gcc](https://github.com/jbrandwood/v810-gcc) v4.9.4 | ||||
| * [v810-llvm](https://github.com/SupernaviX/v810-llvm/releases) | ||||
| 
 | ||||
| Note that VUEngine Studio uses an older version of v810-gcc, so source-level debugging doesn't work for VUEngine games. This will be fixed Eventually™️. | ||||
| 
 | ||||
| This debug info will be added to your game's `.elf` file, but stripped from the final `.vb` file. This means compiling with `-g` won't make your ROM bigger or slower. | ||||
| 
 | ||||
| ## Running the server | ||||
| 
 | ||||
| To run the server, you can go to "Tools > GDB Server" and click Start.  It will run on port 8080 by default. You can also pass `--debug-port 8080` on the command line, to run the server as soon as the app starts. Your game will be paused until the debugger connects. | ||||
| 
 | ||||
| ## Command-line debugging with lldb | ||||
| 
 | ||||
| You can use lldb as a command-line tool. To do this, pass your game's `.elf` file to lldb, and tell it to connect to Lemur on startup: | ||||
| ```sh | ||||
| lldb /path/to/your/game.elf -o "process connect connect://127.0.0.1:8080" | ||||
| ``` | ||||
| You can also run lldb without an `.elf` file, but it'll be missing a lot of features (like variable inspection and call stack visualization) if you do. | ||||
| ```sh | ||||
| lldb -o "process connect connect://127.0.0.1:8080" | ||||
| ``` | ||||
| At this point you can debug your game like any program. See [this lldb tutorial](https://lldb.llvm.org/use/tutorial.html) for some examples of what you can do. | ||||
| 
 | ||||
| ## VSCode integration with lldb-dap | ||||
| 
 | ||||
| TODO: write this up tomorrow it's like 2am | ||||
		Loading…
	
		Reference in New Issue