Skip to content
sepalani edited this page Sep 14, 2021 · 3 revisions

Dolphin provides a debugger that can be enabled under:

  • Dolphin Settings > Interface > Show Debugging UI

NB: Keep in mind, that this emulator and its debugger are still in development and might not be exempt of bugs.

Prerequisites

Here are some advice to prevent weird things to happen and that might disrupt your debugging experience:

  • Disable dual core mode under Dolphin Settings > General, it avoids random crashes while debugging
  • Symbols map, breakpoints, watches, etc. might not be saved automatically so I strongly advise to save them regularly
  • Some of them are not loaded on boot, you should pause the emulator and load them when needed
  • If possible, pause the game before using debugger's features

For the Japanese version of MH3, you can disable the text flickering bugs by adding these lines to its game config:

[Video_Settings]
SafeTextureCacheColorSamples = 0

Overview

Here is a very simplistic overview of what you can do with Dolphin debugger. Debugger views can be enable under Dolphin menu > View.

Code widget

This widget allows you to see the code being executed like most debuggers. Symbols can be generated via various means. Some contextual options are available with a right-click such as:

  • Patching with Insert blr/nop and Restore/Replace instruction
  • Following branch
  • Create a (non-logging) breakpoint with a left-click at the left of the address column

Thread widget

This widget lists active threads and the properties of each thread. It can be useful for games using lots of thread and switching context often. I don't use this widget a lot for this game.

Register widget

This widget can be used to read value from registers. It can also be used to modify registers, interesting when you want to bypass some security mechanisms.

Memory widget

This widget show a memory panel view on the left. The data type option group can be used to toggle different view of the memory. On top of that, memory dump can be generated from this widget. Searching for string and hex string values can be done using the search bar and specifying the start address.

Network widget

This widget displays the current network state of the emulator with the active network and SSL sockets. It provides dumping features if needed and can be used to tweak some security mechanisms.

Log widgets

The Log configurations widget allows you to choose what to log and its verbosity level. I described what I usually use in another wiki page.

Breakpoint/Watch widgets

These widgets allow you to create watches to inspect address values. Breakpoints can be used to break when an instruction is executed or when a memory address is read from or written to. On top of that, you can also log when a breakpoint is hit.