Linux Tutorial - GNU GDB Debugger Command Cheat Sheet
Linux Tutorial - GNU GDB Debugger Command Cheat Sheet
GDB Command cheat sheet: Command summaries. # GDB Command Line Arguments # GDB Commands # Dereferencing STL Containers # GDB Man Pages # Links # Books
ERROR
The requested URL could not be retrieved
search
Related YoLinux Tutorials: C++ Info, links C++ String Class C++ STL vector, list Emacs and C/C++ Advanced VI CGI in C++ Clearcase Commands MS/Visual C++ Practices C++ Memory corruption and leaks YoLinux Tutorials Index gdb name-of-executable gdb -e name-of-executable -c name-of-core-file gdb name-of-executable -pid process-id (Use ps -auxw to list process id's.) Search | Home Page | Linux Tutorials | Terms | Privacy Policy | Advertising | Contact |
Command line options: (version 6. Older versions use a single "-") Option --help -h --exec=file-name -e file-name List command line arguments Identify executable associated with core file. Description
--core=name-of-core- Specify core file. file -c name-of-core-file -File listing GDB commands to perform. Good for automating set-up. command=commandfile -x command-file --directory=directory -d directory --cd=directory --nx -n Add directory to the path to search for source files.
Run GDB using specified directory as the current working directory. Do not execute commands from ~/.gdbinit initialization file. Default is to look at this file and execute the list of commands.
--batch -x command- Run in batch (not interactive) mode. Execute commands from file. Requires -x option. file --symbols=file-name -s file-name --write --quiet -q --tty=device --pid=process-id -p process-id -c process-id Read symbol table from file file. Enable writing into executable and core files. Do not print the introductory and copyright messages. Specify device for running program's standard input and output. Specify process ID number to attach to.
Free Information Technology Software and Development Magazine Subscriptions and Document Downloads
5
GDB Commands:
Commands used within GDB: Command help help topic-classes help command apropos search-word info args i args info breakpoints info break info break breakpointnumber info watchpoints info registers info threads info set Break and Watch break funtion-name break line-number
break ClassName::functionName
Description List gdb command topics. List gdb command within class. Command description. Search for commands and command topics containing search-word. List program command line arguments List breakpoints List breakpoint numbers. List info about specific breakpoint. List breakpoints List registers in use List threads in use List set-able option Suspend program at specified function of line number.
break +offset break -offset break filename:function break filename:linenumber break *address break line-number if condition break line thread threadnumber tbreak watch condition clear clear function clear line-number delete d
Set a breakpoint specified number of lines forward or back from the position at which execution stopped. Don't specify path, just the file name and function name. Don't specify path, just the file name and line number.
break Directory/Path/filename.cpp:62
Suspend processing at an instruction address. Used when you do not have source. Where condition is an expression. i.e. x > 5 Suspend when boolean expression is true. Break in thread at specified line number. Use info threads to display thread numbers. Temporary break. Break once only. Break is then removed. See "break" above for options. Suspend processing when condition is met. i.e. x > 5 Delete breakpoints as identified by command option.
delete breakpoint-number Delete the breakpoints, watchpoints, or catchpoints of the breakpoint ranges specified as arguments. delete range disable breakpointnumber-or-range enable breakpointnumber-or-range enable breakpointnumber once continue c continue number finish Line Execution step s step number-of-steps-toperform Step to next line of code. Will step into a function. Does not delete breakpoints. Just enables/disables them. Example: Show breakpoints: info break Disable: disable 2-9 Enables once Continue executing until next break point/watchpoint. Continue but ignore current breakpoint number times. Usefull for breakpoints within a loop. Continue to end of function.
until until line-number stepi si nexti ni info signals info handle handle SIGNAL-NAME option where Stack
Continue processing until you reacha aspecified line number. Also: function name, address, filename:function or filename:line-number. step/next assembly/processor instruction.
Perform the following option when signal recieved: nostop, stop, print, noprint, pass/noignore or nopass/ignore
Shows current line number and which function you are in.
backtrace Show trace of where you are currently. Which functions you are in. Prints stack bt backtrace. bt inner-function-nestingdepth bt -outer-function-nestingdepth backtrace full frame number f number up number down number info frame info args info locals info catch Source Code list l list line-number list function list list start#,end# list filename:function set listsize count show listsize directory directory-name dir directory-name show directories directory Examine Variables print variable-name p variable-name p file-name::variablename p 'file-name'::variablename Print value stored in variable. List source code. Print values of local variables. Select frame number. Move up/down the specified number of frames in the stack. List address, language, address of arguments/local variables and which registers were saved in frame. Info arguments of selected frame, local variables and exception handlers.
Number of lines listed when list command given. Add specified directory to front of source code path.
p *array-variable@length Print first # values of array specified by length. Good for pointers to dynamicaly allocated memory. p/x variable p/d variable p/u variable p/o variable p/t variable x/b address Print as integer variable in hex. Print variable as a signed integer. Print variable as a un-signed integer. Print variable as a octal. Print as integer value in binary. (1 byte/8bits)
x/b &variable p/c variable p/f variable p/a variable x/w address x/4b &variable GDB Modes set gdb-option value set logging on set logging off show logging set logging file log-file set print array on set print array off show print array
Print integer as character. Print variable as floating point number. Print as a hex address. Print binary representation of 4 bytes (1 32 bit word) of memory pointed to by address. Set a GDB option Turn on/off logging. Default name of file is gdb.txt
set print array-indexes on Default off. Print index of array elements. set print array-indexes off show print array-indexes set print pretty on set print pretty off show print pretty set print union on set print union off show print union set print demangle on set print demangle off show print demangle Start and Stop run r run command-linearguments run < infile > outfile continue c kill quit q Start program execution from the beginning of the program. The command break main will get you started. Also allows basic I/O redirection. Format printing of C structures.
Continue execution to next break point. Stop program execution. Exit GDB debugger.
GDB Operation:
Compile with the "-g" option (for most GNU and Intel compilers) which generates added information in the object code so the debugger can match a line of source code with the step of execution. Do not use compiler optimization directive such as "-O" or "-O2" which rearrange computing operations to gain speed as this reordering will not match the order of execution in the source code and it may be impossible to follow. control+c: Stop execution. It can stop program anywhere, in your source or a C library or anywhere. To execute a shell command: ! command or shell command GDB command completion: Use TAB key info bre + TAB will complete the command resulting in info breakpoints Press TAB twice to see all available options if more than one option is available or type "M-?" + RETURN. GDB command abreviation: info bre + RETURN will work as bre is a valid abreviation for breakpoints
Use the following commands provided by the script: Data type std::vector<T> std::list<T> std::map<T,T> std::multimap<T,T> std::set<T> std::multiset<T> std::deque<T> std::stack<T> std::queue<T> GDB command pvector stl_variable plist stl_variable T pmap stl_variable pmap stl_variable pset stl_variable T pset stl_variable pdequeue stl_variable pstack stl_variable pqueue stl_variable
std::priority_queue<T> ppqueue stl_variable std::bitset<n>td> pbitset stl_variable std::string pstring stl_variable std::widestring pwstring stl_variable Where T refers to native C++ data types. While classes and other STL data types will work with the STL container classes, this de-reference tool may not handle non-native types. Also see the YoLinux.com STL string class tutorial and debugging with GDB.
De-Referencing a vector:
Example: STL_vector_int.cpp
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17
#include <iostream> #include <vector> #include <string> using namespace std; main() { vector<int> II; II.push_back(10); II.push_back(20); II.push_back(30); cout << II.size() << endl; }
Breakpoint 1, main () at STL_vector_int.cpp:15 15 cout << II.size() << endl; (gdb) p II $1 = { <std::_Vector_base<int,std::allocator<int> >> = { _M_impl = { <std::allocator<int>> = { <__gnu_cxx::new_allocator<int>> = {<No data fields>}, <No data fields>}, members of std::_Vector_base<int,std::allocator<int> >::_Vector_impl: _M_start = 0x804b028, _M_finish = 0x804b034, _M_end_of_storage = 0x804b038 } }, <No data fields>} (gdb) pvector II elem[0]: $2 = 10 elem[1]: $3 = 20 elem[2]: $4 = 30 Vector size = 3 Vector capacity = 4 Element type = int * (gdb) c Continuing. 3 Program exited normally. (gdb) quit
Notice the native GDB print "p" results in an cryptic display while the "pvector" routine from the GDB script provided a human decipherable display of your data.
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
using namespace std; main() { vector< vector<int> > vI2Matrix(3, vector<int>(2,0)); vI2Matrix[0][0] vI2Matrix[0][1] vI2Matrix[1][0] vI2Matrix[1][1] vI2Matrix[2][0] vI2Matrix[2][1] = = = = = = 0; 1; 10; 11; 20; 21;
cout << "Loop by index:" << endl; int ii, jj; for(ii=0; ii < 3; ii++) { for(jj=0; jj < 2; jj++) { cout << vI2Matrix[ii][jj] << endl; } }
(gdb) l 1 #include <iostream> 2 #include <vector> 3 4 using namespace std; 5 6 main() 7 { 8 vector< vector<int> > vI2Matrix(3, vector<int>(2,0)); 9 10 vI2Matrix[0][0] = 0; (gdb) l
(gdb) l 11 vI2Matrix[0][1] = 1; 12 vI2Matrix[1][0] = 10; 13 vI2Matrix[1][1] = 11; 14 vI2Matrix[2][0] = 20; 15 vI2Matrix[2][1] = 21; 16 17 cout << "Loop by index:" << endl; 18 19 int ii, jj; 20 for(ii=0; ii < 3; ii++) (gdb) break 17 Breakpoint 1 at 0x8048a19: file STL_vector_2.cpp, line 17. (gdb) r Starting program: /home/userx/a.out
Breakpoint 1, main () at STL_vector_2.cpp:17 17 cout << "Loop by index:" << endl; (gdb) pvector vI2Matrix elem[0]: $1 = { <std::_Vector_base<int,std::allocator<int> >> = { _M_impl = { <std::allocator<int>> = { <__gnu_cxx::new_allocator<int>> = {<No data fields>}, <No data fields>}, members of std::_Vector_base<int,std::allocator<int> >::_Vector_impl: _M_start = 0x804b040, _M_finish = 0x804b048, _M_end_of_storage = 0x804b048 } }, <No data fields>} elem[1]: $2 = { <std::_Vector_base<int,std::allocator<int> >> = { _M_impl = { <std::allocator<int>> = { <__gnu_cxx::new_allocator<int>> = {<No data fields>}, <No data fields>}, members of std::_Vector_base<int,std::allocator<int> >::_Vector_impl: _M_start = 0x804b050, _M_finish = 0x804b058, _M_end_of_storage = 0x804b058 } }, <No data fields>} elem[2]: $3 = { <std::_Vector_base<int,std::allocator<int> >> = { _M_impl = { <std::allocator<int>> = { <__gnu_cxx::new_allocator<int>> = {<No data fields>}, <No data fields>}, members of std::_Vector_base<int,std::allocator<int> >::_Vector_impl: _M_start = 0x804b060, _M_finish = 0x804b068, _M_end_of_storage = 0x804b068 ---Type <return> to continue, or q <return> to quit--} }, <No data fields>} Vector size = 3 Vector capacity = 3 Element type = class std::vector<int,std::allocator<int> > * (gdb) pvector $1 elem[0]: $4 = 0 elem[1]: $5 = 1 Vector size = 2 Vector capacity = 2 Element type = int * (gdb) pvector $2 elem[0]: $6 = 10 elem[1]: $7 = 11 Vector size = 2 Vector capacity = 2 Element type = int * (gdb) pvector $3 elem[0]: $8 = 20 elem[1]: $9 = 21 Vector size = 2 Vector capacity = 2 Element type = int * (gdb) p vI2Matrix $10 = { <std::_Vector_base<std::vector<int, std::allocator<int> >,std::allocator<std::vector<int, std::alloca _M_impl = { <std::allocator<std::vector<int, std::allocator<int> > >> = { <__gnu_cxx::new_allocator<std::vector<int, std::allocator<int> > >> = {<No data fields>}, <No d members of std::_Vector_base<std::vector<int, std::allocator<int> >,std::allocator<std::vector<in _M_start = 0x804b018, _M_finish = 0x804b03c, _M_end_of_storage = 0x804b03c }
Note "pvector" does not de-reference the entire vector of vectors all at once but returns vectors $1, $2 and $3. The "pvector" command then helps us traverse the information by examining the contents of each element in the individual "terminal" vectors. Note that the native gdb "p vI2Matrix" (last command) was much less informative.
Man Pages:
gdb - GNU debugger ld - Linker gcc/g++ - GNU project C and C++ compiler
Links:
Gnu.org: GDB manual Postscript file: GDB: Quick reference
Books:
"Debugging with GDB: The GNU Source-Level Debugger" by Richard Stallman, Roland H. Pesch, Stan Shebs ISBN # 1882114884, Free Software Foundation; 9th edition (January 1, 2002)
"Advanced Linux Programming" by Mark Mitchell, Jeffrey Oldham, Alex Samuel, Jeffery Oldham ISBN # 0735710430, New Riders Good book for programmers who already know how to program and just need to know the Linux specifics. Covers a variety of Linux tools, libraries, API's and techniques. If you don't know how to program, start with a book on C.
YoLinux.com Home Page YoLinux Tutorial Index | Terms Privacy Policy | Advertise with us | Feedback Form | Unauthorized copying or redistribution prohibited. Copyright 2006-2011 by Greg Ippolito
Bookmark
sav ed by