Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

167 lines
8.0KB

  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>C Plus Plus Expressions (Debugging with GDB)</title>
  17. <meta name="description" content="C Plus Plus Expressions (Debugging with GDB)">
  18. <meta name="keywords" content="C Plus Plus Expressions (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="C.html#C" rel="up" title="C">
  26. <link href="C-Defaults.html#C-Defaults" rel="next" title="C Defaults">
  27. <link href="C-Constants.html#C-Constants" rel="prev" title="C Constants">
  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="C-Plus-Plus-Expressions"></a>
  58. <div class="header">
  59. <p>
  60. Next: <a href="C-Defaults.html#C-Defaults" accesskey="n" rel="next">C Defaults</a>, Previous: <a href="C-Constants.html#C-Constants" accesskey="p" rel="prev">C Constants</a>, Up: <a href="C.html#C" accesskey="u" rel="up">C</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="C_002b_002b-Expressions"></a>
  64. <h4 class="subsubsection">15.4.1.3 C<tt>++</tt> Expressions</h4>
  65. <a name="index-expressions-in-C_002b_002b"></a>
  66. <p><small>GDB</small> expression handling can interpret most C<tt>++</tt> expressions.
  67. </p>
  68. <a name="index-debugging-C_002b_002b-programs"></a>
  69. <a name="index-C_002b_002b-compilers"></a>
  70. <a name="index-debug-formats-and-C_002b_002b"></a>
  71. <a name="index-GCC-and-C_002b_002b"></a>
  72. <blockquote>
  73. <p><em>Warning:</em> <small>GDB</small> can only debug C<tt>++</tt> code if you use
  74. the proper compiler and the proper debug format. Currently,
  75. <small>GDB</small> works best when debugging C<tt>++</tt> code that is compiled
  76. with the most recent version of <small>GCC</small> possible. The DWARF
  77. debugging format is preferred; <small>GCC</small> defaults to this on most
  78. popular platforms. Other compilers and/or debug formats are likely to
  79. work badly or not at all when using <small>GDB</small> to debug C<tt>++</tt>
  80. code. See <a href="Compilation.html#Compilation">Compilation</a>.
  81. </p></blockquote>
  82. <ol>
  83. <li> <a name="index-member-functions"></a>
  84. Member function calls are allowed; you can use expressions like
  85. <div class="smallexample">
  86. <pre class="smallexample">count = aml-&gt;GetOriginal(x, y)
  87. </pre></div>
  88. </li><li> <a name="index-this_002c-inside-C_002b_002b-member-functions"></a>
  89. <a name="index-namespace-in-C_002b_002b"></a>
  90. While a member function is active (in the selected stack frame), your
  91. expressions have the same namespace available as the member function;
  92. that is, <small>GDB</small> allows implicit references to the class instance
  93. pointer <code>this</code> following the same rules as C<tt>++</tt>. <code>using</code>
  94. declarations in the current scope are also respected by <small>GDB</small>.
  95. </li><li> <a name="index-call-overloaded-functions"></a>
  96. <a name="index-overloaded-functions_002c-calling"></a>
  97. <a name="index-type-conversions-in-C_002b_002b"></a>
  98. You can call overloaded functions; <small>GDB</small> resolves the function
  99. call to the right definition, with some restrictions. <small>GDB</small> does not
  100. perform overload resolution involving user-defined type conversions,
  101. calls to constructors, or instantiations of templates that do not exist
  102. in the program. It also cannot handle ellipsis argument lists or
  103. default arguments.
  104. <p>It does perform integral conversions and promotions, floating-point
  105. promotions, arithmetic conversions, pointer conversions, conversions of
  106. class objects to base classes, and standard conversions such as those of
  107. functions or arrays to pointers; it requires an exact match on the
  108. number of function arguments.
  109. </p>
  110. <p>Overload resolution is always performed, unless you have specified
  111. <code>set overload-resolution off</code>. See <a href="Debugging-C-Plus-Plus.html#Debugging-C-Plus-Plus"><small>GDB</small> Features for C<tt>++</tt></a>.
  112. </p>
  113. <p>You must specify <code>set overload-resolution off</code> in order to use an
  114. explicit function signature to call an overloaded function, as in
  115. </p><div class="smallexample">
  116. <pre class="smallexample">p 'foo(char,int)'('x', 13)
  117. </pre></div>
  118. <p>The <small>GDB</small> command-completion facility can simplify this;
  119. see <a href="Completion.html#Completion">Command Completion</a>.
  120. </p>
  121. </li><li> <a name="index-reference-declarations"></a>
  122. <small>GDB</small> understands variables declared as C<tt>++</tt> lvalue or rvalue
  123. references; you can use them in expressions just as you do in C<tt>++</tt>
  124. source&mdash;they are automatically dereferenced.
  125. <p>In the parameter list shown when <small>GDB</small> displays a frame, the values of
  126. reference variables are not displayed (unlike other variables); this
  127. avoids clutter, since references are often used for large structures.
  128. The <em>address</em> of a reference variable is always shown, unless
  129. you have specified &lsquo;<samp>set print address off</samp>&rsquo;.
  130. </p>
  131. </li><li> <small>GDB</small> supports the C<tt>++</tt> name resolution operator <code>::</code>&mdash;your
  132. expressions can use it just as expressions in your program do. Since
  133. one scope may be defined in another, you can use <code>::</code> repeatedly if
  134. necessary, for example in an expression like
  135. &lsquo;<samp><var>scope1</var>::<var>scope2</var>::<var>name</var></samp>&rsquo;. <small>GDB</small> also allows
  136. resolving name scope by reference to source files, in both C and C<tt>++</tt>
  137. debugging (see <a href="Variables.html#Variables">Program Variables</a>).
  138. </li><li> <small>GDB</small> performs argument-dependent lookup, following the C<tt>++</tt>
  139. specification.
  140. </li></ol>
  141. <hr>
  142. <div class="header">
  143. <p>
  144. Next: <a href="C-Defaults.html#C-Defaults" accesskey="n" rel="next">C Defaults</a>, Previous: <a href="C-Constants.html#C-Constants" accesskey="p" rel="prev">C Constants</a>, Up: <a href="C.html#C" accesskey="u" rel="up">C</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>
  145. </div>
  146. </body>
  147. </html>