You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Inline-Functions.html 6.4KB

3 vuotta sitten
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  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 6.5, http://www.gnu.org/software/texinfo/ -->
  14. <head>
  15. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  16. <title>Inline Functions (Debugging with GDB)</title>
  17. <meta name="description" content="Inline Functions (Debugging with GDB)">
  18. <meta name="keywords" content="Inline Functions (Debugging with GDB)">
  19. <meta name="resource-type" content="document">
  20. <meta name="distribution" content="global">
  21. <meta name="Generator" content="makeinfo">
  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="prev" title="Optimized Code">
  28. <style type="text/css">
  29. <!--
  30. a.summary-letter {text-decoration: none}
  31. blockquote.indentedblock {margin-right: 0em}
  32. blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
  33. blockquote.smallquotation {font-size: smaller}
  34. div.display {margin-left: 3.2em}
  35. div.example {margin-left: 3.2em}
  36. div.lisp {margin-left: 3.2em}
  37. div.smalldisplay {margin-left: 3.2em}
  38. div.smallexample {margin-left: 3.2em}
  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.nolinebreak {white-space: nowrap}
  50. span.roman {font-family: initial; font-weight: normal}
  51. span.sansserif {font-family: sans-serif; font-weight: normal}
  52. ul.no-bullet {list-style: none}
  53. -->
  54. </style>
  55. </head>
  56. <body lang="en">
  57. <a name="Inline-Functions"></a>
  58. <div class="header">
  59. <p>
  60. 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>
  61. </div>
  62. <hr>
  63. <a name="Inline-Functions-1"></a>
  64. <h3 class="section">11.1 Inline Functions</h3>
  65. <a name="index-inline-functions_002c-debugging"></a>
  66. <p><em>Inlining</em> is an optimization that inserts a copy of the function
  67. body directly at each call site, instead of jumping to a shared
  68. routine. <small>GDB</small> displays inlined functions just like
  69. non-inlined functions. They appear in backtraces. You can view their
  70. arguments and local variables, step into them with <code>step</code>, skip
  71. them with <code>next</code>, and escape from them with <code>finish</code>.
  72. You can check whether a function was inlined by using the
  73. <code>info frame</code> command.
  74. </p>
  75. <p>For <small>GDB</small> to support inlined functions, the compiler must
  76. record information about inlining in the debug information &mdash;
  77. <small>GCC</small> using the <small>DWARF 2</small> format does this, and several
  78. other compilers do also. <small>GDB</small> only supports inlined functions
  79. when using <small>DWARF 2</small>. Versions of <small>GCC</small> before 4.1
  80. do not emit two required attributes (&lsquo;<samp>DW_AT_call_file</samp>&rsquo; and
  81. &lsquo;<samp>DW_AT_call_line</samp>&rsquo;); <small>GDB</small> does not display inlined
  82. function calls with earlier versions of <small>GCC</small>. It instead
  83. displays the arguments and local variables of inlined functions as
  84. local variables in the caller.
  85. </p>
  86. <p>The body of an inlined function is directly included at its call site;
  87. unlike a non-inlined function, there are no instructions devoted to
  88. the call. <small>GDB</small> still pretends that the call site and the
  89. start of the inlined function are different instructions. Stepping to
  90. the call site shows the call site, and then stepping again shows
  91. the first line of the inlined function, even though no additional
  92. instructions are executed.
  93. </p>
  94. <p>This makes source-level debugging much clearer; you can see both the
  95. context of the call and then the effect of the call. Only stepping by
  96. a single instruction using <code>stepi</code> or <code>nexti</code> does not do
  97. this; single instruction steps always show the inlined body.
  98. </p>
  99. <p>There are some ways that <small>GDB</small> does not pretend that inlined
  100. function calls are the same as normal calls:
  101. </p>
  102. <ul>
  103. <li> Setting breakpoints at the call site of an inlined function may not
  104. work, because the call site does not contain any code. <small>GDB</small>
  105. may incorrectly move the breakpoint to the next line of the enclosing
  106. function, after the call. This limitation will be removed in a future
  107. version of <small>GDB</small>; until then, set a breakpoint on an earlier line
  108. or inside the inlined function instead.
  109. </li><li> <small>GDB</small> cannot locate the return value of inlined calls after
  110. using the <code>finish</code> command. This is a limitation of compiler-generated
  111. debugging information; after <code>finish</code>, you can step to the next line
  112. and print a variable where your program stored the return value.
  113. </li></ul>
  114. <hr>
  115. <div class="header">
  116. <p>
  117. 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>
  118. </div>
  119. </body>
  120. </html>