Agent-Expressions.html 7.5 KB

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