blob: a89c40787253f3c05a2d6884e088729eb2c74c81 [file] [log] [blame]
<html lang="en">
<head>
<title>Asynchronous and non-stop modes - 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-General-Design.html#GDB_002fMI-General-Design" title="GDB/MI General Design">
<link rel="prev" href="Context-management.html#Context-management" title="Context management">
<link rel="next" href="Thread-groups.html#Thread-groups" title="Thread groups">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
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>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="Asynchronous-and-non-stop-modes"></a>
<a name="Asynchronous-and-non_002dstop-modes"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Thread-groups.html#Thread-groups">Thread groups</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="Context-management.html#Context-management">Context management</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="GDB_002fMI-General-Design.html#GDB_002fMI-General-Design">GDB/MI General Design</a>
<hr>
</div>
<h4 class="subsection">27.1.2 Asynchronous command execution and non-stop mode</h4>
<p>On some targets, <span class="sc">gdb</span> is capable of processing MI commands
even while the target is running. This is called <dfn>asynchronous
command execution</dfn> (see <a href="Background-Execution.html#Background-Execution">Background Execution</a>). The frontend may
specify a preferrence for asynchronous execution using the
<code>-gdb-set target-async 1</code> command, which should be emitted before
either running the executable or attaching to the target. After the
frontend has started the executable or attached to the target, it can
find if asynchronous execution is enabled using the
<code>-list-target-features</code> command.
<p>Even if <span class="sc">gdb</span> can accept a command while target is running,
many commands that access the target do not work when the target is
running. Therefore, asynchronous command execution is most useful
when combined with non-stop mode (see <a href="Non_002dStop-Mode.html#Non_002dStop-Mode">Non-Stop Mode</a>). Then,
it is possible to examine the state of one thread, while other threads
are running.
<p>When a given thread is running, MI commands that try to access the
target in the context of that thread may not work, or may work only on
some targets. In particular, commands that try to operate on thread's
stack will not work, on any target. Commands that read memory, or
modify breakpoints, may work or not work, depending on the target. Note
that even commands that operate on global state, such as <code>print</code>,
<code>set</code>, and breakpoint commands, still access the target in the
context of a specific thread, so frontend should try to find a
stopped thread and perform the operation on that thread (using the
&lsquo;<samp><span class="samp">--thread</span></samp>&rsquo; option).
<p>Which commands will work in the context of a running thread is
highly target dependent. However, the two commands
<code>-exec-interrupt</code>, to stop a thread, and <code>-thread-info</code>,
to find the state of a thread, will always work.
</body></html>