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.

Separate-Debug-Files.html 17KB

3 jaren geleden
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351
  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>Separate Debug Files (Debugging with GDB)</title>
  17. <meta name="description" content="Separate Debug Files (Debugging with GDB)">
  18. <meta name="keywords" content="Separate Debug Files (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="GDB-Files.html#GDB-Files" rel="up" title="GDB Files">
  26. <link href="MiniDebugInfo.html#MiniDebugInfo" rel="next" title="MiniDebugInfo">
  27. <link href="File-Caching.html#File-Caching" rel="prev" title="File Caching">
  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="Separate-Debug-Files"></a>
  58. <div class="header">
  59. <p>
  60. Next: <a href="MiniDebugInfo.html#MiniDebugInfo" accesskey="n" rel="next">MiniDebugInfo</a>, Previous: <a href="File-Caching.html#File-Caching" accesskey="p" rel="prev">File Caching</a>, Up: <a href="GDB-Files.html#GDB-Files" accesskey="u" rel="up">GDB Files</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="Debugging-Information-in-Separate-Files"></a>
  64. <h3 class="section">18.3 Debugging Information in Separate Files</h3>
  65. <a name="index-separate-debugging-information-files"></a>
  66. <a name="index-debugging-information-in-separate-files"></a>
  67. <a name="index-_002edebug-subdirectories"></a>
  68. <a name="index-debugging-information-directory_002c-global"></a>
  69. <a name="index-global-debugging-information-directories"></a>
  70. <a name="index-build-ID_002c-and-separate-debugging-files"></a>
  71. <a name="index-_002ebuild_002did-directory"></a>
  72. <p><small>GDB</small> allows you to put a program&rsquo;s debugging information in a
  73. file separate from the executable itself, in a way that allows
  74. <small>GDB</small> to find and load the debugging information automatically.
  75. Since debugging information can be very large&mdash;sometimes larger
  76. than the executable code itself&mdash;some systems distribute debugging
  77. information for their executables in separate files, which users can
  78. install only when they need to debug a problem.
  79. </p>
  80. <p><small>GDB</small> supports two ways of specifying the separate debug info
  81. file:
  82. </p>
  83. <ul>
  84. <li> The executable contains a <em>debug link</em> that specifies the name of
  85. the separate debug info file. The separate debug file&rsquo;s name is
  86. usually <samp><var>executable</var>.debug</samp>, where <var>executable</var> is the
  87. name of the corresponding executable file without leading directories
  88. (e.g., <samp>ls.debug</samp> for <samp>/usr/bin/ls</samp>). In addition, the
  89. debug link specifies a 32-bit <em>Cyclic Redundancy Check</em> (CRC)
  90. checksum for the debug file, which <small>GDB</small> uses to validate that
  91. the executable and the debug file came from the same build.
  92. </li><li> <a name="build-ID"></a>The executable contains a <em>build ID</em>, a unique bit string that is
  93. also present in the corresponding debug info file. (This is supported
  94. only on some operating systems, when using the ELF or PE file formats
  95. for binary files and the <small>GNU</small> Binutils.) For more details about
  96. this feature, see the description of the <samp>--build-id</samp>
  97. command-line option in <a href="http://sourceware.org/binutils/docs/ld/Options.html#Options">Command Line Options</a> in <cite>The GNU Linker</cite>. The debug info file&rsquo;s name is not specified
  98. explicitly by the build ID, but can be computed from the build ID, see
  99. below.
  100. </li></ul>
  101. <p>Depending on the way the debug info file is specified, <small>GDB</small>
  102. uses two different methods of looking for the debug file:
  103. </p>
  104. <ul>
  105. <li> For the &ldquo;debug link&rdquo; method, <small>GDB</small> looks up the named file in
  106. the directory of the executable file, then in a subdirectory of that
  107. directory named <samp>.debug</samp>, and finally under each one of the
  108. global debug directories, in a subdirectory whose name is identical to
  109. the leading directories of the executable&rsquo;s absolute file name. (On
  110. MS-Windows/MS-DOS, the drive letter of the executable&rsquo;s leading
  111. directories is converted to a one-letter subdirectory, i.e.
  112. <samp>d:/usr/bin/</samp> is converted to <samp>/d/usr/bin/</samp>, because Windows
  113. filesystems disallow colons in file names.)
  114. </li><li> For the &ldquo;build ID&rdquo; method, <small>GDB</small> looks in the
  115. <samp>.build-id</samp> subdirectory of each one of the global debug directories for
  116. a file named <samp><var>nn</var>/<var>nnnnnnnn</var>.debug</samp>, where <var>nn</var> are the
  117. first 2 hex characters of the build ID bit string, and <var>nnnnnnnn</var>
  118. are the rest of the bit string. (Real build ID strings are 32 or more
  119. hex characters, not 10.)
  120. </li></ul>
  121. <p>So, for example, suppose you ask <small>GDB</small> to debug
  122. <samp>/usr/bin/ls</samp>, which has a debug link that specifies the
  123. file <samp>ls.debug</samp>, and a build ID whose value in hex is
  124. <code>abcdef1234</code>. If the list of the global debug directories includes
  125. <samp>/usr/lib/debug</samp>, then <small>GDB</small> will look for the following
  126. debug information files, in the indicated order:
  127. </p>
  128. <ul class="no-bullet">
  129. <li>- <samp>/usr/lib/debug/.build-id/ab/cdef1234.debug</samp>
  130. </li><li>- <samp>/usr/bin/ls.debug</samp>
  131. </li><li>- <samp>/usr/bin/.debug/ls.debug</samp>
  132. </li><li>- <samp>/usr/lib/debug/usr/bin/ls.debug</samp>.
  133. </li></ul>
  134. <a name="debug_002dfile_002ddirectory"></a><p>Global debugging info directories default to what is set by <small>GDB</small>
  135. configure option <samp>--with-separate-debug-dir</samp>. During <small>GDB</small> run
  136. you can also set the global debugging info directories, and view the list
  137. <small>GDB</small> is currently using.
  138. </p>
  139. <dl compact="compact">
  140. <dd>
  141. <a name="index-set-debug_002dfile_002ddirectory"></a>
  142. </dd>
  143. <dt><code>set debug-file-directory <var>directories</var></code></dt>
  144. <dd><p>Set the directories which <small>GDB</small> searches for separate debugging
  145. information files to <var>directory</var>. Multiple path components can be set
  146. concatenating them by a path separator.
  147. </p>
  148. <a name="index-show-debug_002dfile_002ddirectory"></a>
  149. </dd>
  150. <dt><code>show debug-file-directory</code></dt>
  151. <dd><p>Show the directories <small>GDB</small> searches for separate debugging
  152. information files.
  153. </p>
  154. </dd>
  155. </dl>
  156. <a name="index-_002egnu_005fdebuglink-sections"></a>
  157. <a name="index-debug-link-sections"></a>
  158. <p>A debug link is a special section of the executable file named
  159. <code>.gnu_debuglink</code>. The section must contain:
  160. </p>
  161. <ul>
  162. <li> A filename, with any leading directory components removed, followed by
  163. a zero byte,
  164. </li><li> zero to three bytes of padding, as needed to reach the next four-byte
  165. boundary within the section, and
  166. </li><li> a four-byte CRC checksum, stored in the same endianness used for the
  167. executable file itself. The checksum is computed on the debugging
  168. information file&rsquo;s full contents by the function given below, passing
  169. zero as the <var>crc</var> argument.
  170. </li></ul>
  171. <p>Any executable file format can carry a debug link, as long as it can
  172. contain a section named <code>.gnu_debuglink</code> with the contents
  173. described above.
  174. </p>
  175. <a name="index-_002enote_002egnu_002ebuild_002did-sections"></a>
  176. <a name="index-build-ID-sections"></a>
  177. <p>The build ID is a special section in the executable file (and in other
  178. ELF binary files that <small>GDB</small> may consider). This section is
  179. often named <code>.note.gnu.build-id</code>, but that name is not mandatory.
  180. It contains unique identification for the built files&mdash;the ID remains
  181. the same across multiple builds of the same build tree. The default
  182. algorithm SHA1 produces 160 bits (40 hexadecimal characters) of the
  183. content for the build ID string. The same section with an identical
  184. value is present in the original built binary with symbols, in its
  185. stripped variant, and in the separate debugging information file.
  186. </p>
  187. <p>The debugging information file itself should be an ordinary
  188. executable, containing a full set of linker symbols, sections, and
  189. debugging information. The sections of the debugging information file
  190. should have the same names, addresses, and sizes as the original file,
  191. but they need not contain any data&mdash;much like a <code>.bss</code> section
  192. in an ordinary executable.
  193. </p>
  194. <p>The <small>GNU</small> binary utilities (Binutils) package includes the
  195. &lsquo;<samp>objcopy</samp>&rsquo; utility that can produce
  196. the separated executable / debugging information file pairs using the
  197. following commands:
  198. </p>
  199. <div class="smallexample">
  200. <pre class="smallexample"><kbd>objcopy --only-keep-debug foo foo.debug</kbd>
  201. <kbd>strip -g foo</kbd>
  202. </pre></div>
  203. <p>These commands remove the debugging
  204. information from the executable file <samp>foo</samp> and place it in the file
  205. <samp>foo.debug</samp>. You can use the first, second or both methods to link the
  206. two files:
  207. </p>
  208. <ul>
  209. <li> The debug link method needs the following additional command to also leave
  210. behind a debug link in <samp>foo</samp>:
  211. <div class="smallexample">
  212. <pre class="smallexample"><kbd>objcopy --add-gnu-debuglink=foo.debug foo</kbd>
  213. </pre></div>
  214. <p>Ulrich Drepper&rsquo;s <samp>elfutils</samp> package, starting with version 0.53, contains
  215. a version of the <code>strip</code> command such that the command <kbd>strip foo -f
  216. foo.debug</kbd> has the same functionality as the two <code>objcopy</code> commands and
  217. the <code>ln -s</code> command above, together.
  218. </p>
  219. </li><li> Build ID gets embedded into the main executable using <code>ld --build-id</code> or
  220. the <small>GCC</small> counterpart <code>gcc -Wl,--build-id</code>. Build ID support plus
  221. compatibility fixes for debug files separation are present in <small>GNU</small> binary
  222. utilities (Binutils) package since version 2.18.
  223. </li></ul>
  224. <a name="index-CRC-algorithm-definition"></a>
  225. <p>The CRC used in <code>.gnu_debuglink</code> is the CRC-32 defined in
  226. IEEE 802.3 using the polynomial:
  227. </p>
  228. <div class="display">
  229. <pre class="display"> <em>x</em><sup>32</sup> + <em>x</em><sup>26</sup> + <em>x</em><sup>23</sup> + <em>x</em><sup>22</sup> + <em>x</em><sup>16</sup> + <em>x</em><sup>12</sup> + <em>x</em><sup>11</sup>
  230. + <em>x</em><sup>10</sup> + <em>x</em><sup>8</sup> + <em>x</em><sup>7</sup> + <em>x</em><sup>5</sup> + <em>x</em><sup>4</sup> + <em>x</em><sup>2</sup> + <em>x</em> + 1
  231. </pre></div>
  232. <p>The function is computed byte at a time, taking the least
  233. significant bit of each byte first. The initial pattern
  234. <code>0xffffffff</code> is used, to ensure leading zeros affect the CRC and
  235. the final result is inverted to ensure trailing zeros also affect the
  236. CRC.
  237. </p>
  238. <p><em>Note:</em> This is the same CRC polynomial as used in handling the
  239. <em>Remote Serial Protocol</em> <code>qCRC</code> packet (see <a href="General-Query-Packets.html#qCRC-packet">qCRC packet</a>).
  240. However in the case of the Remote Serial Protocol, the CRC is computed
  241. <em>most</em> significant bit first, and the result is not inverted, so
  242. trailing zeros have no effect on the CRC value.
  243. </p>
  244. <p>To complete the description, we show below the code of the function
  245. which produces the CRC used in <code>.gnu_debuglink</code>. Inverting the
  246. initially supplied <code>crc</code> argument means that an initial call to
  247. this function passing in zero will start computing the CRC using
  248. <code>0xffffffff</code>.
  249. </p>
  250. <a name="index-gnu_005fdebuglink_005fcrc32"></a>
  251. <div class="smallexample">
  252. <pre class="smallexample">unsigned long
  253. gnu_debuglink_crc32 (unsigned long crc,
  254. unsigned char *buf, size_t len)
  255. {
  256. static const unsigned long crc32_table[256] =
  257. {
  258. 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
  259. 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
  260. 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
  261. 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
  262. 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
  263. 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
  264. 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
  265. 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
  266. 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
  267. 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
  268. 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
  269. 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
  270. 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
  271. 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
  272. 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
  273. 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
  274. 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
  275. 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
  276. 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
  277. 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
  278. 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
  279. 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
  280. 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
  281. 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
  282. 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
  283. 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
  284. 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
  285. 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
  286. 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
  287. 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
  288. 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
  289. 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
  290. 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
  291. 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
  292. 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
  293. 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
  294. 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
  295. 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
  296. 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
  297. 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
  298. 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
  299. 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
  300. 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
  301. 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
  302. 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
  303. 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
  304. 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
  305. 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
  306. 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
  307. 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
  308. 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
  309. 0x2d02ef8d
  310. };
  311. unsigned char *end;
  312. crc = ~crc &amp; 0xffffffff;
  313. for (end = buf + len; buf &lt; end; ++buf)
  314. crc = crc32_table[(crc ^ *buf) &amp; 0xff] ^ (crc &gt;&gt; 8);
  315. return ~crc &amp; 0xffffffff;
  316. }
  317. </pre></div>
  318. <p>This computation does not apply to the &ldquo;build ID&rdquo; method.
  319. </p>
  320. <hr>
  321. <div class="header">
  322. <p>
  323. Next: <a href="MiniDebugInfo.html#MiniDebugInfo" accesskey="n" rel="next">MiniDebugInfo</a>, Previous: <a href="File-Caching.html#File-Caching" accesskey="p" rel="prev">File Caching</a>, Up: <a href="GDB-Files.html#GDB-Files" accesskey="u" rel="up">GDB Files</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>
  324. </div>
  325. </body>
  326. </html>