blob: 8ab8a9ebf8d6c3ba284089c61ce228f7f212b2f6 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1988-2015 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." -->
<!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
<head>
<title>Debugging with GDB: Calling</title>
<meta name="description" content="Debugging with GDB: Calling">
<meta name="keywords" content="Debugging with GDB: Calling">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Concept-Index.html#Concept-Index" rel="index" title="Concept Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Altering.html#Altering" rel="up" title="Altering">
<link href="Patching.html#Patching" rel="next" title="Patching">
<link href="Returning.html#Returning" rel="prev" title="Returning">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>
</head>
<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="Calling"></a>
<div class="header">
<p>
Next: <a href="Patching.html#Patching" accesskey="n" rel="next">Patching</a>, Previous: <a href="Returning.html#Returning" accesskey="p" rel="prev">Returning</a>, Up: <a href="Altering.html#Altering" accesskey="u" rel="up">Altering</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Calling-Program-Functions"></a>
<h3 class="section">17.5 Calling Program Functions</h3>
<dl compact="compact">
<dd><a name="index-calling-functions"></a>
<a name="index-inferior-functions_002c-calling"></a>
</dd>
<dt><code>print <var>expr</var></code></dt>
<dd><p>Evaluate the expression <var>expr</var> and display the resulting value.
The expression may include calls to functions in the program being
debugged.
</p>
<a name="index-call"></a>
</dd>
<dt><code>call <var>expr</var></code></dt>
<dd><p>Evaluate the expression <var>expr</var> without displaying <code>void</code>
returned values.
</p>
<p>You can use this variant of the <code>print</code> command if you want to
execute a function from your program that does not return anything
(a.k.a. <em>a void function</em>), but without cluttering the output
with <code>void</code> returned values that <small>GDB</small> will otherwise
print. If the result is not void, it is printed and saved in the
value history.
</p></dd>
</dl>
<p>It is possible for the function you call via the <code>print</code> or
<code>call</code> command to generate a signal (e.g., if there&rsquo;s a bug in
the function, or if you passed it incorrect arguments). What happens
in that case is controlled by the <code>set unwindonsignal</code> command.
</p>
<p>Similarly, with a C<tt>++</tt> program it is possible for the function you
call via the <code>print</code> or <code>call</code> command to generate an
exception that is not handled due to the constraints of the dummy
frame. In this case, any exception that is raised in the frame, but has
an out-of-frame exception handler will not be found. GDB builds a
dummy-frame for the inferior function call, and the unwinder cannot
seek for exception handlers outside of this dummy-frame. What happens
in that case is controlled by the
<code>set unwind-on-terminating-exception</code> command.
</p>
<dl compact="compact">
<dt><code>set unwindonsignal</code></dt>
<dd><a name="index-set-unwindonsignal"></a>
<a name="index-unwind-stack-in-called-functions"></a>
<a name="index-call-dummy-stack-unwinding"></a>
<p>Set unwinding of the stack if a signal is received while in a function
that <small>GDB</small> called in the program being debugged. If set to on,
<small>GDB</small> unwinds the stack it created for the call and restores
the context to what it was before the call. If set to off (the
default), <small>GDB</small> stops in the frame where the signal was
received.
</p>
</dd>
<dt><code>show unwindonsignal</code></dt>
<dd><a name="index-show-unwindonsignal"></a>
<p>Show the current setting of stack unwinding in the functions called by
<small>GDB</small>.
</p>
</dd>
<dt><code>set unwind-on-terminating-exception</code></dt>
<dd><a name="index-set-unwind_002don_002dterminating_002dexception"></a>
<a name="index-unwind-stack-in-called-functions-with-unhandled-exceptions"></a>
<a name="index-call-dummy-stack-unwinding-on-unhandled-exception_002e"></a>
<p>Set unwinding of the stack if a C<tt>++</tt> exception is raised, but left
unhandled while in a function that <small>GDB</small> called in the program being
debugged. If set to on (the default), <small>GDB</small> unwinds the stack
it created for the call and restores the context to what it was before
the call. If set to off, <small>GDB</small> the exception is delivered to
the default C<tt>++</tt> exception handler and the inferior terminated.
</p>
</dd>
<dt><code>show unwind-on-terminating-exception</code></dt>
<dd><a name="index-show-unwind_002don_002dterminating_002dexception"></a>
<p>Show the current setting of stack unwinding in the functions called by
<small>GDB</small>.
</p>
</dd>
</dl>
<a name="index-weak-alias-functions"></a>
<p>Sometimes, a function you wish to call is actually a <em>weak alias</em>
for another function. In such case, <small>GDB</small> might not pick up
the type information, including the types of the function arguments,
which causes <small>GDB</small> to call the inferior function incorrectly.
As a result, the called function will function erroneously and may
even crash. A solution to that is to use the name of the aliased
function instead.
</p>
<hr>
<div class="header">
<p>
Next: <a href="Patching.html#Patching" accesskey="n" rel="next">Patching</a>, Previous: <a href="Returning.html#Returning" accesskey="p" rel="prev">Returning</a>, Up: <a href="Altering.html#Altering" accesskey="u" rel="up">Altering</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
</div>
</body>
</html>