Index: gdb/doc/gdb.info-2 |
diff --git a/gdb/doc/gdb.info-2 b/gdb/doc/gdb.info-2 |
index 83604686ee62bf345a371ad633c1d4ea9a700f55..3e94550058c6dccb2f1d7049ab0bff8c9a512d16 100644 |
--- a/gdb/doc/gdb.info-2 |
+++ b/gdb/doc/gdb.info-2 |
@@ -1,13 +1,12 @@ |
-This is gdb.info, produced by makeinfo version 4.8 from ./gdb.texinfo. |
+This is gdb.info, produced by makeinfo version 4.13 from ./gdb.texinfo. |
INFO-DIR-SECTION Software development |
START-INFO-DIR-ENTRY |
* Gdb: (gdb). The GNU debugger. |
+* gdbserver: (gdb) Server. The GNU debugging server. |
END-INFO-DIR-ENTRY |
- Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, |
-1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, |
-2010 2011, 2012 Free Software Foundation, Inc. |
+ Copyright (C) 1988-2013 Free Software Foundation, Inc. |
Permission is granted to copy, distribute and/or modify this document |
under the terms of the GNU Free Documentation License, Version 1.3 or |
@@ -23,11 +22,9 @@ developing GNU and promoting software freedom." |
This file documents the GNU debugger GDB. |
This is the Tenth Edition, of `Debugging with GDB: the GNU |
-Source-Level Debugger' for GDB (GDB) Version 7.5.1. |
+Source-Level Debugger' for GDB (GDB) Version 7.6.50.20131211-cvs. |
- Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, |
-1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, |
-2010 2011, 2012 Free Software Foundation, Inc. |
+ Copyright (C) 1988-2013 Free Software Foundation, Inc. |
Permission is granted to copy, distribute and/or modify this document |
under the terms of the GNU Free Documentation License, Version 1.3 or |
@@ -41,6 +38,475 @@ this GNU Manual. Buying copies from GNU Press supports the FSF in |
developing GNU and promoting software freedom." |
+File: gdb.info, Node: Variables, Next: Arrays, Prev: Ambiguous Expressions, Up: Data |
+ |
+10.3 Program Variables |
+====================== |
+ |
+The most common kind of expression to use is the name of a variable in |
+your program. |
+ |
+ Variables in expressions are understood in the selected stack frame |
+(*note Selecting a Frame: Selection.); they must be either: |
+ |
+ * global (or file-static) |
+ |
+or |
+ |
+ * visible according to the scope rules of the programming language |
+ from the point of execution in that frame |
+ |
+This means that in the function |
+ |
+ foo (a) |
+ int a; |
+ { |
+ bar (a); |
+ { |
+ int b = test (); |
+ bar (b); |
+ } |
+ } |
+ |
+you can examine and use the variable `a' whenever your program is |
+executing within the function `foo', but you can only use or examine |
+the variable `b' while your program is executing inside the block where |
+`b' is declared. |
+ |
+ There is an exception: you can refer to a variable or function whose |
+scope is a single source file even if the current execution point is not |
+in this file. But it is possible to have more than one such variable or |
+function with the same name (in different source files). If that |
+happens, referring to that name has unpredictable effects. If you wish, |
+you can specify a static variable in a particular function or file by |
+using the colon-colon (`::') notation: |
+ |
+ FILE::VARIABLE |
+ FUNCTION::VARIABLE |
+ |
+Here FILE or FUNCTION is the name of the context for the static |
+VARIABLE. In the case of file names, you can use quotes to make sure |
+GDB parses the file name as a single word--for example, to print a |
+global value of `x' defined in `f2.c': |
+ |
+ (gdb) p 'f2.c'::x |
+ |
+ The `::' notation is normally used for referring to static |
+variables, since you typically disambiguate uses of local variables in |
+functions by selecting the appropriate frame and using the simple name |
+of the variable. However, you may also use this notation to refer to |
+local variables in frames enclosing the selected frame: |
+ |
+ void |
+ foo (int a) |
+ { |
+ if (a < 10) |
+ bar (a); |
+ else |
+ process (a); /* Stop here */ |
+ } |
+ |
+ int |
+ bar (int a) |
+ { |
+ foo (a + 5); |
+ } |
+ |
+For example, if there is a breakpoint at the commented line, here is |
+what you might see when the program stops after executing the call |
+`bar(0)': |
+ |
+ (gdb) p a |
+ $1 = 10 |
+ (gdb) p bar::a |
+ $2 = 5 |
+ (gdb) up 2 |
+ #2 0x080483d0 in foo (a=5) at foobar.c:12 |
+ (gdb) p a |
+ $3 = 5 |
+ (gdb) p bar::a |
+ $4 = 0 |
+ |
+ These uses of `::' are very rarely in conflict with the very similar |
+use of the same notation in C++. When they are in conflict, the C++ |
+meaning takes precedence; however, this can be overridden by quoting |
+the file or function name with single quotes. |
+ |
+ For example, suppose the program is stopped in a method of a class |
+that has a field named `includefile', and there is also an include file |
+named `includefile' that defines a variable, `some_global'. |
+ |
+ (gdb) p includefile |
+ $1 = 23 |
+ (gdb) p includefile::some_global |
+ A syntax error in expression, near `'. |
+ (gdb) p 'includefile'::some_global |
+ $2 = 27 |
+ |
+ _Warning:_ Occasionally, a local variable may appear to have the |
+ wrong value at certain points in a function--just after entry to a |
+ new scope, and just before exit. |
+ You may see this problem when you are stepping by machine |
+instructions. This is because, on most machines, it takes more than |
+one instruction to set up a stack frame (including local variable |
+definitions); if you are stepping by machine instructions, variables |
+may appear to have the wrong values until the stack frame is completely |
+built. On exit, it usually also takes more than one machine |
+instruction to destroy a stack frame; after you begin stepping through |
+that group of instructions, local variable definitions may be gone. |
+ |
+ This may also happen when the compiler does significant |
+optimizations. To be sure of always seeing accurate values, turn off |
+all optimization when compiling. |
+ |
+ Another possible effect of compiler optimizations is to optimize |
+unused variables out of existence, or assign variables to registers (as |
+opposed to memory addresses). Depending on the support for such cases |
+offered by the debug info format used by the compiler, GDB might not be |
+able to display values for such local variables. If that happens, GDB |
+will print a message like this: |
+ |
+ No symbol "foo" in current context. |
+ |
+ To solve such problems, either recompile without optimizations, or |
+use a different debug info format, if the compiler supports several such |
+formats. *Note Compilation::, for more information on choosing compiler |
+options. *Note C and C++: C, for more information about debug info |
+formats that are best suited to C++ programs. |
+ |
+ If you ask to print an object whose contents are unknown to GDB, |
+e.g., because its data type is not completely specified by the debug |
+information, GDB will say `<incomplete type>'. *Note incomplete type: |
+Symbols, for more about this. |
+ |
+ If you append `@entry' string to a function parameter name you get |
+its value at the time the function got called. If the value is not |
+available an error message is printed. Entry values are available only |
+with some compilers. Entry values are normally also printed at the |
+function parameter list according to *note set print entry-values::. |
+ |
+ Breakpoint 1, d (i=30) at gdb.base/entry-value.c:29 |
+ 29 i++; |
+ (gdb) next |
+ 30 e (i); |
+ (gdb) print i |
+ $1 = 31 |
+ (gdb) print i@entry |
+ $2 = 30 |
+ |
+ Strings are identified as arrays of `char' values without specified |
+signedness. Arrays of either `signed char' or `unsigned char' get |
+printed as arrays of 1 byte sized integers. `-fsigned-char' or |
+`-funsigned-char' GCC options have no effect as GDB defines literal |
+string type `"char"' as `char' without a sign. For program code |
+ |
+ char var0[] = "A"; |
+ signed char var1[] = "A"; |
+ |
+ You get during debugging |
+ (gdb) print var0 |
+ $1 = "A" |
+ (gdb) print var1 |
+ $2 = {65 'A', 0 '\0'} |
+ |
+ |
+File: gdb.info, Node: Arrays, Next: Output Formats, Prev: Variables, Up: Data |
+ |
+10.4 Artificial Arrays |
+====================== |
+ |
+It is often useful to print out several successive objects of the same |
+type in memory; a section of an array, or an array of dynamically |
+determined size for which only a pointer exists in the program. |
+ |
+ You can do this by referring to a contiguous span of memory as an |
+"artificial array", using the binary operator `@'. The left operand of |
+`@' should be the first element of the desired array and be an |
+individual object. The right operand should be the desired length of |
+the array. The result is an array value whose elements are all of the |
+type of the left argument. The first element is actually the left |
+argument; the second element comes from bytes of memory immediately |
+following those that hold the first element, and so on. Here is an |
+example. If a program says |
+ |
+ int *array = (int *) malloc (len * sizeof (int)); |
+ |
+you can print the contents of `array' with |
+ |
+ p *array@len |
+ |
+ The left operand of `@' must reside in memory. Array values made |
+with `@' in this way behave just like other arrays in terms of |
+subscripting, and are coerced to pointers when used in expressions. |
+Artificial arrays most often appear in expressions via the value history |
+(*note Value History: Value History.), after printing one out. |
+ |
+ Another way to create an artificial array is to use a cast. This |
+re-interprets a value as if it were an array. The value need not be in |
+memory: |
+ (gdb) p/x (short[2])0x12345678 |
+ $1 = {0x1234, 0x5678} |
+ |
+ As a convenience, if you leave the array length out (as in |
+`(TYPE[])VALUE') GDB calculates the size to fill the value (as |
+`sizeof(VALUE)/sizeof(TYPE)': |
+ (gdb) p/x (short[])0x12345678 |
+ $2 = {0x1234, 0x5678} |
+ |
+ Sometimes the artificial array mechanism is not quite enough; in |
+moderately complex data structures, the elements of interest may not |
+actually be adjacent--for example, if you are interested in the values |
+of pointers in an array. One useful work-around in this situation is |
+to use a convenience variable (*note Convenience Variables: Convenience |
+Vars.) as a counter in an expression that prints the first interesting |
+value, and then repeat that expression via <RET>. For instance, |
+suppose you have an array `dtab' of pointers to structures, and you are |
+interested in the values of a field `fv' in each structure. Here is an |
+example of what you might type: |
+ |
+ set $i = 0 |
+ p dtab[$i++]->fv |
+ <RET> |
+ <RET> |
+ ... |
+ |
+ |
+File: gdb.info, Node: Output Formats, Next: Memory, Prev: Arrays, Up: Data |
+ |
+10.5 Output Formats |
+=================== |
+ |
+By default, GDB prints a value according to its data type. Sometimes |
+this is not what you want. For example, you might want to print a |
+number in hex, or a pointer in decimal. Or you might want to view data |
+in memory at a certain address as a character string or as an |
+instruction. To do these things, specify an "output format" when you |
+print a value. |
+ |
+ The simplest use of output formats is to say how to print a value |
+already computed. This is done by starting the arguments of the |
+`print' command with a slash and a format letter. The format letters |
+supported are: |
+ |
+`x' |
+ Regard the bits of the value as an integer, and print the integer |
+ in hexadecimal. |
+ |
+`d' |
+ Print as integer in signed decimal. |
+ |
+`u' |
+ Print as integer in unsigned decimal. |
+ |
+`o' |
+ Print as integer in octal. |
+ |
+`t' |
+ Print as integer in binary. The letter `t' stands for "two". (1) |
+ |
+`a' |
+ Print as an address, both absolute in hexadecimal and as an offset |
+ from the nearest preceding symbol. You can use this format used |
+ to discover where (in what function) an unknown address is located: |
+ |
+ (gdb) p/a 0x54320 |
+ $3 = 0x54320 <_initialize_vx+396> |
+ |
+ The command `info symbol 0x54320' yields similar results. *Note |
+ info symbol: Symbols. |
+ |
+`c' |
+ Regard as an integer and print it as a character constant. This |
+ prints both the numerical value and its character representation. |
+ The character representation is replaced with the octal escape |
+ `\nnn' for characters outside the 7-bit ASCII range. |
+ |
+ Without this format, GDB displays `char', `unsigned char', and |
+ `signed char' data as character constants. Single-byte members of |
+ vectors are displayed as integer data. |
+ |
+`f' |
+ Regard the bits of the value as a floating point number and print |
+ using typical floating point syntax. |
+ |
+`s' |
+ Regard as a string, if possible. With this format, pointers to |
+ single-byte data are displayed as null-terminated strings and |
+ arrays of single-byte data are displayed as fixed-length strings. |
+ Other values are displayed in their natural types. |
+ |
+ Without this format, GDB displays pointers to and arrays of |
+ `char', `unsigned char', and `signed char' as strings. |
+ Single-byte members of a vector are displayed as an integer array. |
+ |
+`z' |
+ Like `x' formatting, the value is treated as an integer and |
+ printed as hexadecimal, but leading zeros are printed to pad the |
+ value to the size of the integer type. |
+ |
+`r' |
+ Print using the `raw' formatting. By default, GDB will use a |
+ Python-based pretty-printer, if one is available (*note Pretty |
+ Printing::). This typically results in a higher-level display of |
+ the value's contents. The `r' format bypasses any Python |
+ pretty-printer which might exist. |
+ |
+ For example, to print the program counter in hex (*note |
+Registers::), type |
+ |
+ p/x $pc |
+ |
+Note that no space is required before the slash; this is because command |
+names in GDB cannot contain a slash. |
+ |
+ To reprint the last value in the value history with a different |
+format, you can use the `print' command with just a format and no |
+expression. For example, `p/x' reprints the last value in hex. |
+ |
+ ---------- Footnotes ---------- |
+ |
+ (1) `b' cannot be used because these format letters are also used |
+with the `x' command, where `b' stands for "byte"; see *note Examining |
+Memory: Memory. |
+ |
+ |
+File: gdb.info, Node: Memory, Next: Auto Display, Prev: Output Formats, Up: Data |
+ |
+10.6 Examining Memory |
+===================== |
+ |
+You can use the command `x' (for "examine") to examine memory in any of |
+several formats, independently of your program's data types. |
+ |
+`x/NFU ADDR' |
+`x ADDR' |
+`x' |
+ Use the `x' command to examine memory. |
+ |
+ N, F, and U are all optional parameters that specify how much memory |
+to display and how to format it; ADDR is an expression giving the |
+address where you want to start displaying memory. If you use defaults |
+for NFU, you need not type the slash `/'. Several commands set |
+convenient defaults for ADDR. |
+ |
+N, the repeat count |
+ The repeat count is a decimal integer; the default is 1. It |
+ specifies how much memory (counting by units U) to display. |
+ |
+F, the display format |
+ The display format is one of the formats used by `print' (`x', |
+ `d', `u', `o', `t', `a', `c', `f', `s'), and in addition `i' (for |
+ machine instructions). The default is `x' (hexadecimal) |
+ initially. The default changes each time you use either `x' or |
+ `print'. |
+ |
+U, the unit size |
+ The unit size is any of |
+ |
+ `b' |
+ Bytes. |
+ |
+ `h' |
+ Halfwords (two bytes). |
+ |
+ `w' |
+ Words (four bytes). This is the initial default. |
+ |
+ `g' |
+ Giant words (eight bytes). |
+ |
+ Each time you specify a unit size with `x', that size becomes the |
+ default unit the next time you use `x'. For the `i' format, the |
+ unit size is ignored and is normally not written. For the `s' |
+ format, the unit size defaults to `b', unless it is explicitly |
+ given. Use `x /hs' to display 16-bit char strings and `x /ws' to |
+ display 32-bit strings. The next use of `x /s' will again display |
+ 8-bit strings. Note that the results depend on the programming |
+ language of the current compilation unit. If the language is C, |
+ the `s' modifier will use the UTF-16 encoding while `w' will use |
+ UTF-32. The encoding is set by the programming language and cannot |
+ be altered. |
+ |
+ADDR, starting display address |
+ ADDR is the address where you want GDB to begin displaying memory. |
+ The expression need not have a pointer value (though it may); it |
+ is always interpreted as an integer address of a byte of memory. |
+ *Note Expressions: Expressions, for more information on |
+ expressions. The default for ADDR is usually just after the last |
+ address examined--but several other commands also set the default |
+ address: `info breakpoints' (to the address of the last breakpoint |
+ listed), `info line' (to the starting address of a line), and |
+ `print' (if you use it to display a value from memory). |
+ |
+ For example, `x/3uh 0x54320' is a request to display three halfwords |
+(`h') of memory, formatted as unsigned decimal integers (`u'), starting |
+at address `0x54320'. `x/4xw $sp' prints the four words (`w') of |
+memory above the stack pointer (here, `$sp'; *note Registers: |
+Registers.) in hexadecimal (`x'). |
+ |
+ Since the letters indicating unit sizes are all distinct from the |
+letters specifying output formats, you do not have to remember whether |
+unit size or format comes first; either order works. The output |
+specifications `4xw' and `4wx' mean exactly the same thing. (However, |
+the count N must come first; `wx4' does not work.) |
+ |
+ Even though the unit size U is ignored for the formats `s' and `i', |
+you might still want to use a count N; for example, `3i' specifies that |
+you want to see three machine instructions, including any operands. |
+For convenience, especially when used with the `display' command, the |
+`i' format also prints branch delay slot instructions, if any, beyond |
+the count specified, which immediately follow the last instruction that |
+is within the count. The command `disassemble' gives an alternative |
+way of inspecting machine instructions; see *note Source and Machine |
+Code: Machine Code. |
+ |
+ All the defaults for the arguments to `x' are designed to make it |
+easy to continue scanning memory with minimal specifications each time |
+you use `x'. For example, after you have inspected three machine |
+instructions with `x/3i ADDR', you can inspect the next seven with just |
+`x/7'. If you use <RET> to repeat the `x' command, the repeat count N |
+is used again; the other arguments default as for successive uses of |
+`x'. |
+ |
+ When examining machine instructions, the instruction at current |
+program counter is shown with a `=>' marker. For example: |
+ |
+ (gdb) x/5i $pc-6 |
+ 0x804837f <main+11>: mov %esp,%ebp |
+ 0x8048381 <main+13>: push %ecx |
+ 0x8048382 <main+14>: sub $0x4,%esp |
+ => 0x8048385 <main+17>: movl $0x8048460,(%esp) |
+ 0x804838c <main+24>: call 0x80482d4 <puts@plt> |
+ |
+ The addresses and contents printed by the `x' command are not saved |
+in the value history because there is often too much of them and they |
+would get in the way. Instead, GDB makes these values available for |
+subsequent use in expressions as values of the convenience variables |
+`$_' and `$__'. After an `x' command, the last address examined is |
+available for use in expressions in the convenience variable `$_'. The |
+contents of that address, as examined, are available in the convenience |
+variable `$__'. |
+ |
+ If the `x' command has a repeat count, the address and contents saved |
+are from the last memory unit printed; this is not the same as the last |
+address printed if several units were printed on the last line of |
+output. |
+ |
+ When you are debugging a program running on a remote target machine |
+(*note Remote Debugging::), you may wish to verify the program's image |
+in the remote machine's memory against the executable file you |
+downloaded to the target. The `compare-sections' command is provided |
+for such situations. |
+ |
+`compare-sections [SECTION-NAME]' |
+ Compare the data of a loadable section SECTION-NAME in the |
+ executable file of the program being debugged with the same |
+ section in the remote machine's memory, and report any mismatches. |
+ With no arguments, compares all loadable sections. This command's |
+ availability depends on the target's support for the `"qCRC"' |
+ remote request. |
+ |
+ |
File: gdb.info, Node: Auto Display, Next: Print Settings, Prev: Memory, Up: Data |
10.7 Automatic Display |
@@ -207,10 +673,12 @@ and source file that corresponds to each instruction. |
printed is reasonably close to the closest earlier symbol: |
`set print max-symbolic-offset MAX-OFFSET' |
+`set print max-symbolic-offset unlimited' |
Tell GDB to only display the symbolic form of an address if the |
offset between the closest earlier symbol and the address is less |
- than MAX-OFFSET. The default is 0, which tells GDB to always |
- print the symbolic form of an address if any symbol precedes it. |
+ than MAX-OFFSET. The default is `unlimited', which tells GDB to |
+ always print the symbolic form of an address if any symbol precedes |
+ it. Zero is equivalent to `unlimited'. |
`show print max-symbolic-offset' |
Ask how large the maximum offset is that GDB prints in a symbolic |
@@ -276,12 +744,14 @@ print symbol on': |
arrays. |
`set print elements NUMBER-OF-ELEMENTS' |
+`set print elements unlimited' |
Set a limit on how many elements of an array GDB will print. If |
GDB is printing a large array, it stops printing after it has |
printed the number of elements set by the `set print elements' |
command. This limit also applies to the display of strings. When |
- GDB starts, this limit is set to 200. Setting NUMBER-OF-ELEMENTS |
- to zero means that the printing is unlimited. |
+ GDB starts, this limit is set to 200. Setting NUMBER-OF-ELEMENTS |
+ to `unlimited' or zero means that the number of elements to print |
+ is unlimited. |
`show print elements' |
Display the number of elements of a large array that GDB will |
@@ -328,6 +798,17 @@ print symbol on': |
Show how the value of arguments should be displayed when printing |
a frame. |
+`set print raw frame-arguments on' |
+ Print frame arguments in raw, non pretty-printed, form. |
+ |
+`set print raw frame-arguments off' |
+ Print frame arguments in pretty-printed form, if there is a |
+ pretty-printer for the value (*note Pretty Printing::), otherwise |
+ print the value in raw form. This is the default. |
+ |
+`show print raw frame-arguments' |
+ Show whether to print frame arguments in raw form. |
+ |
`set print entry-values VALUE' |
Set printing of frame argument values at function entry. In some |
cases GDB can determine the value of function argument which was |
@@ -422,21 +903,22 @@ print symbol on': |
#0 invalid (val=<optimized out>) |
For analysis messages on possible failures of frame argument |
- values at function entry resolution see *Note set debug |
+ values at function entry resolution see *note set debug |
entry-values::. |
`show print entry-values' |
Show the method being used for printing of frame argument values |
at function entry. |
-`set print repeats' |
+`set print repeats NUMBER-OF-REPEATS' |
+`set print repeats unlimited' |
Set the threshold for suppressing display of repeated array |
elements. When the number of consecutive identical elements of an |
array exceeds the threshold, GDB prints the string `"<repeats N |
times>"', where N is the number of identical repetitions, instead |
of displaying the identical elements themselves. Setting the |
- threshold to zero will cause all elements to be individually |
- printed. The default threshold is 10. |
+ threshold to `unlimited' or zero will cause all elements to be |
+ individually printed. The default threshold is 10. |
`show print repeats' |
Display the current threshold for printing repeated identical |
@@ -556,11 +1038,11 @@ These settings are of interest when debugging C++ programs: |
`auto' |
Allow GDB to choose a decoding style by inspecting your |
- program. |
+ program. This is the default. |
`gnu' |
Decode based on the GNU C++ compiler (`g++') encoding |
- algorithm. This is the default. |
+ algorithm. |
`hp' |
Decode based on the HP ANSI C++ (`aCC') encoding algorithm. |
@@ -864,7 +1346,7 @@ remains 4 even though the value of `x' has changed. |
as `show values +'. |
-File: gdb.info, Node: Convenience Vars, Next: Registers, Prev: Value History, Up: Data |
+File: gdb.info, Node: Convenience Vars, Next: Convenience Funs, Prev: Value History, Up: Data |
10.11 Convenience Variables |
=========================== |
@@ -902,7 +1384,8 @@ its current value. |
`show convenience' |
Print a list of convenience variables used so far, and their |
- values. Abbreviated `show conv'. |
+ values, as well as a list of the convenience functions. |
+ Abbreviated `show conv'. |
`init-if-undefined $VARIABLE = EXPRESSION' |
Set a convenience variable if it has not already been set. This |
@@ -942,8 +1425,62 @@ values likely to be useful. |
match the format in which the data was printed. |
`$_exitcode' |
- The variable `$_exitcode' is automatically set to the exit code |
- when the program being debugged terminates. |
+ When the program being debugged terminates normally, GDB |
+ automatically sets this variable to the exit code of the program, |
+ and resets `$_exitsignal' to `void'. |
+ |
+`$_exitsignal' |
+ When the program being debugged dies due to an uncaught signal, |
+ GDB automatically sets this variable to that signal's number, and |
+ resets `$_exitcode' to `void'. |
+ |
+ To distinguish between whether the program being debugged has |
+ exited (i.e., `$_exitcode' is not `void') or signalled (i.e., |
+ `$_exitsignal' is not `void'), the convenience function `$_isvoid' |
+ can be used (*note Convenience Functions: Convenience Funs.). For |
+ example, considering the following source code: |
+ |
+ #include <signal.h> |
+ |
+ int |
+ main (int argc, char *argv[]) |
+ { |
+ raise (SIGALRM); |
+ return 0; |
+ } |
+ |
+ A valid way of telling whether the program being debugged has |
+ exited or signalled would be: |
+ |
+ (gdb) define has_exited_or_signalled |
+ Type commands for definition of ``has_exited_or_signalled''. |
+ End with a line saying just ``end''. |
+ >if $_isvoid ($_exitsignal) |
+ >echo The program has exited\n |
+ >else |
+ >echo The program has signalled\n |
+ >end |
+ >end |
+ (gdb) run |
+ Starting program: |
+ |
+ Program terminated with signal SIGALRM, Alarm clock. |
+ The program no longer exists. |
+ (gdb) has_exited_or_signalled |
+ The program has signalled |
+ |
+ As can be seen, GDB correctly informs that the program being |
+ debugged has signalled, since it calls `raise' and raises a |
+ `SIGALRM' signal. If the program being debugged had not called |
+ `raise', then GDB would report a normal exit: |
+ |
+ (gdb) has_exited_or_signalled |
+ The program has exited |
+ |
+`$_exception' |
+ The variable `$_exception' is set to the exception object being |
+ thrown at an exception-related catchpoint. *Note Set |
+ Catchpoints::. |
`$_probe_argc' |
`$_probe_arg0...$_probe_arg11' |
@@ -973,18 +1510,99 @@ values likely to be useful. |
begins with a dollar sign, GDB searches for a user or system name |
first, before it searches for a convenience variable. |
- GDB also supplies some "convenience functions". These have a syntax |
+ |
+File: gdb.info, Node: Convenience Funs, Next: Registers, Prev: Convenience Vars, Up: Data |
+ |
+10.12 Convenience Functions |
+=========================== |
+ |
+GDB also supplies some "convenience functions". These have a syntax |
similar to convenience variables. A convenience function can be used |
in an expression just like an ordinary function; however, a convenience |
function is implemented internally to GDB. |
+ These functions do not require GDB to be configured with `Python' |
+support, which means that they are always available. |
+ |
+`$_isvoid (EXPR)' |
+ Return one if the expression EXPR is `void'. Otherwise it returns |
+ zero. |
+ |
+ A `void' expression is an expression where the type of the result |
+ is `void'. For example, you can examine a convenience variable |
+ (see *note Convenience Variables: Convenience Vars.) to check |
+ whether it is `void': |
+ |
+ (gdb) print $_exitcode |
+ $1 = void |
+ (gdb) print $_isvoid ($_exitcode) |
+ $2 = 1 |
+ (gdb) run |
+ Starting program: ./a.out |
+ [Inferior 1 (process 29572) exited normally] |
+ (gdb) print $_exitcode |
+ $3 = 0 |
+ (gdb) print $_isvoid ($_exitcode) |
+ $4 = 0 |
+ |
+ In the example above, we used `$_isvoid' to check whether |
+ `$_exitcode' is `void' before and after the execution of the |
+ program being debugged. Before the execution there is no exit |
+ code to be examined, therefore `$_exitcode' is `void'. After the |
+ execution the program being debugged returned zero, therefore |
+ `$_exitcode' is zero, which means that it is not `void' anymore. |
+ |
+ The `void' expression can also be a call of a function from the |
+ program being debugged. For example, given the following function: |
+ |
+ void |
+ foo (void) |
+ { |
+ } |
+ |
+ The result of calling it inside GDB is `void': |
+ |
+ (gdb) print foo () |
+ $1 = void |
+ (gdb) print $_isvoid (foo ()) |
+ $2 = 1 |
+ (gdb) set $v = foo () |
+ (gdb) print $v |
+ $3 = void |
+ (gdb) print $_isvoid ($v) |
+ $4 = 1 |
+ |
+ |
+ These functions require GDB to be configured with `Python' support. |
+ |
+`$_memeq(BUF1, BUF2, LENGTH)' |
+ Returns one if the LENGTH bytes at the addresses given by BUF1 and |
+ BUF2 are equal. Otherwise it returns zero. |
+ |
+`$_regex(STR, REGEX)' |
+ Returns one if the string STR matches the regular expression |
+ REGEX. Otherwise it returns zero. The syntax of the regular |
+ expression is that specified by `Python''s regular expression |
+ support. |
+ |
+`$_streq(STR1, STR2)' |
+ Returns one if the strings STR1 and STR2 are equal. Otherwise it |
+ returns zero. |
+ |
+`$_strlen(STR)' |
+ Returns the length of string STR. |
+ |
+ |
+ GDB provides the ability to list and get help on convenience |
+functions. |
+ |
`help function' |
Print a list of all convenience functions. |
-File: gdb.info, Node: Registers, Next: Floating Point Hardware, Prev: Convenience Vars, Up: Data |
+File: gdb.info, Node: Registers, Next: Floating Point Hardware, Prev: Convenience Funs, Up: Data |
-10.12 Registers |
+10.13 Registers |
=============== |
You can refer to machine register contents, in expressions, as variables |
@@ -1082,10 +1700,28 @@ were exited and their saved registers restored. In order to see the |
true contents of hardware registers, you must select the innermost |
frame (with `frame 0'). |
- However, GDB must deduce where registers are saved, from the machine |
-code generated by your compiler. If some registers are not saved, or if |
-GDB is unable to locate the saved registers, the selected stack frame |
-makes no difference. |
+ Usually ABIs reserve some registers as not needed to be saved by the |
+callee (a.k.a.: "caller-saved", "call-clobbered" or "volatile" |
+registers). It may therefore not be possible for GDB to know the value |
+a register had before the call (in other words, in the outer frame), if |
+the register value has since been changed by the callee. GDB tries to |
+deduce where the inner frame saved ("callee-saved") registers, from the |
+debug info, unwind info, or the machine code generated by your |
+compiler. If some register is not saved, and GDB knows the register is |
+"caller-saved" (via its own knowledge of the ABI, or because the |
+debug/unwind info explicitly says the register's value is undefined), |
+GDB displays `<not saved>' as the register's value. With targets that |
+GDB has no knowledge of the register saving convention, if a register |
+was not saved by the callee, then its value and location in the outer |
+frame are assumed to be the same of the inner frame. This is usually |
+harmless, because if the register is call-clobbered, the caller either |
+does not care what is in the register after the call, or has code to |
+restore the value that it does care about. Note, however, that if you |
+change such a register in the outer frame, you may also be affecting |
+the inner frame. Also, the more "outer" the frame is you're looking |
+at, the more likely a call-clobbered register's value is to be wrong, |
+in the sense that it doesn't actually represent the value the register |
+had just before the call. |
---------- Footnotes ---------- |
@@ -1094,12 +1730,12 @@ where stacks grow downward in memory (most machines, nowadays). This |
assumes that the innermost stack frame is selected; setting `$sp' is |
not allowed when other stack frames are selected. To pop entire frames |
off the stack, regardless of machine architecture, use `return'; see |
-*Note Returning from a Function: Returning. |
+*note Returning from a Function: Returning. |
File: gdb.info, Node: Floating Point Hardware, Next: Vector Unit, Prev: Registers, Up: Data |
-10.13 Floating Point Hardware |
+10.14 Floating Point Hardware |
============================= |
Depending on the configuration, GDB may be able to give you more |
@@ -1114,7 +1750,7 @@ information about the status of the floating point hardware. |
File: gdb.info, Node: Vector Unit, Next: OS Information, Prev: Floating Point Hardware, Up: Data |
-10.14 Vector Unit |
+10.15 Vector Unit |
================= |
Depending on the configuration, GDB may be able to give you more |
@@ -1127,24 +1763,12 @@ information about the status of the vector unit. |
File: gdb.info, Node: OS Information, Next: Memory Region Attributes, Prev: Vector Unit, Up: Data |
-10.15 Operating System Auxiliary Information |
+10.16 Operating System Auxiliary Information |
============================================ |
GDB provides interfaces to useful OS facilities that can help you debug |
your program. |
- When GDB runs on a "Posix system" (such as GNU or Unix machines), it |
-interfaces with the inferior via the `ptrace' system call. The |
-operating system creates a special sata structure, called `struct |
-user', for this interface. You can use the command `info udot' to |
-display the contents of this data structure. |
- |
-`info udot' |
- Display the contents of the `struct user' maintained by the OS |
- kernel for the program being debugged. GDB displays the contents |
- of `struct user' as a list of hex numbers, similar to the |
- `examine' command. |
- |
Some operating systems supply an "auxiliary vector" to programs at |
startup. This is akin to the arguments and environment that you |
specify for a program, but contains a system-dependent variety of |
@@ -1154,7 +1778,7 @@ identified by an integer tag; the meanings are well-known but |
system-specific. Depending on the configuration and operating system |
facilities, GDB may be able to show you this information. For remote |
targets, this functionality may further depend on the remote stub's |
-support of the `qXfer:auxv:read' packet, see *Note qXfer auxiliary |
+support of the `qXfer:auxv:read' packet, see *note qXfer auxiliary |
vector read::. |
`info auxv' |
@@ -1169,10 +1793,10 @@ vector read::. |
On some targets, GDB can access operating system-specific |
information and show it to you. The types of information available |
will differ depending on the type of operating system running on the |
-target. The mechanism used to fetch the data is described in *Note |
+target. The mechanism used to fetch the data is described in *note |
Operating System Information::. For remote targets, this functionality |
depends on the remote stub's support of the `qXfer:osdata:read' packet, |
-see *Note qXfer osdata read::. |
+see *note qXfer osdata read::. |
`info os INFOTYPE' |
Display OS information of the requested type. |
@@ -1263,7 +1887,7 @@ see *Note qXfer osdata read::. |
File: gdb.info, Node: Memory Region Attributes, Next: Dump/Restore Files, Prev: OS Information, Up: Data |
-10.16 Memory Region Attributes |
+10.17 Memory Region Attributes |
============================== |
"Memory region attributes" allow you to describe special handling |
@@ -1326,10 +1950,10 @@ to enable, disable, or remove a memory region, you specify that number. |
_Attributes_ |
The list of attributes set for this memory region. |
-10.16.1 Attributes |
+10.17.1 Attributes |
------------------ |
-10.16.1.1 Memory Access Mode |
+10.17.1.1 Memory Access Mode |
............................ |
The access mode attributes set whether GDB may make read or write |
@@ -1348,7 +1972,7 @@ from accessing memory. |
`rw' |
Memory is read/write. This is the default. |
-10.16.1.2 Memory Access Size |
+10.17.1.2 Memory Access Size |
............................ |
The access size attribute tells GDB to use specific sized accesses in |
@@ -1368,7 +1992,7 @@ may use accesses of any size. |
`64' |
Use 64 bit memory accesses. |
-10.16.1.3 Data Cache |
+10.17.1.3 Data Cache |
.................... |
The data cache attributes set whether GDB will cache target memory. |
@@ -1382,7 +2006,7 @@ about volatile variables or memory mapped device registers. |
`nocache' |
Disable GDB from caching target memory. This is the default. |
-10.16.2 Memory Access Checking |
+10.17.2 Memory Access Checking |
------------------------------ |
GDB can be instructed to refuse accesses to memory that is not |
@@ -1404,7 +2028,7 @@ checking. The following commands control this behaviour. |
File: gdb.info, Node: Dump/Restore Files, Next: Core File Generation, Prev: Memory Region Attributes, Up: Data |
-10.17 Copy Between Memory and a File |
+10.18 Copy Between Memory and a File |
==================================== |
You can use the commands `dump', `append', and `restore' to copy data |
@@ -1463,7 +2087,7 @@ append to binary files. |
File: gdb.info, Node: Core File Generation, Next: Character Sets, Prev: Dump/Restore Files, Up: Data |
-10.18 How to Produce a Core File from Your Program |
+10.19 How to Produce a Core File from Your Program |
================================================== |
A "core file" or "core dump" is a file that records the memory image of |
@@ -1486,12 +2110,12 @@ special command for that. |
inferior process ID. |
Note that this command is implemented only for some systems (as of |
- this writing, GNU/Linux, FreeBSD, Solaris, Unixware, and S390). |
+ this writing, GNU/Linux, FreeBSD, Solaris, and S390). |
-File: gdb.info, Node: Character Sets, Next: Caching Remote Data, Prev: Core File Generation, Up: Data |
+File: gdb.info, Node: Character Sets, Next: Caching Target Data, Prev: Core File Generation, Up: Data |
-10.19 Character Sets |
+10.20 Character Sets |
==================== |
If the program you are debugging uses a different character set to |
@@ -1672,22 +2296,24 @@ literals you use in expressions: |
character. |
-File: gdb.info, Node: Caching Remote Data, Next: Searching Memory, Prev: Character Sets, Up: Data |
+File: gdb.info, Node: Caching Target Data, Next: Searching Memory, Prev: Character Sets, Up: Data |
-10.20 Caching Data of Remote Targets |
-==================================== |
+10.21 Caching Data of Targets |
+============================= |
-GDB caches data exchanged between the debugger and a remote target |
-(*note Remote Debugging::). Such caching generally improves |
-performance, because it reduces the overhead of the remote protocol by |
-bundling memory reads and writes into large chunks. Unfortunately, |
-simply caching everything would lead to incorrect results, since GDB |
-does not necessarily know anything about volatile values, memory-mapped |
-I/O addresses, etc. Furthermore, in non-stop mode (*note Non-Stop |
-Mode::) memory can be changed _while_ a gdb command is executing. |
-Therefore, by default, GDB only caches data known to be on the stack(1). |
-Other regions of memory can be explicitly marked as cacheable; see |
-*note Memory Region Attributes::. |
+GDB caches data exchanged between the debugger and a target. Each |
+cache is associated with the address space of the inferior. *Note |
+Inferiors and Programs::, about inferior and address space. Such |
+caching generally improves performance in remote debugging (*note |
+Remote Debugging::), because it reduces the overhead of the remote |
+protocol by bundling memory reads and writes into large chunks. |
+Unfortunately, simply caching everything would lead to incorrect |
+results, since GDB does not necessarily know anything about volatile |
+values, memory-mapped I/O addresses, etc. Furthermore, in non-stop mode |
+(*note Non-Stop Mode::) memory can be changed _while_ a gdb command is |
+executing. Therefore, by default, GDB only caches data known to be on |
+the stack(1) or in the code segment. Other regions of memory can be |
+explicitly marked as cacheable; *note Memory Region Attributes::. |
`set remotecache on' |
`set remotecache off' |
@@ -1699,18 +2325,28 @@ Other regions of memory can be explicitly marked as cacheable; see |
`set stack-cache on' |
`set stack-cache off' |
- Enable or disable caching of stack accesses. When `ON', use |
- caching. By default, this option is `ON'. |
+ Enable or disable caching of stack accesses. When `on', use |
+ caching. By default, this option is `on'. |
`show stack-cache' |
Show the current state of data caching for memory accesses. |
+`set code-cache on' |
+`set code-cache off' |
+ Enable or disable caching of code segment accesses. When `on', |
+ use caching. By default, this option is `on'. This improves |
+ performance of disassembly in remote debugging. |
+ |
+`show code-cache' |
+ Show the current state of target memory cache for code segment |
+ accesses. |
+ |
`info dcache [line]' |
- Print the information about the data cache performance. The |
- information displayed includes the dcache width and depth, and for |
- each cache line, its number, address, and how many times it was |
- referenced. This command is useful for debugging the data cache |
- operation. |
+ Print the information about the performance of data cache of the |
+ current inferior's address space. The information displayed |
+ includes the dcache width and depth, and for each cache line, its |
+ number, address, and how many times it was referenced. This |
+ command is useful for debugging the data cache operation. |
If a line number is specified, the contents of that line will be |
printed in hex. |
@@ -1723,12 +2359,11 @@ Other regions of memory can be explicitly marked as cacheable; see |
Must be a power of 2. |
`show dcache size' |
- Show maximum number of dcache entries. See also *Note info |
- dcache: Caching Remote Data. |
+ Show maximum number of dcache entries. *Note info dcache: Caching |
+ Target Data. |
`show dcache line-size' |
- Show default size of dcache lines. See also *Note info dcache: |
- Caching Remote Data. |
+ Show default size of dcache lines. |
---------- Footnotes ---------- |
@@ -1739,9 +2374,9 @@ a backtrace, and caching of stack reads provides a significant speed up |
of remote backtraces. |
-File: gdb.info, Node: Searching Memory, Prev: Caching Remote Data, Up: Data |
+File: gdb.info, Node: Searching Memory, Prev: Caching Target Data, Up: Data |
-10.21 Search Memory |
+10.22 Search Memory |
=================== |
Memory can be searched for a particular sequence of bytes with the |
@@ -1787,9 +2422,8 @@ N, maximum number of finds |
all finds. |
You can use strings as search values. Quote them with double-quotes |
-(`"'). The string value is copied into the search pattern byte by |
-byte, regardless of the endianness of the target and the size |
-specification. |
+(`"'). The string value is copied into the search pattern byte by byte, |
+regardless of the endianness of the target and the size specification. |
The address of each match found is printed as well as a count of the |
number of matches found. |
@@ -1959,7 +2593,7 @@ output: |
Locals at unknown address, Previous frame's sp is 0x7fffffffda30 |
The detection of all the possible code path executions can find them |
-ambiguous. There is no execution history stored (possible *Note |
+ambiguous. There is no execution history stored (possible *note |
Reverse Execution:: is never used for this purpose) and the last known |
caller could have reached the known callee by multiple different jump |
sequences. In such case GDB still tries to show at least all the |
@@ -2081,7 +2715,7 @@ different points in the program, a macro may have different |
definitions, or have no definition at all. If there is a current stack |
frame, GDB uses the macros in scope at that frame's source code line. |
Otherwise, GDB uses the macros in scope at the current listing location; |
-see *Note List::. |
+see *note List::. |
Whenever GDB evaluates an expression, it always expands any macro |
invocations present in the expression. GDB also provides the following |
@@ -2304,7 +2938,7 @@ targets. *Note Targets::. In addition, your remote target must know |
how to collect trace data. This functionality is implemented in the |
remote stub; however, none of the stubs distributed with GDB support |
tracepoints as of this writing. The format of the remote packets used |
-to implement tracepoints are described in *Note Tracepoint Packets::. |
+to implement tracepoints are described in *note Tracepoint Packets::. |
It is also possible to get trace data from a file, in a manner |
reminiscent of corefiles; you specify the filename, and use `tfind' to |
@@ -2829,6 +3463,8 @@ File: gdb.info, Node: Listing Tracepoints, Next: Listing Static Tracepoint Mar |
* its passcount as given by the `passcount N' command |
+ * the state about installed on target of each location |
+ |
(gdb) info trace |
Num Type Disp Enb Address What |
1 tracepoint keep y 0x0804ab57 in foo() at main.cxx:7 |
@@ -2838,6 +3474,15 @@ File: gdb.info, Node: Listing Tracepoints, Next: Listing Static Tracepoint Mar |
collect globfoo2 |
end |
pass count 1200 |
+ 2 tracepoint keep y <MULTIPLE> |
+ collect $eip |
+ 2.1 y 0x0804859c in func4 at change-loc.h:35 |
+ installed on target |
+ 2.2 y 0xb7ffc480 in func4 at change-loc.h:35 |
+ installed on target |
+ 2.3 y <PENDING> set_tracepoint |
+ 3 tracepoint keep y 0x080485b1 in foo at change-loc.c:29 |
+ not installed on target |
(gdb) |
This command can be abbreviated `info tp'. |
@@ -3002,6 +3647,22 @@ on the fly, otherwise it will not take effect until the next run. |
a trace file. |
+`set trace-buffer-size N' |
+`set trace-buffer-size unlimited' |
+ Request that the target use a trace buffer of N bytes. Not all |
+ targets will honor the request; they may have a compiled-in size |
+ for the trace buffer, or some other limitation. Set to a value of |
+ `unlimited' or `-1' to let the target use whatever size it likes. |
+ This is also the default. |
+ |
+`show trace-buffer-size' |
+ Show the current requested size for the trace buffer. Note that |
+ this will only match the actual size if the target supports |
+ size-setting, and was able to handle the requested size. For |
+ instance, if the target can only change buffer size between runs, |
+ this variable will not reflect the change until the next run |
+ starts. Use `tstatus' to get a report of the actual buffer size. |
+ |
`set trace-user TEXT' |
`show trace-user' |
@@ -3360,6 +4021,7 @@ trace data into a file, and later use that file as a source of trace |
data, via the `target tfile' command. |
`tsave [ -r ] FILENAME' |
+`tsave [-ctf] DIRNAME' |
Save the trace data to FILENAME. By default, this command assumes |
that FILENAME refers to the host filesystem, so if necessary GDB |
will copy raw trace data up from the target and then save it. If |
@@ -3367,15 +4029,36 @@ data, via the `target tfile' command. |
`-r' ("remote") to direct the target to save the data directly |
into FILENAME in its own filesystem, which may be more efficient |
if the trace buffer is very large. (Note, however, that `target |
- tfile' can only read from files accessible to the host.) |
+ tfile' can only read from files accessible to the host.) By |
+ default, this command will save trace frame in tfile format. You |
+ can supply the optional argument `-ctf' to save date in CTF |
+ format. The "Common Trace Format" (CTF) is proposed as a trace |
+ format that can be shared by multiple debugging and tracing tools. |
+ Please go to <http://www.efficios.com/ctf> to get more information. |
`target tfile FILENAME' |
- Use the file named FILENAME as a source of trace data. Commands |
- that examine data work as they do with a live target, but it is not |
- possible to run any new trace experiments. `tstatus' will report |
- the state of the trace run at the moment the data was saved, as |
- well as the current trace frame you are examining. FILENAME must |
- be on a filesystem accessible to the host. |
+`target ctf DIRNAME' |
+ Use the file named FILENAME or directory named DIRNAME as a source |
+ of trace data. Commands that examine data work as they do with a |
+ live target, but it is not possible to run any new trace |
+ experiments. `tstatus' will report the state of the trace run at |
+ the moment the data was saved, as well as the current trace frame |
+ you are examining. FILENAME or DIRNAME must be on a filesystem |
+ accessible to the host. |
+ |
+ (gdb) target ctf ctf.ctf |
+ (gdb) tfind |
+ Found trace frame 0, tracepoint 2 |
+ 39 ++a; /* set tracepoint 1 here */ |
+ (gdb) tdump |
+ Data collected at tracepoint 2, trace frame 0: |
+ i = 0 |
+ a = 0 |
+ b = 1 '\001' |
+ c = {"123", "456", "789", "123", "456", "789"} |
+ d = {{{a = 1, b = 2}, {a = 3, b = 4}}, {{a = 5, b = 6}, {a = 7, b = 8}}} |
+ (gdb) p b |
+ $1 = 1 |
@@ -3484,7 +4167,7 @@ program: |
be relocated and its symbols defined as if the overlay were at its |
mapped address. You can use GNU linker scripts to specify |
different load and relocation addresses for pieces of your |
- program; see *Note Overlay Description: (ld.info)Overlay |
+ program; see *note Overlay Description: (ld.info)Overlay |
Description. |
* The procedure for loading executable files onto your system must |
@@ -3561,7 +4244,7 @@ abbreviate this as `ov' or `ovly'. The commands are: |
`overlay auto' |
Enable "automatic" overlay debugging. In this mode, GDB consults |
a data structure the overlay manager maintains in the inferior to |
- see which overlays are mapped. For details, see *Note Automatic |
+ see which overlays are mapped. For details, see *note Automatic |
Overlay Debugging::. |
`overlay load-target' |
@@ -3925,25 +4608,18 @@ File: gdb.info, Node: Checks, Next: Supported Languages, Prev: Show, Up: Lan |
15.3 Type and Range Checking |
============================ |
- _Warning:_ In this release, the GDB commands for type and range |
- checking are included, but they do not yet have any effect. This |
- section documents the intended facilities. |
- |
- Some languages are designed to guard you against making seemingly |
-common errors through a series of compile- and run-time checks. These |
-include checking the type of arguments to functions and operators, and |
-making sure mathematical overflows are caught at run time. Checks such |
-as these help to ensure a program's correctness once it has been |
-compiled by eliminating type mismatches, and providing active checks |
-for range errors when your program is running. |
- |
- GDB can check for conditions like the above if you wish. Although |
-GDB does not check the statements in your program, it can check |
-expressions entered directly into GDB for evaluation via the `print' |
-command, for example. As with the working language, GDB can also |
-decide whether or not to check automatically based on your program's |
-source language. *Note Supported Languages: Supported Languages, for |
-the default settings of supported languages. |
+Some languages are designed to guard you against making seemingly common |
+errors through a series of compile- and run-time checks. These include |
+checking the type of arguments to functions and operators and making |
+sure mathematical overflows are caught at run time. Checks such as |
+these help to ensure a program's correctness once it has been compiled |
+by eliminating type mismatches and providing active checks for range |
+errors when your program is running. |
+ |
+ By default GDB checks for these errors according to the rules of the |
+current source language. Although GDB does not check the statements in |
+your program, it can check expressions entered directly into GDB for |
+evaluation via the `print' command, for example. |
* Menu: |
@@ -3956,64 +4632,44 @@ File: gdb.info, Node: Type Checking, Next: Range Checking, Up: Checks |
15.3.1 An Overview of Type Checking |
----------------------------------- |
-Some languages, such as Modula-2, are strongly typed, meaning that the |
+Some languages, such as C and C++, are strongly typed, meaning that the |
arguments to operators and functions have to be of the correct type, |
otherwise an error occurs. These checks prevent type mismatch errors |
from ever causing any run-time problems. For example, |
- 1 + 2 => 3 |
+ int klass::my_method(char *b) { return b ? 1 : 2; } |
+ |
+ (gdb) print obj.my_method (0) |
+ $1 = 2 |
but |
- error--> 1 + 2.3 |
- |
- The second example fails because the `CARDINAL' 1 is not |
-type-compatible with the `REAL' 2.3. |
- |
- For the expressions you use in GDB commands, you can tell the GDB |
-type checker to skip checking; to treat any mismatches as errors and |
-abandon the expression; or to only issue warnings when type mismatches |
-occur, but evaluate the expression anyway. When you choose the last of |
-these, GDB evaluates expressions like the second example above, but |
-also issues a warning. |
- |
- Even if you turn type checking off, there may be other reasons |
-related to type that prevent GDB from evaluating an expression. For |
-instance, GDB does not know how to add an `int' and a `struct foo'. |
-These particular type errors have nothing to do with the language in |
-use, and usually arise from expressions, such as the one described |
-above, which make little sense to evaluate anyway. |
- |
- Each language defines to what degree it is strict about type. For |
-instance, both Modula-2 and C require the arguments to arithmetical |
-operators to be numbers. In C, enumerated types and pointers can be |
-represented as numbers, so that they are valid arguments to mathematical |
-operators. *Note Supported Languages: Supported Languages, for further |
-details on specific languages. |
- |
- GDB provides some additional commands for controlling the type |
-checker: |
+ (gdb) print obj.my_method (0x1234) |
+ Cannot resolve method klass::my_method to any overloaded instance |
-`set check type auto' |
- Set type checking on or off based on the current working language. |
- *Note Supported Languages: Supported Languages, for the default |
- settings for each language. |
+ The second example fails because in C++ the integer constant |
+`0x1234' is not type-compatible with the pointer parameter type. |
+ |
+ For the expressions you use in GDB commands, you can tell GDB to not |
+enforce strict type checking or to treat any mismatches as errors and |
+abandon the expression; When type checking is disabled, GDB |
+successfully evaluates expressions like the second example above. |
+ |
+ Even if type checking is off, there may be other reasons related to |
+type that prevent GDB from evaluating an expression. For instance, GDB |
+does not know how to add an `int' and a `struct foo'. These particular |
+type errors have nothing to do with the language in use and usually |
+arise from expressions which make little sense to evaluate anyway. |
+ |
+ GDB provides some additional commands for controlling type checking: |
`set check type on' |
`set check type off' |
- Set type checking on or off, overriding the default setting for the |
- current working language. Issue a warning if the setting does not |
- match the language default. If any type mismatches occur in |
- evaluating an expression while type checking is on, GDB prints a |
+ Set strict type checking on or off. If any type mismatches occur |
+ in evaluating an expression while type checking is on, GDB prints a |
message and aborts evaluation of the expression. |
-`set check type warn' |
- Cause the type checker to issue warnings, but to always attempt to |
- evaluate the expression. Evaluating the expression may still be |
- impossible for other reasons. For example, GDB cannot add numbers |
- and structures. |
- |
-`show type' |
- Show the current setting of the type checker, and whether or not |
- GDB is setting it automatically. |
+`show check type' |
+ Show the current setting of type checking and whether GDB is |
+ enforcing strict type checking rules. |
File: gdb.info, Node: Range Checking, Prev: Type Checking, Up: Checks |
@@ -4381,7 +5037,7 @@ GDB expression handling can interpret most C++ expressions. |
explicit function signature to call an overloaded function, as in |
p 'foo(char,int)'('x', 13) |
- The GDB command-completion facility can simplify this; see *Note |
+ The GDB command-completion facility can simplify this; see *note |
Command Completion: Completion. |
4. GDB understands variables declared as C++ references; you can use |
@@ -4411,10 +5067,9 @@ File: gdb.info, Node: C Defaults, Next: C Checks, Prev: C Plus Plus Expressio |
15.4.1.4 C and C++ Defaults |
........................... |
-If you allow GDB to set type and range checking automatically, they |
-both default to `off' whenever the working language changes to C or |
-C++. This happens regardless of whether you or GDB selects the working |
-language. |
+If you allow GDB to set range checking automatically, it defaults to |
+`off' whenever the working language changes to C or C++. This happens |
+regardless of whether you or GDB selects the working language. |
If you allow GDB to set the language automatically, it recognizes |
source files whose names end with `.c', `.C', or `.cc', etc, and when |
@@ -4428,16 +5083,10 @@ File: gdb.info, Node: C Checks, Next: Debugging C, Prev: C Defaults, Up: C |
15.4.1.5 C and C++ Type and Range Checks |
........................................ |
-By default, when GDB parses C or C++ expressions, type checking is not |
-used. However, if you turn type checking on, GDB considers two |
-variables type equivalent if: |
- |
- * The two variables are structured and have the same structure, |
- union, or enumerated tag. |
- |
- * The two variables have the same type name, or types that have been |
- declared equivalent through `typedef'. |
- |
+By default, when GDB parses C or C++ expressions, strict type checking |
+is used. However, if you turn type checking off, GDB will allow |
+certain non-standard conversions, such as promoting integer constants |
+to pointers. |
Range checking, if turned on, is done on mathematical operations. |
Array indices are not checked, since they are often used to index a |
@@ -4478,6 +5127,7 @@ designed specifically for use with C++. Here is a summary: |
of any special classes. *Note Setting Breakpoints: Set Breaks. |
`catch throw' |
+`catch rethrow' |
`catch catch' |
Debug C++ exception handling using these commands. *Note Setting |
Catchpoints: Set Catchpoints. |
@@ -4515,7 +5165,7 @@ designed specifically for use with C++. Here is a summary: |
Enable overload resolution for C++ expression evaluation. The |
default is on. For overloaded functions, GDB evaluates the |
arguments and searches for a function whose signature matches the |
- argument types, using the standard C++ conversion rules (see *Note |
+ argument types, using the standard C++ conversion rules (see *note |
C++ Expressions: C Plus Plus Expressions, for details). If it |
cannot find a match, it emits a message. |
@@ -4552,8 +5202,8 @@ extension to support decimal floating-point arithmetic. |
There are two encodings in use, depending on the architecture: BID |
(Binary Integer Decimal) for x86 and x86-64, and DPD (Densely Packed |
-Decimal) for PowerPC. GDB will use the appropriate encoding for the |
-configured target. |
+Decimal) for PowerPC and S/390. GDB will use the appropriate encoding |
+for the configured target. |
Because of a limitation in `libdecnumber', the library used by GDB |
to manipulate decimal floating point numbers, it is not possible to |
@@ -4566,7 +5216,7 @@ underflow, overflow and divide by zero exceptions. |
In the PowerPC architecture, GDB provides a set of pseudo-registers |
to inspect `_Decimal128' values stored in floating point registers. |
-See *Note PowerPC: PowerPC. for more details. |
+See *note PowerPC: PowerPC. for more details. |
File: gdb.info, Node: D, Next: Go, Prev: C, Up: Supported Languages |
@@ -4625,8 +5275,8 @@ File: gdb.info, Node: Objective-C, Next: OpenCL C, Prev: Go, Up: Supported L |
------------------ |
This section provides information about some commands and command |
-options that are useful for debugging Objective-C code. See also *Note |
-info classes: Symbols, and *Note info selectors: Symbols, for a few |
+options that are useful for debugging Objective-C code. See also *note |
+info classes: Symbols, and *note info selectors: Symbols, for a few |
more commands specific to Objective-C support. |
* Menu: |
@@ -4803,7 +5453,7 @@ File: gdb.info, Node: Fortran Defaults, Next: Special Fortran Commands, Prev: |
Fortran symbols are usually case-insensitive, so GDB by default uses |
case-insensitive matches for Fortran symbols. You can change that with |
-the `set case-insensitive' command, see *Note Symbols::, for the |
+the `set case-insensitive' command, see *note Symbols::, for the |
details. |
@@ -5382,6 +6032,7 @@ difficult. |
* Omissions from Ada:: Restrictions on the Ada expression syntax. |
* Additions to Ada:: Extensions of the Ada expression syntax. |
* Stopping Before Main Program:: Debugging the program during elaboration. |
+* Ada Exceptions:: Ada Exceptions |
* Ada Tasks:: Listing and setting breakpoints in tasks. |
* Ada Tasks and Core Files:: Tasking Support when Debugging Core Files |
* Ravenscar Profile:: Tasking Support when using the Ravenscar |
@@ -5629,7 +6280,7 @@ additions specific to Ada: |
-File: gdb.info, Node: Stopping Before Main Program, Next: Ada Tasks, Prev: Additions to Ada, Up: Ada |
+File: gdb.info, Node: Stopping Before Main Program, Next: Ada Exceptions, Prev: Additions to Ada, Up: Ada |
15.4.9.4 Stopping at the Very Beginning |
....................................... |
@@ -5641,9 +6292,43 @@ Manual, the elaboration code is invoked from a procedure called |
simply use the following two commands: `tbreak adainit' and `run'. |
-File: gdb.info, Node: Ada Tasks, Next: Ada Tasks and Core Files, Prev: Stopping Before Main Program, Up: Ada |
+File: gdb.info, Node: Ada Exceptions, Next: Ada Tasks, Prev: Stopping Before Main Program, Up: Ada |
+ |
+15.4.9.5 Ada Exceptions |
+....................... |
+ |
+A command is provided to list all Ada exceptions: |
+ |
+`info exceptions' |
+`info exceptions REGEXP' |
+ The `info exceptions' command allows you to list all Ada exceptions |
+ defined within the program being debugged, as well as their |
+ addresses. With a regular expression, REGEXP, as argument, only |
+ those exceptions whose names match REGEXP are listed. |
+ |
+ Below is a small example, showing how the command can be used, first |
+without argument, and next with a regular expression passed as an |
+argument. |
+ |
+ (gdb) info exceptions |
+ All defined Ada exceptions: |
+ constraint_error: 0x613da0 |
+ program_error: 0x613d20 |
+ storage_error: 0x613ce0 |
+ tasking_error: 0x613ca0 |
+ const.aint_global_e: 0x613b00 |
+ (gdb) info exceptions const.aint |
+ All Ada exceptions matching regular expression "const.aint": |
+ constraint_error: 0x613da0 |
+ const.aint_global_e: 0x613b00 |
+ |
+ It is also possible to ask GDB to stop your program's execution when |
+an exception is raised. For more details, see *note Set Catchpoints::. |
+ |
+ |
+File: gdb.info, Node: Ada Tasks, Next: Ada Tasks and Core Files, Prev: Ada Exceptions, Up: Ada |
-15.4.9.5 Extensions for Ada Tasks |
+15.4.9.6 Extensions for Ada Tasks |
................................. |
Support for Ada tasks is analogous to that for threads (*note |
@@ -5777,7 +6462,7 @@ Threads::). GDB provides the following task-related commands: |
`break LINESPEC task TASKNO if ...' |
These commands are like the `break ... thread ...' command (*note |
Thread Stops::). LINESPEC specifies source lines, as described in |
- *Note Specify Location::. |
+ *note Specify Location::. |
Use the qualifier `task TASKNO' with a breakpoint command to |
specify that you only want GDB to stop the program when a |
@@ -5819,7 +6504,7 @@ Threads::). GDB provides the following task-related commands: |
File: gdb.info, Node: Ada Tasks and Core Files, Next: Ravenscar Profile, Prev: Ada Tasks, Up: Ada |
-15.4.9.6 Tasking Support when Debugging Core Files |
+15.4.9.7 Tasking Support when Debugging Core Files |
.................................................. |
When inspecting a core file, as opposed to debugging a live program, |
@@ -5838,7 +6523,7 @@ of the core file before inspecting it with GDB. |
File: gdb.info, Node: Ravenscar Profile, Next: Ada Glitches, Prev: Ada Tasks and Core Files, Up: Ada |
-15.4.9.7 Tasking Support when using the Ravenscar Profile |
+15.4.9.8 Tasking Support when using the Ravenscar Profile |
......................................................... |
The "Ravenscar Profile" is a subset of the Ada tasking features, |
@@ -5865,7 +6550,7 @@ requirements. |
File: gdb.info, Node: Ada Glitches, Prev: Ravenscar Profile, Up: Ada |
-15.4.9.8 Known Peculiarities of Ada Mode |
+15.4.9.9 Known Peculiarities of Ada Mode |
........................................ |
Besides the omissions listed previously (*note Omissions from Ada::), |
@@ -5982,6 +6667,36 @@ looks up the value of `x' in the scope of the file `foo.c'. |
This command shows the current setting of case sensitivity for |
symbols lookups. |
+`set print type methods' |
+`set print type methods on' |
+`set print type methods off' |
+ Normally, when GDB prints a class, it displays any methods |
+ declared in that class. You can control this behavior either by |
+ passing the appropriate flag to `ptype', or using `set print type |
+ methods'. Specifying `on' will cause GDB to display the methods; |
+ this is the default. Specifying `off' will cause GDB to omit the |
+ methods. |
+ |
+`show print type methods' |
+ This command shows the current setting of method display when |
+ printing classes. |
+ |
+`set print type typedefs' |
+`set print type typedefs on' |
+`set print type typedefs off' |
+ Normally, when GDB prints a class, it displays any typedefs |
+ defined in that class. You can control this behavior either by |
+ passing the appropriate flag to `ptype', or using `set print type |
+ typedefs'. Specifying `on' will cause GDB to display the typedef |
+ definitions; this is the default. Specifying `off' will cause GDB |
+ to omit the typedef definitions. Note that this controls whether |
+ the typedef definition itself is printed, not whether typedef |
+ names are substituted when printing other types. |
+ |
+`show print type typedefs' |
+ This command shows the current setting of typedef display when |
+ printing classes. |
+ |
`info address SYMBOL' |
Describe where the data for SYMBOL is stored. For a register |
variable, this says which register it is kept in. For a |
@@ -6012,7 +6727,7 @@ looks up the value of `x' in the scope of the file `foo.c'. |
(gdb) info symbol 0x2aaaac2811cf |
__read_nocancel + 6 in section .text of /usr/lib64/libc.so.6 |
-`whatis [ARG]' |
+`whatis[/FLAGS] [ARG]' |
Print the data type of ARG, which can be either an expression or a |
name of a data type. With no argument, print the data type of |
`$', the last value in the value history. |
@@ -6040,7 +6755,34 @@ looks up the value of `x' in the scope of the file `foo.c'. |
CLASS-NAME', `struct STRUCT-TAG', `union UNION-TAG' or `enum |
ENUM-TAG'. |
-`ptype [ARG]' |
+ FLAGS can be used to modify how the type is displayed. Available |
+ flags are: |
+ |
+ `r' |
+ Display in "raw" form. Normally, GDB substitutes template |
+ parameters and typedefs defined in a class when printing the |
+ class' members. The `/r' flag disables this. |
+ |
+ `m' |
+ Do not print methods defined in the class. |
+ |
+ `M' |
+ Print methods defined in the class. This is the default, but |
+ the flag exists in case you change the default with `set |
+ print type methods'. |
+ |
+ `t' |
+ Do not print typedefs defined in the class. Note that this |
+ controls whether the typedef definition itself is printed, |
+ not whether typedef names are substituted when printing other |
+ types. |
+ |
+ `T' |
+ Print typedefs defined in the class. This is the default, |
+ but the flag exists in case you change the default with `set |
+ print type typedefs'. |
+ |
+`ptype[/FLAGS] [ARG]' |
`ptype' accepts the same arguments as `whatis', but prints a |
detailed description of the type, instead of just the name of the |
type. *Note Expressions: Expressions. |
@@ -6119,6 +6861,19 @@ looks up the value of `x' in the scope of the file `foo.c'. |
`whatis', it does not print a detailed description; second, it |
lists all source files where a type is defined. |
+`info type-printers' |
+ Versions of GDB that ship with Python scripting enabled may have |
+ "type printers" available. When using `ptype' or `whatis', these |
+ printers are consulted when the name of a type is needed. *Note |
+ Type Printing API::, for more information on writing type printers. |
+ |
+ `info type-printers' displays all the available type printers. |
+ |
+`enable type-printer NAME...' |
+ |
+`disable type-printer NAME...' |
+ These commands can be used to enable or disable type printers. |
+ |
`info scope LOCATION' |
List all the variables local to a particular scope. This command |
accepts a LOCATION argument--a function name, a source line, or an |
@@ -6137,7 +6892,7 @@ looks up the value of `x' in the scope of the file `foo.c'. |
Symbol repeat is a local variable at frame offset -8, length 4. |
This command is especially useful for determining what data to |
- collect during a "trace experiment", see *Note collect: Tracepoint |
+ collect during a "trace experiment", see *note collect: Tracepoint |
Actions. |
`info source' |
@@ -6401,11 +7156,13 @@ it stopped, with the `continue' command. You can instead continue at |
an address of your own choosing, with the following commands: |
`jump LINESPEC' |
+`j LINESPEC' |
`jump LOCATION' |
+`j LOCATION' |
Resume execution at line LINESPEC or at address given by LOCATION. |
Execution stops again immediately if there is a breakpoint there. |
- *Note Specify Location::, for a description of the different |
- forms of LINESPEC and LOCATION. It is common practice to use the |
+ *Note Specify Location::, for a description of the different forms |
+ of LINESPEC and LOCATION. It is common practice to use the |
`tbreak' command in conjunction with `jump'. *Note Setting |
Breakpoints: Set Breaks. |
@@ -6449,9 +7206,9 @@ File: gdb.info, Node: Signaling, Next: Returning, Prev: Jumping, Up: Alterin |
Alternatively, if SIGNAL is zero, continue execution without |
giving a signal. This is useful when your program stopped on |
- account of a signal and would ordinary see the signal when resumed |
- with the `continue' command; `signal 0' causes it to resume |
- without a signal. |
+ account of a signal and would ordinarily see the signal when |
+ resumed with the `continue' command; `signal 0' causes it to |
+ resume without a signal. |
`signal' does not repeat when you press <RET> a second time after |
executing the command. |
@@ -6644,825 +7401,8 @@ the core dump file. |
* Files:: Commands to specify files |
* Separate Debug Files:: Debugging information in separate files |
+* MiniDebugInfo:: Debugging information in a special section |
* Index Files:: Index files speed up GDB |
* Symbol Errors:: Errors reading symbol files |
* Data Files:: GDB data files |
- |
-File: gdb.info, Node: Files, Next: Separate Debug Files, Up: GDB Files |
- |
-18.1 Commands to Specify Files |
-============================== |
- |
-You may want to specify executable and core dump file names. The usual |
-way to do this is at start-up time, using the arguments to GDB's |
-start-up commands (*note Getting In and Out of GDB: Invocation.). |
- |
- Occasionally it is necessary to change to a different file during a |
-GDB session. Or you may run GDB and forget to specify a file you want |
-to use. Or you are debugging a remote target via `gdbserver' (*note |
-file: Server.). In these situations the GDB commands to specify new |
-files are useful. |
- |
-`file FILENAME' |
- Use FILENAME as the program to be debugged. It is read for its |
- symbols and for the contents of pure memory. It is also the |
- program executed when you use the `run' command. If you do not |
- specify a directory and the file is not found in the GDB working |
- directory, GDB uses the environment variable `PATH' as a list of |
- directories to search, just as the shell does when looking for a |
- program to run. You can change the value of this variable, for |
- both GDB and your program, using the `path' command. |
- |
- You can load unlinked object `.o' files into GDB using the `file' |
- command. You will not be able to "run" an object file, but you |
- can disassemble functions and inspect variables. Also, if the |
- underlying BFD functionality supports it, you could use `gdb |
- -write' to patch object files using this technique. Note that GDB |
- can neither interpret nor modify relocations in this case, so |
- branches and some initialized variables will appear to go to the |
- wrong place. But this feature is still handy from time to time. |
- |
-`file' |
- `file' with no argument makes GDB discard any information it has |
- on both executable file and the symbol table. |
- |
-`exec-file [ FILENAME ]' |
- Specify that the program to be run (but not the symbol table) is |
- found in FILENAME. GDB searches the environment variable `PATH' |
- if necessary to locate your program. Omitting FILENAME means to |
- discard information on the executable file. |
- |
-`symbol-file [ FILENAME ]' |
- Read symbol table information from file FILENAME. `PATH' is |
- searched when necessary. Use the `file' command to get both symbol |
- table and program to run from the same file. |
- |
- `symbol-file' with no argument clears out GDB information on your |
- program's symbol table. |
- |
- The `symbol-file' command causes GDB to forget the contents of |
- some breakpoints and auto-display expressions. This is because |
- they may contain pointers to the internal data recording symbols |
- and data types, which are part of the old symbol table data being |
- discarded inside GDB. |
- |
- `symbol-file' does not repeat if you press <RET> again after |
- executing it once. |
- |
- When GDB is configured for a particular environment, it |
- understands debugging information in whatever format is the |
- standard generated for that environment; you may use either a GNU |
- compiler, or other compilers that adhere to the local conventions. |
- Best results are usually obtained from GNU compilers; for example, |
- using `GCC' you can generate debugging information for optimized |
- code. |
- |
- For most kinds of object files, with the exception of old SVR3 |
- systems using COFF, the `symbol-file' command does not normally |
- read the symbol table in full right away. Instead, it scans the |
- symbol table quickly to find which source files and which symbols |
- are present. The details are read later, one source file at a |
- time, as they are needed. |
- |
- The purpose of this two-stage reading strategy is to make GDB |
- start up faster. For the most part, it is invisible except for |
- occasional pauses while the symbol table details for a particular |
- source file are being read. (The `set verbose' command can turn |
- these pauses into messages if desired. *Note Optional Warnings |
- and Messages: Messages/Warnings.) |
- |
- We have not implemented the two-stage strategy for COFF yet. When |
- the symbol table is stored in COFF format, `symbol-file' reads the |
- symbol table data in full right away. Note that "stabs-in-COFF" |
- still does the two-stage strategy, since the debug info is actually |
- in stabs format. |
- |
-`symbol-file [ -readnow ] FILENAME' |
-`file [ -readnow ] FILENAME' |
- You can override the GDB two-stage strategy for reading symbol |
- tables by using the `-readnow' option with any of the commands that |
- load symbol table information, if you want to be sure GDB has the |
- entire symbol table available. |
- |
-`core-file [FILENAME]' |
-`core' |
- Specify the whereabouts of a core dump file to be used as the |
- "contents of memory". Traditionally, core files contain only some |
- parts of the address space of the process that generated them; GDB |
- can access the executable file itself for other parts. |
- |
- `core-file' with no argument specifies that no core file is to be |
- used. |
- |
- Note that the core file is ignored when your program is actually |
- running under GDB. So, if you have been running your program and |
- you wish to debug a core file instead, you must kill the |
- subprocess in which the program is running. To do this, use the |
- `kill' command (*note Killing the Child Process: Kill Process.). |
- |
-`add-symbol-file FILENAME ADDRESS' |
-`add-symbol-file FILENAME ADDRESS [ -readnow ]' |
-`add-symbol-file FILENAME ADDRESS -s SECTION ADDRESS ...' |
- The `add-symbol-file' command reads additional symbol table |
- information from the file FILENAME. You would use this command |
- when FILENAME has been dynamically loaded (by some other means) |
- into the program that is running. ADDRESS should be the memory |
- address at which the file has been loaded; GDB cannot figure this |
- out for itself. You can additionally specify an arbitrary number |
- of `-s SECTION ADDRESS' pairs, to give an explicit section name |
- and base address for that section. You can specify any ADDRESS as |
- an expression. |
- |
- The symbol table of the file FILENAME is added to the symbol table |
- originally read with the `symbol-file' command. You can use the |
- `add-symbol-file' command any number of times; the new symbol data |
- thus read keeps adding to the old. To discard all old symbol data |
- instead, use the `symbol-file' command without any arguments. |
- |
- Although FILENAME is typically a shared library file, an |
- executable file, or some other object file which has been fully |
- relocated for loading into a process, you can also load symbolic |
- information from relocatable `.o' files, as long as: |
- |
- * the file's symbolic information refers only to linker symbols |
- defined in that file, not to symbols defined by other object |
- files, |
- |
- * every section the file's symbolic information refers to has |
- actually been loaded into the inferior, as it appears in the |
- file, and |
- |
- * you can determine the address at which every section was |
- loaded, and provide these to the `add-symbol-file' command. |
- |
- Some embedded operating systems, like Sun Chorus and VxWorks, can |
- load relocatable files into an already running program; such |
- systems typically make the requirements above easy to meet. |
- However, it's important to recognize that many native systems use |
- complex link procedures (`.linkonce' section factoring and C++ |
- constructor table assembly, for example) that make the |
- requirements difficult to meet. In general, one cannot assume |
- that using `add-symbol-file' to read a relocatable object file's |
- symbolic information will have the same effect as linking the |
- relocatable object file into the program in the normal way. |
- |
- `add-symbol-file' does not repeat if you press <RET> after using |
- it. |
- |
-`add-symbol-file-from-memory ADDRESS' |
- Load symbols from the given ADDRESS in a dynamically loaded object |
- file whose image is mapped directly into the inferior's memory. |
- For example, the Linux kernel maps a `syscall DSO' into each |
- process's address space; this DSO provides kernel-specific code for |
- some system calls. The argument can be any expression whose |
- evaluation yields the address of the file's shared object file |
- header. For this command to work, you must have used |
- `symbol-file' or `exec-file' commands in advance. |
- |
-`add-shared-symbol-files LIBRARY-FILE' |
-`assf LIBRARY-FILE' |
- The `add-shared-symbol-files' command can currently be used only |
- in the Cygwin build of GDB on MS-Windows OS, where it is an alias |
- for the `dll-symbols' command (*note Cygwin Native::). GDB |
- automatically looks for shared libraries, however if GDB does not |
- find yours, you can invoke `add-shared-symbol-files'. It takes |
- one argument: the shared library's file name. `assf' is a |
- shorthand alias for `add-shared-symbol-files'. |
- |
-`section SECTION ADDR' |
- The `section' command changes the base address of the named |
- SECTION of the exec file to ADDR. This can be used if the exec |
- file does not contain section addresses, (such as in the `a.out' |
- format), or when the addresses specified in the file itself are |
- wrong. Each section must be changed separately. The `info files' |
- command, described below, lists all the sections and their |
- addresses. |
- |
-`info files' |
-`info target' |
- `info files' and `info target' are synonymous; both print the |
- current target (*note Specifying a Debugging Target: Targets.), |
- including the names of the executable and core dump files |
- currently in use by GDB, and the files from which symbols were |
- loaded. The command `help target' lists all possible targets |
- rather than current ones. |
- |
-`maint info sections' |
- Another command that can give you extra information about program |
- sections is `maint info sections'. In addition to the section |
- information displayed by `info files', this command displays the |
- flags and file offset of each section in the executable and core |
- dump files. In addition, `maint info sections' provides the |
- following command options (which may be arbitrarily combined): |
- |
- `ALLOBJ' |
- Display sections for all loaded object files, including |
- shared libraries. |
- |
- `SECTIONS' |
- Display info only for named SECTIONS. |
- |
- `SECTION-FLAGS' |
- Display info only for sections for which SECTION-FLAGS are |
- true. The section flags that GDB currently knows about are: |
- `ALLOC' |
- Section will have space allocated in the process when |
- loaded. Set for all sections except those containing |
- debug information. |
- |
- `LOAD' |
- Section will be loaded from the file into the child |
- process memory. Set for pre-initialized code and data, |
- clear for `.bss' sections. |
- |
- `RELOC' |
- Section needs to be relocated before loading. |
- |
- `READONLY' |
- Section cannot be modified by the child process. |
- |
- `CODE' |
- Section contains executable code only. |
- |
- `DATA' |
- Section contains data only (no executable code). |
- |
- `ROM' |
- Section will reside in ROM. |
- |
- `CONSTRUCTOR' |
- Section contains data for constructor/destructor lists. |
- |
- `HAS_CONTENTS' |
- Section is not empty. |
- |
- `NEVER_LOAD' |
- An instruction to the linker to not output the section. |
- |
- `COFF_SHARED_LIBRARY' |
- A notification to the linker that the section contains |
- COFF shared library information. |
- |
- `IS_COMMON' |
- Section contains common symbols. |
- |
-`set trust-readonly-sections on' |
- Tell GDB that readonly sections in your object file really are |
- read-only (i.e. that their contents will not change). In that |
- case, GDB can fetch values from these sections out of the object |
- file, rather than from the target program. For some targets |
- (notably embedded ones), this can be a significant enhancement to |
- debugging performance. |
- |
- The default is off. |
- |
-`set trust-readonly-sections off' |
- Tell GDB not to trust readonly sections. This means that the |
- contents of the section might change while the program is running, |
- and must therefore be fetched from the target when needed. |
- |
-`show trust-readonly-sections' |
- Show the current setting of trusting readonly sections. |
- |
- All file-specifying commands allow both absolute and relative file |
-names as arguments. GDB always converts the file name to an absolute |
-file name and remembers it that way. |
- |
- GDB supports GNU/Linux, MS-Windows, HP-UX, SunOS, SVr4, Irix, and |
-IBM RS/6000 AIX shared libraries. |
- |
- On MS-Windows GDB must be linked with the Expat library to support |
-shared libraries. *Note Expat::. |
- |
- GDB automatically loads symbol definitions from shared libraries |
-when you use the `run' command, or when you examine a core file. |
-(Before you issue the `run' command, GDB does not understand references |
-to a function in a shared library, however--unless you are debugging a |
-core file). |
- |
- On HP-UX, if the program loads a library explicitly, GDB |
-automatically loads the symbols at the time of the `shl_load' call. |
- |
- There are times, however, when you may wish to not automatically load |
-symbol definitions from shared libraries, such as when they are |
-particularly large or there are many of them. |
- |
- To control the automatic loading of shared library symbols, use the |
-commands: |
- |
-`set auto-solib-add MODE' |
- If MODE is `on', symbols from all shared object libraries will be |
- loaded automatically when the inferior begins execution, you |
- attach to an independently started inferior, or when the dynamic |
- linker informs GDB that a new library has been loaded. If MODE is |
- `off', symbols must be loaded manually, using the `sharedlibrary' |
- command. The default value is `on'. |
- |
- If your program uses lots of shared libraries with debug info that |
- takes large amounts of memory, you can decrease the GDB memory |
- footprint by preventing it from automatically loading the symbols |
- from shared libraries. To that end, type `set auto-solib-add off' |
- before running the inferior, then load each library whose debug |
- symbols you do need with `sharedlibrary REGEXP', where REGEXP is a |
- regular expression that matches the libraries whose symbols you |
- want to be loaded. |
- |
-`show auto-solib-add' |
- Display the current autoloading mode. |
- |
- To explicitly load shared library symbols, use the `sharedlibrary' |
-command: |
- |
-`info share REGEX' |
-`info sharedlibrary REGEX' |
- Print the names of the shared libraries which are currently loaded |
- that match REGEX. If REGEX is omitted then print all shared |
- libraries that are loaded. |
- |
-`sharedlibrary REGEX' |
-`share REGEX' |
- Load shared object library symbols for files matching a Unix |
- regular expression. As with files loaded automatically, it only |
- loads shared libraries required by your program for a core file or |
- after typing `run'. If REGEX is omitted all shared libraries |
- required by your program are loaded. |
- |
-`nosharedlibrary' |
- Unload all shared object library symbols. This discards all |
- symbols that have been loaded from all shared libraries. Symbols |
- from shared libraries that were loaded by explicit user requests |
- are not discarded. |
- |
- Sometimes you may wish that GDB stops and gives you control when any |
-of shared library events happen. The best way to do this is to use |
-`catch load' and `catch unload' (*note Set Catchpoints::). |
- |
- GDB also supports the the `set stop-on-solib-events' command for |
-this. This command exists for historical reasons. It is less useful |
-than setting a catchpoint, because it does not allow for conditions or |
-commands as a catchpoint does. |
- |
-`set stop-on-solib-events' |
- This command controls whether GDB should give you control when the |
- dynamic linker notifies it about some shared library event. The |
- most common event of interest is loading or unloading of a new |
- shared library. |
- |
-`show stop-on-solib-events' |
- Show whether GDB stops and gives you control when shared library |
- events happen. |
- |
- Shared libraries are also supported in many cross or remote debugging |
-configurations. GDB needs to have access to the target's libraries; |
-this can be accomplished either by providing copies of the libraries on |
-the host system, or by asking GDB to automatically retrieve the |
-libraries from the target. If copies of the target libraries are |
-provided, they need to be the same as the target libraries, although the |
-copies on the target can be stripped as long as the copies on the host |
-are not. |
- |
- For remote debugging, you need to tell GDB where the target |
-libraries are, so that it can load the correct copies--otherwise, it |
-may try to load the host's libraries. GDB has two variables to specify |
-the search directories for target libraries. |
- |
-`set sysroot PATH' |
- Use PATH as the system root for the program being debugged. Any |
- absolute shared library paths will be prefixed with PATH; many |
- runtime loaders store the absolute paths to the shared library in |
- the target program's memory. If you use `set sysroot' to find |
- shared libraries, they need to be laid out in the same way that |
- they are on the target, with e.g. a `/lib' and `/usr/lib' hierarchy |
- under PATH. |
- |
- If PATH starts with the sequence `remote:', GDB will retrieve the |
- target libraries from the remote system. This is only supported |
- when using a remote target that supports the `remote get' command |
- (*note Sending files to a remote system: File Transfer.). The |
- part of PATH following the initial `remote:' (if present) is used |
- as system root prefix on the remote file system. (1) |
- |
- For targets with an MS-DOS based filesystem, such as MS-Windows and |
- SymbianOS, GDB tries prefixing a few variants of the target |
- absolute file name with PATH. But first, on Unix hosts, GDB |
- converts all backslash directory separators into forward slashes, |
- because the backslash is not a directory separator on Unix: |
- |
- c:\foo\bar.dll => c:/foo/bar.dll |
- |
- Then, GDB attempts prefixing the target file name with PATH, and |
- looks for the resulting file name in the host file system: |
- |
- c:/foo/bar.dll => /path/to/sysroot/c:/foo/bar.dll |
- |
- If that does not find the shared library, GDB tries removing the |
- `:' character from the drive spec, both for convenience, and, for |
- the case of the host file system not supporting file names with |
- colons: |
- |
- c:/foo/bar.dll => /path/to/sysroot/c/foo/bar.dll |
- |
- This makes it possible to have a system root that mirrors a target |
- with more than one drive. E.g., you may want to setup your local |
- copies of the target system shared libraries like so (note `c' vs |
- `z'): |
- |
- `/path/to/sysroot/c/sys/bin/foo.dll' |
- `/path/to/sysroot/c/sys/bin/bar.dll' |
- `/path/to/sysroot/z/sys/bin/bar.dll' |
- |
- and point the system root at `/path/to/sysroot', so that GDB can |
- find the correct copies of both `c:\sys\bin\foo.dll', and |
- `z:\sys\bin\bar.dll'. |
- |
- If that still does not find the shared library, GDB tries removing |
- the whole drive spec from the target file name: |
- |
- c:/foo/bar.dll => /path/to/sysroot/foo/bar.dll |
- |
- This last lookup makes it possible to not care about the drive |
- name, if you don't want or need to. |
- |
- The `set solib-absolute-prefix' command is an alias for `set |
- sysroot'. |
- |
- You can set the default system root by using the configure-time |
- `--with-sysroot' option. If the system root is inside GDB's |
- configured binary prefix (set with `--prefix' or `--exec-prefix'), |
- then the default system root will be updated automatically if the |
- installed GDB is moved to a new location. |
- |
-`show sysroot' |
- Display the current shared library prefix. |
- |
-`set solib-search-path PATH' |
- If this variable is set, PATH is a colon-separated list of |
- directories to search for shared libraries. `solib-search-path' |
- is used after `sysroot' fails to locate the library, or if the |
- path to the library is relative instead of absolute. If you want |
- to use `solib-search-path' instead of `sysroot', be sure to set |
- `sysroot' to a nonexistent directory to prevent GDB from finding |
- your host's libraries. `sysroot' is preferred; setting it to a |
- nonexistent directory may interfere with automatic loading of |
- shared library symbols. |
- |
-`show solib-search-path' |
- Display the current shared library search path. |
- |
-`set target-file-system-kind KIND' |
- Set assumed file system kind for target reported file names. |
- |
- Shared library file names as reported by the target system may not |
- make sense as is on the system GDB is running on. For example, |
- when remote debugging a target that has MS-DOS based file system |
- semantics, from a Unix host, the target may be reporting to GDB a |
- list of loaded shared libraries with file names such as |
- `c:\Windows\kernel32.dll'. On Unix hosts, there's no concept of |
- drive letters, so the `c:\' prefix is not normally understood as |
- indicating an absolute file name, and neither is the backslash |
- normally considered a directory separator character. In that case, |
- the native file system would interpret this whole absolute file |
- name as a relative file name with no directory components. This |
- would make it impossible to point GDB at a copy of the remote |
- target's shared libraries on the host using `set sysroot', and |
- impractical with `set solib-search-path'. Setting |
- `target-file-system-kind' to `dos-based' tells GDB to interpret |
- such file names similarly to how the target would, and to map them |
- to file names valid on GDB's native file system semantics. The |
- value of KIND can be `"auto"', in addition to one of the supported |
- file system kinds. In that case, GDB tries to determine the |
- appropriate file system variant based on the current target's |
- operating system (*note Configuring the Current ABI: ABI.). The |
- supported file system settings are: |
- |
- `unix' |
- Instruct GDB to assume the target file system is of Unix |
- kind. Only file names starting the forward slash (`/') |
- character are considered absolute, and the directory |
- separator character is also the forward slash. |
- |
- `dos-based' |
- Instruct GDB to assume the target file system is DOS based. |
- File names starting with either a forward slash, or a drive |
- letter followed by a colon (e.g., `c:'), are considered |
- absolute, and both the slash (`/') and the backslash (`\\') |
- characters are considered directory separators. |
- |
- `auto' |
- Instruct GDB to use the file system kind associated with the |
- target operating system (*note Configuring the Current ABI: |
- ABI.). This is the default. |
- |
- When processing file names provided by the user, GDB frequently |
-needs to compare them to the file names recorded in the program's debug |
-info. Normally, GDB compares just the "base names" of the files as |
-strings, which is reasonably fast even for very large programs. (The |
-base name of a file is the last portion of its name, after stripping |
-all the leading directories.) This shortcut in comparison is based |
-upon the assumption that files cannot have more than one base name. |
-This is usually true, but references to files that use symlinks or |
-similar filesystem facilities violate that assumption. If your program |
-records files using such facilities, or if you provide file names to |
-GDB using symlinks etc., you can set `basenames-may-differ' to `true' |
-to instruct GDB to completely canonicalize each pair of file names it |
-needs to compare. This will make file-name comparisons accurate, but |
-at a price of a significant slowdown. |
- |
-`set basenames-may-differ' |
- Set whether a source file may have multiple base names. |
- |
-`show basenames-may-differ' |
- Show whether a source file may have multiple base names. |
- |
- ---------- Footnotes ---------- |
- |
- (1) If you want to specify a local system root using a directory |
-that happens to be named `remote:', you need to use some equivalent |
-variant of the name like `./remote:'. |
- |
- |
-File: gdb.info, Node: Separate Debug Files, Next: Index Files, Prev: Files, Up: GDB Files |
- |
-18.2 Debugging Information in Separate Files |
-============================================ |
- |
-GDB allows you to put a program's debugging information in a file |
-separate from the executable itself, in a way that allows GDB to find |
-and load the debugging information automatically. Since debugging |
-information can be very large--sometimes larger than the executable |
-code itself--some systems distribute debugging information for their |
-executables in separate files, which users can install only when they |
-need to debug a problem. |
- |
- GDB supports two ways of specifying the separate debug info file: |
- |
- * The executable contains a "debug link" that specifies the name of |
- the separate debug info file. The separate debug file's name is |
- usually `EXECUTABLE.debug', where EXECUTABLE is the name of the |
- corresponding executable file without leading directories (e.g., |
- `ls.debug' for `/usr/bin/ls'). In addition, the debug link |
- specifies a 32-bit "Cyclic Redundancy Check" (CRC) checksum for |
- the debug file, which GDB uses to validate that the executable and |
- the debug file came from the same build. |
- |
- * The executable contains a "build ID", a unique bit string that is |
- also present in the corresponding debug info file. (This is |
- supported only on some operating systems, notably those which use |
- the ELF format for binary files and the GNU Binutils.) For more |
- details about this feature, see the description of the `--build-id' |
- command-line option in *Note Command Line Options: |
- (ld.info)Options. The debug info file's name is not specified |
- explicitly by the build ID, but can be computed from the build ID, |
- see below. |
- |
- Depending on the way the debug info file is specified, GDB uses two |
-different methods of looking for the debug file: |
- |
- * For the "debug link" method, GDB looks up the named file in the |
- directory of the executable file, then in a subdirectory of that |
- directory named `.debug', and finally under each one of the global |
- debug directories, in a subdirectory whose name is identical to |
- the leading directories of the executable's absolute file name. |
- |
- * For the "build ID" method, GDB looks in the `.build-id' |
- subdirectory of each one of the global debug directories for a |
- file named `NN/NNNNNNNN.debug', where NN are the first 2 hex |
- characters of the build ID bit string, and NNNNNNNN are the rest |
- of the bit string. (Real build ID strings are 32 or more hex |
- characters, not 10.) |
- |
- So, for example, suppose you ask GDB to debug `/usr/bin/ls', which |
-has a debug link that specifies the file `ls.debug', and a build ID |
-whose value in hex is `abcdef1234'. If the list of the global debug |
-directories includes `/usr/lib/debug', then GDB will look for the |
-following debug information files, in the indicated order: |
- |
- - `/usr/lib/debug/.build-id/ab/cdef1234.debug' |
- |
- - `/usr/bin/ls.debug' |
- |
- - `/usr/bin/.debug/ls.debug' |
- |
- - `/usr/lib/debug/usr/bin/ls.debug'. |
- |
- Global debugging info directories default to what is set by GDB |
-configure option `--with-separate-debug-dir'. During GDB run you can |
-also set the global debugging info directories, and view the list GDB |
-is currently using. |
- |
-`set debug-file-directory DIRECTORIES' |
- Set the directories which GDB searches for separate debugging |
- information files to DIRECTORY. Multiple path components can be |
- set concatenating them by a path separator. |
- |
-`show debug-file-directory' |
- Show the directories GDB searches for separate debugging |
- information files. |
- |
- |
- A debug link is a special section of the executable file named |
-`.gnu_debuglink'. The section must contain: |
- |
- * A filename, with any leading directory components removed, |
- followed by a zero byte, |
- |
- * zero to three bytes of padding, as needed to reach the next |
- four-byte boundary within the section, and |
- |
- * a four-byte CRC checksum, stored in the same endianness used for |
- the executable file itself. The checksum is computed on the |
- debugging information file's full contents by the function given |
- below, passing zero as the CRC argument. |
- |
- Any executable file format can carry a debug link, as long as it can |
-contain a section named `.gnu_debuglink' with the contents described |
-above. |
- |
- The build ID is a special section in the executable file (and in |
-other ELF binary files that GDB may consider). This section is often |
-named `.note.gnu.build-id', but that name is not mandatory. It |
-contains unique identification for the built files--the ID remains the |
-same across multiple builds of the same build tree. The default |
-algorithm SHA1 produces 160 bits (40 hexadecimal characters) of the |
-content for the build ID string. The same section with an identical |
-value is present in the original built binary with symbols, in its |
-stripped variant, and in the separate debugging information file. |
- |
- The debugging information file itself should be an ordinary |
-executable, containing a full set of linker symbols, sections, and |
-debugging information. The sections of the debugging information file |
-should have the same names, addresses, and sizes as the original file, |
-but they need not contain any data--much like a `.bss' section in an |
-ordinary executable. |
- |
- The GNU binary utilities (Binutils) package includes the `objcopy' |
-utility that can produce the separated executable / debugging |
-information file pairs using the following commands: |
- |
- objcopy --only-keep-debug foo foo.debug |
- strip -g foo |
- |
-These commands remove the debugging information from the executable |
-file `foo' and place it in the file `foo.debug'. You can use the |
-first, second or both methods to link the two files: |
- |
- * The debug link method needs the following additional command to |
- also leave behind a debug link in `foo': |
- |
- objcopy --add-gnu-debuglink=foo.debug foo |
- |
- Ulrich Drepper's `elfutils' package, starting with version 0.53, |
- contains a version of the `strip' command such that the command |
- `strip foo -f foo.debug' has the same functionality as the two |
- `objcopy' commands and the `ln -s' command above, together. |
- |
- * Build ID gets embedded into the main executable using `ld |
- --build-id' or the GCC counterpart `gcc -Wl,--build-id'. Build ID |
- support plus compatibility fixes for debug files separation are |
- present in GNU binary utilities (Binutils) package since version |
- 2.18. |
- |
-The CRC used in `.gnu_debuglink' is the CRC-32 defined in IEEE 802.3 |
-using the polynomial: |
- |
- x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 |
- + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1 |
- |
- The function is computed byte at a time, taking the least |
-significant bit of each byte first. The initial pattern `0xffffffff' |
-is used, to ensure leading zeros affect the CRC and the final result is |
-inverted to ensure trailing zeros also affect the CRC. |
- |
- _Note:_ This is the same CRC polynomial as used in handling the |
-"Remote Serial Protocol" `qCRC' packet (*note GDB Remote Serial |
-Protocol: Remote Protocol.). However in the case of the Remote Serial |
-Protocol, the CRC is computed _most_ significant bit first, and the |
-result is not inverted, so trailing zeros have no effect on the CRC |
-value. |
- |
- To complete the description, we show below the code of the function |
-which produces the CRC used in `.gnu_debuglink'. Inverting the |
-initially supplied `crc' argument means that an initial call to this |
-function passing in zero will start computing the CRC using |
-`0xffffffff'. |
- |
- unsigned long |
- gnu_debuglink_crc32 (unsigned long crc, |
- unsigned char *buf, size_t len) |
- { |
- static const unsigned long crc32_table[256] = |
- { |
- 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, |
- 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, |
- 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, |
- 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, |
- 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, |
- 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, |
- 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, |
- 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, |
- 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, |
- 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, |
- 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, |
- 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, |
- 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, |
- 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, |
- 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, |
- 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, |
- 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, |
- 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, |
- 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, |
- 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, |
- 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, |
- 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, |
- 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, |
- 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, |
- 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, |
- 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, |
- 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, |
- 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, |
- 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, |
- 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, |
- 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, |
- 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, |
- 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, |
- 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, |
- 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, |
- 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, |
- 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, |
- 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, |
- 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, |
- 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, |
- 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, |
- 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, |
- 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, |
- 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, |
- 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, |
- 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, |
- 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, |
- 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, |
- 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, |
- 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, |
- 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, |
- 0x2d02ef8d |
- }; |
- unsigned char *end; |
- |
- crc = ~crc & 0xffffffff; |
- for (end = buf + len; buf < end; ++buf) |
- crc = crc32_table[(crc ^ *buf) & 0xff] ^ (crc >> 8); |
- return ~crc & 0xffffffff; |
- } |
- |
-This computation does not apply to the "build ID" method. |
- |
- |
-File: gdb.info, Node: Index Files, Next: Symbol Errors, Prev: Separate Debug Files, Up: GDB Files |
- |
-18.3 Index Files Speed Up GDB |
-============================= |
- |
-When GDB finds a symbol file, it scans the symbols in the file in order |
-to construct an internal symbol table. This lets most GDB operations |
-work quickly--at the cost of a delay early on. For large programs, |
-this delay can be quite lengthy, so GDB provides a way to build an |
-index, which speeds up startup. |
- |
- The index is stored as a section in the symbol file. GDB can write |
-the index to a file, then you can put it into the symbol file using |
-`objcopy'. |
- |
- To create an index file, use the `save gdb-index' command: |
- |
-`save gdb-index DIRECTORY' |
- Create an index file for each symbol file currently known by GDB. |
- Each file is named after its corresponding symbol file, with |
- `.gdb-index' appended, and is written into the given DIRECTORY. |
- |
- Once you have created an index file you can merge it into your symbol |
-file, here named `symfile', using `objcopy': |
- |
- $ objcopy --add-section .gdb_index=symfile.gdb-index \ |
- --set-section-flags .gdb_index=readonly symfile symfile |
- |
- GDB will normally ignore older versions of `.gdb_index' sections |
-that have been deprecated. Usually they are deprecated because they |
-are missing a new feature or have performance issues. To tell GDB to |
-use a deprecated index section anyway specify `set |
-use-deprecated-index-sections on'. The default is `off'. This can |
-speed up startup, but may result in some functionality being lost. |
-*Note Index Section Format::. |
- |
- _Warning:_ Setting `use-deprecated-index-sections' to `on' must be |
-done before gdb reads the file. The following will not work: |
- |
- $ gdb -ex "set use-deprecated-index-sections on" <program> |
- |
- Instead you must do, for example, |
- |
- $ gdb -iex "set use-deprecated-index-sections on" <program> |
- |
- There are currently some limitation on indices. They only work when |
-for DWARF debugging information, not stabs. And, they do not currently |
-work for programs using Ada. |
- |