Note, if you are looking for a graphical front-end for the
bochs debugger, you may want to check out
BFE. This is a
package written by a Bochs user which can interface with
the text based Bochs debugger.  No linking is necessary.
It's not part of Bochs, but you may find it useful.
You can now conditionally compile in a GDB like command line debugger, that
allows you to set breakpoints, step through instructions, and other
useful functions.  If there isn't a command for something you believe
is generally useful for the debugger, let me know and I'll implement
it if possible.
To use the debugger, you must configure Bochs with the
--enable-debugger and --enable-disasm flags.
For example:
|   ./configure --enable-debugger --enable-disasm | 
Note: You must use flex version 2.5.4 or greater.  I have heard that
version 2.5.2 will not work.
When you first start up Bochs, you will see the command line prompt
From here, you may use the following commands:
|   c                           continue executing
  continue
  s     [count]               execute count instructions, default is 1
  step  [count]
  stepi [count]
  Ctrl-C                      stop execution, and return to command line prompt
  Ctrl-D                      if at empty line on command line, exit
  q                           quit debugger and execution
  quit
  exit | 
|   NOTE: The format of 'seg', 'off', and 'addr' in these descriptions,
        are as follows.  I don't have any way to set the current radix.
        hexidecimal:    0xcdef0123
        decimal:        123456789
        octal:          01234567
  vbreak seg:off              Set a virtual address instruction breakpoint
  vb     seg:off
  lbreak addr                 Set a linear address instruction breakpoint
  lb     addr
  pbreak [*] addr             Set a physical address instruction breakpoint
  pb     [*] addr             (the '*' is optional for GDB compatibility)
  break  [*] addr
  b      [*] addr
  info break                  Display state of all current breakpoints
  bpe    n                    Enable a breakpoint
  bpd    n                    Disable a breakpoint
  delete n                    Delete a breakpoint
  del    n
  d      n
 | 
|   x  /nuf addr      Examine memory at linear address addr
  xp /nuf addr      Examine memory at physical address addr
     n              Count of how many units to display
     u              Unit size; one of
                      b Individual bytes
                      h Halfwords (2 bytes)
                      w Words (4 bytes)
                      g Giant words (8 bytes)
                      NOTE: these are *not* typical Intel nomenclature sizes,
                            but they are consistent with GDB convention.
     f              Printing format.  one of
                      x Print in hexadecimal
                      d Print in decimal
                      u Print in unsigned decimal
                      o Print in octal
                      t Print in binary
    n, f, and u are optional parameters.  u and f default to the last values
    you used, or to w(words) and x(hex) if none have been supplied.
    n currently defaults to 1.  If none of these optional parameters are
    used, no slash should be typed.  addr is also optional.  If you don't
    specify it, it will be the value the next address (as if you had
    specified n+1 in the last x command).
  setpmem addr datasize val    Set physical memory location of size
                               datasize to value val.
  crc  addr1  addr2            Show CRC32 for physical memory range addr1..addr2
  info dirty                   Show physical pages dirtied (written to) since last display
                               Values displayed are the top 20 bits only (page addresses)
 | 
|   info r|reg|regs|registers    List of CPU integer registers and their contents
  info cpu                     List of all CPU registers and their contents
  info fpu                     List of all FPU registers and their contents
  info sse                     List of all SSE registers and their contents
  info mmx                     List of all MMX registers and their contents
  info creg                    Show CR0-CR4 registers and their contents
  info sreg                    Show segment registers and their contents
  info eflags                  Show decoded EFLAGS register
  info break                   Information about current breakpoint status
  info tab                     Show paging address translation | 
|   set reg = expr    Change a CPU register to value of expression.
                    Currently only general purpose registers are supported,
                    you may not change:
                      eflags, eip, cs, ss, ds, es, fs, gs.
    Examples: set eax = 2+2/2
              set esi = 2*eax+ebx
  registers         List of CPU registers and their contents
  regs
  reg
  r | 
|   disassemble start end       Disassemble instructions in given linear address
                              range, inclusive of start, exclusive of end.
                              Use "set $disassemble_size =" to tell
                              debugger desired segment size.  Use a value for
                              end of less than start (or zero) if you only
                              want the first instruction disassembled.
  disassemble switch-mode     Switch between Intel and AT&T disassebly styles
                              for debugger disassembler.
  disassemble size = n        Tell debugger what segment size to use when
                              the "disassemble" command is used.  Use values
                              of 0, 16 or 32 for n.  Value of 0 means
			      "use segment size specified by current CS
			      segment". Default is 0.
  set $auto_disassemble = n   Cause debugger to disassemble current instruction
                              every time execution stops if n=1.  Default is 0.
                              Segment size of current CPU context is used for
                              disassembly, so the "disassemble size" variable is
                              ignored.
  set disassemble on          The same as 'set $auto_disassemble = 1'
  set disassemble off         The same as 'set $auto_disassemble = 0' | 
|   trace on                    Disassemble every executed instruction. Note
                              that instructions which caused exceptions are
                              not really executed, and therefore not traced.
  trace off                   Disable instruction tracing. | 
To use instrumentation features in bochs, you must compile in support for it.
You should build a custom instrumentation library in a separate directory in
the "instrument/" directory.  To tell configure which instrumentation library
you want to use, use the "--enable-instrumentation" option.
The default library consists of a set of stubs, and the following are
equivalent:
|   ./configure [...] --enable-instrumentation
  ./configure [...] --enable-instrumentation="instrument/stubs" | 
You could make a separate directory with your custom library,
for example "instrument/myinstrument", copy the contents of
the "instrument/stubs" directory to it, then customize it.  Use:
|   ./configure [...] --enable-instrumentation="instrument/myinstrument" | 
|   instrument start            calls bx_instr_start()
  instrument stop             calls bx_instr_stop()
  instrument reset            calls bx_instr_reset()
  instrument print            calls bx_instr_print() | 
Print the current time (number of ticks since start of simulation).
Insert a time break point "delta" instructions into the future ("delta" is a 64-bit integer followed by "L", for example 1000L).
Insert a time break point at "time" ("time" is a 64-bit integer followed by "L", for example 1000L).
Record console input to file 
filename. The file consists of
zero or more lines of the form "%s %d %x", where the first word is the
event type, the second is a time stamp and the third is event specific
data.
Playback console input from file 
filename. Additional input can
be given directly in the console window. Events in the file will be
played back at times relative to the time when the playback command
was executed.
Print the 
num words top 16-bit words on the stack. 
Num
words defaults to 16. Only works reliably in protected mode when
the base address of the stack segment is zero.
Stop the simulation (and return to prompt) when a watch point is
encountered.
Do not stop the simulation when watch points are encountered. They will
still be logged.
Print current watch point status.
Remove all watch points.
Insert a read watch point at physical address 
address.
Insert a write watch point at physical address 
address.
Remove read watch point from physical address 
address.
Remove write watch point from physical address 
address.
Toggles CPU mode switch breakpoint.
| load-symbols [global] filename[offset] | 
Load symbols from file 
filename. If the global keyword is
added, then the the symbols will be visible in all contexts for which
symbols have not been loaded. 
Offset (default is 0) is added to
every symbol entry. The symbols are loaded in the current (executing)
context.
The symbol file consists of zero or more lines of the format 
.
|   Toggles show symbolic info (calls to begin with).
  show - shows current show mode
  show mode     - show, when processor switch mode
  show int      - show, when interrupt is happens
  show call     - show, when call is happens
  show ret      - show, when iret is happens
  show off      - toggles off symbolic info
  show dbg-all  - turn on all show flags
  show dbg-none - turn off all show flags | 
 add links
 add links
-  Cosimulation  
-  Instrumentation