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.

136 lines
7.4KB

  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>Agent Expressions (Debugging with GDB)</title>
  17. <meta name="description" content="Agent Expressions (Debugging with GDB)">
  18. <meta name="keywords" content="Agent 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="index.html#Top" rel="up" title="Top">
  26. <link href="General-Bytecode-Design.html#General-Bytecode-Design" rel="next" title="General Bytecode Design">
  27. <link href="Branch-Trace-Configuration-Format.html#Branch-Trace-Configuration-Format" rel="prev" title="Branch Trace Configuration Format">
  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="Agent-Expressions"></a>
  58. <div class="header">
  59. <p>
  60. Next: <a href="Target-Descriptions.html#Target-Descriptions" accesskey="n" rel="next">Target Descriptions</a>, Previous: <a href="Remote-Protocol.html#Remote-Protocol" accesskey="p" rel="prev">Remote Protocol</a>, Up: <a href="index.html#Top" accesskey="u" rel="up">Top</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="The-GDB-Agent-Expression-Mechanism"></a>
  64. <h2 class="appendix">Appendix F The GDB Agent Expression Mechanism</h2>
  65. <p>In some applications, it is not feasible for the debugger to interrupt
  66. the program&rsquo;s execution long enough for the developer to learn anything
  67. helpful about its behavior. If the program&rsquo;s correctness depends on its
  68. real-time behavior, delays introduced by a debugger might cause the
  69. program to fail, even when the code itself is correct. It is useful to
  70. be able to observe the program&rsquo;s behavior without interrupting it.
  71. </p>
  72. <p>Using GDB&rsquo;s <code>trace</code> and <code>collect</code> commands, the user can
  73. specify locations in the program, and arbitrary expressions to evaluate
  74. when those locations are reached. Later, using the <code>tfind</code>
  75. command, she can examine the values those expressions had when the
  76. program hit the trace points. The expressions may also denote objects
  77. in memory &mdash; structures or arrays, for example &mdash; whose values GDB
  78. should record; while visiting a particular tracepoint, the user may
  79. inspect those objects as if they were in memory at that moment.
  80. However, because GDB records these values without interacting with the
  81. user, it can do so quickly and unobtrusively, hopefully not disturbing
  82. the program&rsquo;s behavior.
  83. </p>
  84. <p>When GDB is debugging a remote target, the GDB <em>agent</em> code running
  85. on the target computes the values of the expressions itself. To avoid
  86. having a full symbolic expression evaluator on the agent, GDB translates
  87. expressions in the source language into a simpler bytecode language, and
  88. then sends the bytecode to the agent; the agent then executes the
  89. bytecode, and records the values for GDB to retrieve later.
  90. </p>
  91. <p>The bytecode language is simple; there are forty-odd opcodes, the bulk
  92. of which are the usual vocabulary of C operands (addition, subtraction,
  93. shifts, and so on) and various sizes of literals and memory reference
  94. operations. The bytecode interpreter operates strictly on machine-level
  95. values &mdash; various sizes of integers and floating point numbers &mdash; and
  96. requires no information about types or symbols; thus, the interpreter&rsquo;s
  97. internal data structures are simple, and each bytecode requires only a
  98. few native machine instructions to implement it. The interpreter is
  99. small, and strict limits on the memory and time required to evaluate an
  100. expression are easy to determine, making it suitable for use by the
  101. debugging agent in real-time applications.
  102. </p>
  103. <table class="menu" border="0" cellspacing="0">
  104. <tr><td align="left" valign="top">&bull; <a href="General-Bytecode-Design.html#General-Bytecode-Design" accesskey="1">General Bytecode Design</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Overview of the interpreter.
  105. </td></tr>
  106. <tr><td align="left" valign="top">&bull; <a href="Bytecode-Descriptions.html#Bytecode-Descriptions" accesskey="2">Bytecode Descriptions</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">What each one does.
  107. </td></tr>
  108. <tr><td align="left" valign="top">&bull; <a href="Using-Agent-Expressions.html#Using-Agent-Expressions" accesskey="3">Using Agent Expressions</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How agent expressions fit into the big picture.
  109. </td></tr>
  110. <tr><td align="left" valign="top">&bull; <a href="Varying-Target-Capabilities.html#Varying-Target-Capabilities" accesskey="4">Varying Target Capabilities</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">How to discover what the target can do.
  111. </td></tr>
  112. <tr><td align="left" valign="top">&bull; <a href="Rationale.html#Rationale" accesskey="5">Rationale</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">Why we did it this way.
  113. </td></tr>
  114. </table>
  115. <hr>
  116. <div class="header">
  117. <p>
  118. Next: <a href="Target-Descriptions.html#Target-Descriptions" accesskey="n" rel="next">Target Descriptions</a>, Previous: <a href="Remote-Protocol.html#Remote-Protocol" accesskey="p" rel="prev">Remote Protocol</a>, Up: <a href="index.html#Top" accesskey="u" rel="up">Top</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>