toolchain/share/doc/gdb/GDB_002fMI-Development-and-...

129 lines
6.0 KiB
HTML
Raw Permalink Normal View History

2024-01-10 05:24:32 +00:00
<html lang="en">
<head>
<title>GDB/MI Development and Front Ends - Debugging with GDB</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Debugging with GDB">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="GDB_002fMI.html#GDB_002fMI" title="GDB/MI">
<link rel="prev" href="GDB_002fMI-Compatibility-with-CLI.html#GDB_002fMI-Compatibility-with-CLI" title="GDB/MI Compatibility with CLI">
<link rel="next" href="GDB_002fMI-Output-Records.html#GDB_002fMI-Output-Records" title="GDB/MI Output Records">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
Copyright (C) 1988-2019 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``Free Software'' and ``Free Software Needs
Free Documentation'', with the Front-Cover Texts being ``A GNU Manual,''
and with the Back-Cover Texts as in (a) below.
(a) The FSF's Back-Cover Text is: ``You are free to copy and modify
this GNU Manual. Buying copies from GNU Press supports the FSF in
developing GNU and promoting software freedom.''
-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
</head>
<body>
<div class="node">
<a name="GDB%2fMI-Development-and-Front-Ends"></a>
<a name="GDB_002fMI-Development-and-Front-Ends"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="GDB_002fMI-Output-Records.html#GDB_002fMI-Output-Records">GDB/MI Output Records</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="GDB_002fMI-Compatibility-with-CLI.html#GDB_002fMI-Compatibility-with-CLI">GDB/MI Compatibility with CLI</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="GDB_002fMI.html#GDB_002fMI">GDB/MI</a>
<hr>
</div>
<h3 class="section">27.4 <span class="sc">gdb/mi</span> Development and Front Ends</h3>
<p><a name="index-g_t_0040sc_007bgdb_002fmi_007d-development-2966"></a>
The application which takes the MI output and presents the state of the
program being debugged to the user is called a <dfn>front end</dfn>.
<p>Since <span class="sc">gdb/mi</span> is used by a variety of front ends to <span class="sc">gdb</span>, changes
to the MI interface may break existing usage. This section describes how the
protocol changes and how to request previous version of the protocol when it
does.
<p>Some changes in MI need not break a carefully designed front end, and
for these the MI version will remain unchanged. The following is a
list of changes that may occur within one level, so front ends should
parse MI output in a way that can handle them:
<ul>
<li>New MI commands may be added.
<li>New fields may be added to the output of any MI command.
<li>The range of values for fields with specified values, e.g.,
<code>in_scope</code> (see <a href="_002dvar_002dupdate.html#g_t_002dvar_002dupdate">-var-update</a>) may be extended.
<!-- The format of field's content e.g type prefix, may change so parse it -->
<!-- at your own risk. Yes, in general? -->
<!-- The order of fields may change? Shouldn't really matter but it might -->
<!-- resolve inconsistencies. -->
</ul>
<p>If the changes are likely to break front ends, the MI version level
will be increased by one. The new versions of the MI protocol are not compatible
with the old versions. Old versions of MI remain available, allowing front ends
to keep using them until they are modified to use the latest MI version.
<p>Since <code>--interpreter=mi</code> always points to the latest MI version, it is
recommended that front ends request a specific version of MI when launching
<span class="sc">gdb</span> (e.g. <code>--interpreter=mi2</code>) to make sure they get an
interpreter with the MI version they expect.
<p>The following table gives a summary of the the released versions of the MI
interface: the version number, the version of GDB in which it first appeared
and the breaking changes compared to the previous version.
<p><table summary=""><tr align="left"><th valign="top" width="5%">MI version </th><th valign="top" width="5%">GDB version </th><th valign="top" width="90%">Breaking changes
<p><br></th></tr><tr align="left"><td valign="top" width="5%"><div align="center">1</div>
<p></td><td valign="top" width="5%">
<div align="center">5.1</div>
<p></td><td valign="top" width="90%">
None
<p><br></td></tr><tr align="left"><td valign="top" width="5%"><div align="center">2</div>
<p></td><td valign="top" width="5%">
<div align="center">6.0</div>
<p></td><td valign="top" width="90%">
<ul>
<li>The <code>-environment-pwd</code>, <code>-environment-directory</code> and
<code>-environment-path</code> commands now returns values using the MI output
syntax, rather than CLI output syntax.
<li><code>-var-list-children</code>'s <code>children</code> result field is now a list, rather
than a tuple.
<li><code>-var-update</code>'s <code>changelist</code> result field is now a list, rather than
a tuple.
</ul>
<br></td></tr></table>
<p>The best way to avoid unexpected changes in MI that might break your front
end is to make your project known to <span class="sc">gdb</span> developers and
follow development on <a href="mailto:gdb@sourceware.org">gdb@sourceware.org</a> and
<a href="mailto:gdb-patches@sourceware.org">gdb-patches@sourceware.org</a>.
<a name="index-mailing-lists-2967"></a>
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
</body></html>