annotate: Limitations

 
 2 Limitations of the Annotation Interface
 *****************************************
 
 The level two annotations mechanism is known to have a number of
 technical and architectural limitations.  As a consequence, in 2001,
 with the release of GDB 5.1 and the addition of GDB/MI, the annotation
 interface was marked as deprecated.
 
    This chapter discusses the known problems.
 
 2.1 Dependant on CLI output
 ===========================
 
 The annotation interface works by interspersing markups with GDB normal
 command-line interpreter output.  Unfortunately, this makes the
 annotation client dependant on not just the annotations, but also the
 CLI output.  This is because the client is forced to assume that
 specific GDB commands provide specific information.  Any change to GDB's
 CLI output modifies or removes that information and, consequently,
 likely breaks the client.
 
    Since the GDB/MI output is independent of the CLI, it does not have
 this problem.
 
 2.2 Scalability
 ===============
 
 Annotations::) and the display mechanism as a way of obtaining
 up-to-date value information.  These mechanisms are not scalable.
 
    In a graphical environment, where many values can be displayed
 simultaneously, a serious performance problem occurs when the client
 tries to first extract from GDB, and then re-display, all those values.
 The client should instead only request and update the values that
 changed.
 
    The GDB/MI Variable Objects provide just that mechanism.
 
 2.3 Correctness
 ===============
 
 The annotation interface assumes that a variable's value can only be
 changed when the target is running.  This assumption is not correct.  A
 single assignment to a single variable can result in the entire target,
 and all displayed values, needing an update.
 
    The GDB/MI Variable Objects include a mechanism for efficiently
 reporting such changes.
 
 2.4 Reliability
 ===============
 
 The GDB/MI interface includes a dedicated test directory ('gdb/gdb.mi'),
 and any addition or fix to GDB/MI must include testsuite changes.
 
 2.5 Maintainability
 ===================
 
 The annotation mechanism was implemented by interspersing CLI print
 statements with various annotations.  As a consequence, any CLI output
 change can alter the annotation output.
 
    Since the GDB/MI output is independent of the CLI, and the GDB/MI is
 increasingly implemented independent of the CLI code, its long term
 maintenance is much easier.