Inline-Functions.html 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  2. <html>
  3. <!-- Copyright (C) 1988-2020 Free Software Foundation, Inc.
  4. Permission is granted to copy, distribute and/or modify this document
  5. under the terms of the GNU Free Documentation License, Version 1.3 or
  6. any later version published by the Free Software Foundation; with the
  7. Invariant Sections being "Free Software" and "Free Software Needs
  8. Free Documentation", with the Front-Cover Texts being "A GNU Manual,"
  9. and with the Back-Cover Texts as in (a) below.
  10. (a) The FSF's Back-Cover Text is: "You are free to copy and modify
  11. this GNU Manual. Buying copies from GNU Press supports the FSF in
  12. developing GNU and promoting software freedom." -->
  13. <!-- Created by GNU Texinfo 5.1, http://www.gnu.org/software/texinfo/ -->
  14. <head>
  15. <title>Debugging with GDB: Inline Functions</title>
  16. <meta name="description" content="Debugging with GDB: Inline Functions">
  17. <meta name="keywords" content="Debugging with GDB: Inline Functions">
  18. <meta name="resource-type" content="document">
  19. <meta name="distribution" content="global">
  20. <meta name="Generator" content="makeinfo">
  21. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  22. <link href="index.html#Top" rel="start" title="Top">
  23. <link href="Concept-Index.html#Concept-Index" rel="index" title="Concept Index">
  24. <link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
  25. <link href="Optimized-Code.html#Optimized-Code" rel="up" title="Optimized Code">
  26. <link href="Tail-Call-Frames.html#Tail-Call-Frames" rel="next" title="Tail Call Frames">
  27. <link href="Optimized-Code.html#Optimized-Code" rel="previous" title="Optimized Code">
  28. <style type="text/css">
  29. <!--
  30. a.summary-letter {text-decoration: none}
  31. blockquote.smallquotation {font-size: smaller}
  32. div.display {margin-left: 3.2em}
  33. div.example {margin-left: 3.2em}
  34. div.indentedblock {margin-left: 3.2em}
  35. div.lisp {margin-left: 3.2em}
  36. div.smalldisplay {margin-left: 3.2em}
  37. div.smallexample {margin-left: 3.2em}
  38. div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
  39. div.smalllisp {margin-left: 3.2em}
  40. kbd {font-style:oblique}
  41. pre.display {font-family: inherit}
  42. pre.format {font-family: inherit}
  43. pre.menu-comment {font-family: serif}
  44. pre.menu-preformatted {font-family: serif}
  45. pre.smalldisplay {font-family: inherit; font-size: smaller}
  46. pre.smallexample {font-size: smaller}
  47. pre.smallformat {font-family: inherit; font-size: smaller}
  48. pre.smalllisp {font-size: smaller}
  49. span.nocodebreak {white-space:nowrap}
  50. span.nolinebreak {white-space:nowrap}
  51. span.roman {font-family:serif; font-weight:normal}
  52. span.sansserif {font-family:sans-serif; font-weight:normal}
  53. ul.no-bullet {list-style: none}
  54. -->
  55. </style>
  56. </head>
  57. <body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
  58. <a name="Inline-Functions"></a>
  59. <div class="header">
  60. <p>
  61. Next: <a href="Tail-Call-Frames.html#Tail-Call-Frames" accesskey="n" rel="next">Tail Call Frames</a>, Up: <a href="Optimized-Code.html#Optimized-Code" accesskey="u" rel="up">Optimized Code</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>
  62. </div>
  63. <hr>
  64. <a name="Inline-Functions-1"></a>
  65. <h3 class="section">11.1 Inline Functions</h3>
  66. <a name="index-inline-functions_002c-debugging"></a>
  67. <p><em>Inlining</em> is an optimization that inserts a copy of the function
  68. body directly at each call site, instead of jumping to a shared
  69. routine. <small>GDB</small> displays inlined functions just like
  70. non-inlined functions. They appear in backtraces. You can view their
  71. arguments and local variables, step into them with <code>step</code>, skip
  72. them with <code>next</code>, and escape from them with <code>finish</code>.
  73. You can check whether a function was inlined by using the
  74. <code>info frame</code> command.
  75. </p>
  76. <p>For <small>GDB</small> to support inlined functions, the compiler must
  77. record information about inlining in the debug information &mdash;
  78. <small>GCC</small> using the <small>DWARF 2</small> format does this, and several
  79. other compilers do also. <small>GDB</small> only supports inlined functions
  80. when using <small>DWARF 2</small>. Versions of <small>GCC</small> before 4.1
  81. do not emit two required attributes (&lsquo;<samp>DW_AT_call_file</samp>&rsquo; and
  82. &lsquo;<samp>DW_AT_call_line</samp>&rsquo;); <small>GDB</small> does not display inlined
  83. function calls with earlier versions of <small>GCC</small>. It instead
  84. displays the arguments and local variables of inlined functions as
  85. local variables in the caller.
  86. </p>
  87. <p>The body of an inlined function is directly included at its call site;
  88. unlike a non-inlined function, there are no instructions devoted to
  89. the call. <small>GDB</small> still pretends that the call site and the
  90. start of the inlined function are different instructions. Stepping to
  91. the call site shows the call site, and then stepping again shows
  92. the first line of the inlined function, even though no additional
  93. instructions are executed.
  94. </p>
  95. <p>This makes source-level debugging much clearer; you can see both the
  96. context of the call and then the effect of the call. Only stepping by
  97. a single instruction using <code>stepi</code> or <code>nexti</code> does not do
  98. this; single instruction steps always show the inlined body.
  99. </p>
  100. <p>There are some ways that <small>GDB</small> does not pretend that inlined
  101. function calls are the same as normal calls:
  102. </p>
  103. <ul>
  104. <li> Setting breakpoints at the call site of an inlined function may not
  105. work, because the call site does not contain any code. <small>GDB</small>
  106. may incorrectly move the breakpoint to the next line of the enclosing
  107. function, after the call. This limitation will be removed in a future
  108. version of <small>GDB</small>; until then, set a breakpoint on an earlier line
  109. or inside the inlined function instead.
  110. </li><li> <small>GDB</small> cannot locate the return value of inlined calls after
  111. using the <code>finish</code> command. This is a limitation of compiler-generated
  112. debugging information; after <code>finish</code>, you can step to the next line
  113. and print a variable where your program stored the return value.
  114. </li></ul>
  115. <hr>
  116. <div class="header">
  117. <p>
  118. Next: <a href="Tail-Call-Frames.html#Tail-Call-Frames" accesskey="n" rel="next">Tail Call Frames</a>, Up: <a href="Optimized-Code.html#Optimized-Code" accesskey="u" rel="up">Optimized Code</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>
  119. </div>
  120. </body>
  121. </html>