GDB Command Line Arguments
来源:互联网 发布:shop域名有使用范围吗 编辑:程序博客网 时间:2024/05/16 06:43
Starting GDB:
- 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.)
Command line options: (version 6. Older versions use a single "-")
Option Description --help
-hList command line arguments--exec=file-name
-e file-nameIdentify executable associated with core file.--core=name-of-core-file
-c name-of-core-fileSpecify core file.--command=command-file
-x command-fileFile listing GDB commands to perform. Good for automating set-up.--directory=directory
-d directoryAdd directory to the path to search for source files.--cd=directoryRun GDB using specified directory as the current working directory.--nx
-nDo not execute commands from ~/.gdbinit initialization file. Default is to look at this file and execute the list of commands.--batch -x command-fileRun in batch (not interactive) mode. Execute commands from file. Requires -x option.--symbols=file-name
-s file-nameRead symbol table from file file.--writeEnable writing into executable and core files.--quiet
-qDo not print the introductory and copyright messages.--tty=deviceSpecify device for running program's standard input and output.--pid=process-id
-p process-id
-c process-idSpecify process ID number to attach to.
GDB Commands:
Commands used within GDB:
Command Description helpList gdb command topics.help topic-classesList gdb command within class.help commandCommand description.apropos search-wordSearch for commands and command topics containing search-word.info args
i argsList program command line argumentsinfo breakpointsList breakpointsinfo breakList breakpoint numbers.info break breakpoint-numberList info about specific breakpoint.info watchpointsList breakpointsinfo registersList registers in useinfo threadsList threads in useinfo setList set-able optionBreak and Watch break funtion-name
break line-numberSuspend program at specified function of line number.
break ClassName::functionNamebreak +offset
break -offsetSet a breakpoint specified number of lines forward or back from the position at which execution stopped.break filename:functionDon't specify path, just the file name and function name.break filename:line-numberDon't specify path, just the file name and line number.
break Directory/Path/filename.cpp:62break *addressSuspend processing at an instruction address. Used when you do not have source.break line-number if conditionWhere condition is an expression. i.e. x > 5
Suspend when boolean expression is true.break line thread thread-numberBreak in thread at specified line number. Use info threads to display thread numbers.tbreakTemporary break. Break once only. Break is then removed. See "break" above for options.watch conditionSuspend processing when condition is met. i.e. x > 5clear
clear function
clear line-numberDelete breakpoints as identified by command option.delete
dDelete all breakpoints, watchpoints, or catchpoints.delete breakpoint-number
delete rangeDelete the breakpoints, watchpoints, or catchpoints of the breakpoint ranges specified as arguments.disable breakpoint-number-or-range
enable breakpoint-number-or-rangeDoes not delete breakpoints. Just enables/disables them.
Example:
Show breakpoints: info break
Disable: disable 2-9enable breakpoint-number onceEnables oncecontinue
cContinue executing until next break point/watchpoint.continue numberContinue but ignore current breakpoint number times. Usefull for breakpoints within a loop.finishContinue to end of function.Line Execution step
s
step number-of-steps-to-performStep to next line of code. Will step into a function.next
n
next numberExecute next line of code. Will not enter functions. until
until line-numberContinue processing until you reacha aspecified line number. Also: function name, address, filename:function or filename:line-number.stepi
si
nexti
nistep/next assembly/processor instruction.info signals
info handle
handle SIGNAL-NAME optionPerform the following option when signal recieved: nostop, stop, print, noprint, pass/noignore or nopass/ignorewhereShows current line number and which function you are in.Stack backtrace
bt
bt inner-function-nesting-depth
bt -outer-function-nesting-depthShow trace of where you are currently. Which functions you are in. Prints stack backtrace.backtrace fullPrint values of local variables.frame number
f numberSelect frame number.up number
down numberMove up/down the specified number of frames in the stack.info frameList address, language, address of arguments/local variables and which registers were saved in frame.info args
info locals
info catchInfo arguments of selected frame, local variables and exception handlers.Source Code list
l
list line-number
list function
list -
list start#,end#
list filename:functionList source code.set listsize count
show listsizeNumber of lines listed when list command given.directory directory-name
dir directory-name
show directoriesAdd specified directory to front of source code path.directoryClear sourcepath when nothing specified.Examine Variables print variable-name
p variable-name
p file-name::variable-name
p 'file-name'::variable-namePrint value stored in variable.p *array-variable@lengthPrint first # values of array specified by length. Good for pointers to dynamicaly allocated memory.p/x variablePrint as integer variable in hex.p/d variablePrint variable as a signed integer.p/u variablePrint variable as a un-signed integer.p/o variablePrint variable as a octal.p/t variable
x/b address
x/b &variablePrint as integer value in binary. (1 byte/8bits)p/c variablePrint integer as character.p/f variablePrint variable as floating point number.p/a variablePrint as a hex address.x/w address
x/4b &variablePrint binary representation of 4 bytes (1 32 bit word) of memory pointed to by address.GDB Modes set gdb-option valueSet a GDB optionset logging on
set logging off
show logging
set logging file log-fileTurn on/off logging. Default name of file is gdb.txtset print array on
set print array off
show print arrayDefault is off. Convient readable format for arrays turned on/off.set print array-indexes on
set print array-indexes off
show print array-indexesDefault off. Print index of array elements.set print pretty on
set print pretty off
show print prettyFormat printing of C structures.set print union on
set print union off
show print unionDefault is on. Print C unions.set print demangle on
set print demangle off
show print demangleDefault on. Controls printing of C++ names.Start and Stop run
r
run command-line-arguments
run < infile > outfileStart program execution from the beginning of the program. The command break main will get you started. Also allows basic I/O redirection.continue
cContinue execution to next break point.killStop program execution.quit
qExit 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
De-Referencing STL Containers:
Displaying STL container classes using the GDB "p variable-name" results in an cryptic display of template definitions and pointers. Use the following ~/.gdbinit file (V1.03 09/15/08). Now works with GDB 4.3+.
(Archived versions: [V1.01 GDB 6.4+ only])
Thanks to Dr. Eng. Dan C. Marinescu for permission to post this script.
Use the following commands provided by the script:
Data type GDB command std::vector<T>pvector stl_variablestd::list<T>plist stl_variable Tstd::map<T,T>pmap stl_variablestd::multimap<T,T>pmap stl_variablestd::set<T>pset stl_variable Tstd::multiset<T>pset stl_variablestd::deque<T>pdequeue stl_variablestd::stack<T>pstack stl_variablestd::queue<T>pqueue stl_variablestd::priority_queue<T>ppqueue stl_variablestd::bitset<n>td> pbitset stl_variablestd::stringpstring stl_variablestd::widestringpwstring stl_variableWhere 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
- Compile: g++ -g STL_vector_int.cpp
01
#include <iostream>
02
#include <vector>
03
#include <string>
04
05
using
namespace
std;
06
07
main()
08
{
09
vector<
int
> II;
10
11
II.push_back(10);
12
II.push_back(20);
13
II.push_back(30);
14
15
cout << II.size() << endl;
16
17
}
Debug in GDB: gdb a.out
(gdb) l1 #include <iostream>2 #include <vector>3 #include <string>45 using namespace std;67 main()8 {9 vector<int> II;10(gdb) l11 II.push_back(10);12 II.push_back(20);13 II.push_back(30);1415 cout << II.size() << endl;1617 }(gdb) break 15Breakpoint 1 at 0x8048848: file STL_vector_int.cpp, line 15.(gdb) rStarting program: /home/userx/a.outBreakpoint 1, main () at STL_vector_int.cpp:1515 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 IIelem[0]: $2 = 10elem[1]: $3 = 20elem[2]: $4 = 30Vector size = 3Vector capacity = 4Element type = int *(gdb) cContinuing.3Program 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.
De-Referencing a 2-D vector of vectors:
Example: STL_vector_int_2.cpp
- Compile: g++ -g STL_vector_int_2.cpp
01
#include <iostream>
02
#include <vector>
03
04
using
namespace
std;
05
06
main()
07
{
08
vector< vector<
int
> > vI2Matrix(3, vector<
int
>(2,0));
09
10
vI2Matrix[0][0] = 0;
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++)
21
{
22
for
(jj=0; jj < 2; jj++)
23
{
24
cout << vI2Matrix[ii][jj] << endl;
25
}
26
}
27
}
Debug in GDB: gdb a.out
- 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.
(gdb) l1 #include <iostream>2 #include <vector>34 using namespace std;56 main()7 {8 vector< vector<int> > vI2Matrix(3, vector<int>(2,0));910 vI2Matrix[0][0] = 0;(gdb) l11 vI2Matrix[0][1] = 1;12 vI2Matrix[1][0] = 10;13 vI2Matrix[1][1] = 11;14 vI2Matrix[2][0] = 20;15 vI2Matrix[2][1] = 21;1617 cout << "Loop by index:" << endl;1819 int ii, jj;20 for(ii=0; ii < 3; ii++)(gdb) break 17Breakpoint 1 at 0x8048a19: file STL_vector_2.cpp, line 17.(gdb) rStarting program: /home/userx/a.outBreakpoint 1, main () at STL_vector_2.cpp:1717 cout << "Loop by index:" << endl;(gdb) pvector vI2Matrixelem[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 = 3Vector capacity = 3Element type = class std::vector<int,std::allocator<int> > *(gdb) pvector $1elem[0]: $4 = 0elem[1]: $5 = 1Vector size = 2Vector capacity = 2Element type = int *(gdb) pvector $2elem[0]: $6 = 10elem[1]: $7 = 11Vector size = 2Vector capacity = 2Element type = int *(gdb) pvector $3elem[0]: $8 = 20elem[1]: $9 = 21Vector size = 2Vector capacity = 2Element type = int *(gdb) p vI2Matrix$10 = { <std::_Vector_base<std::vector<int, std::allocator<int> >,std::allocator<std::vector<int, std::allocator<int> > > >> = { _M_impl = { <std::allocator<std::vector<int, std::allocator<int> > >> = { <__gnu_cxx::new_allocator<std::vector<int, std::allocator<int> > >> = {<No data fields>}, <No data fields>}, members of std::_Vector_base<std::vector<int, std::allocator<int> >,std::allocator<std::vector<int, std::allocator<int> > > >::_Vector_impl: _M_start = 0x804b018, _M_finish = 0x804b03c, _M_end_of_storage = 0x804b03c } }, <No data fields>}(gdb) quit
- GDB Command Line Arguments
- 关于Command-line Arguments
- Ant command line arguments
- exec Command-line Arguments
- B. Command Line Arguments
- Command-Line Arguments
- IDL command line arguments
- UE4 Command-Line Arguments
- Command-Line Arguments
- go command-line-arguments
- Command Line Arguments in C++
- Accessing command line parameters/arguments
- 9: Command Line Arguments(Command line Python scripting)
- 7.4.命令行参数(Command-Line Arguments)
- Lesson 14: Accepting command line arguments
- CF:291B. Command Line Arguments
- Use command line arguments in Node.js
- Passing Command Line Arguments to a Module
- 用管理员方式打开文件
- 还是不善于向他人表达好意
- 最佳的75个安全工具
- log4j配置
- VM连接 的三种方式
- GDB Command Line Arguments
- 妙味课堂——上课现场抓拍
- 2010-10-19
- win7热键
- 初窥设计模式之简单工厂
- 最近的百度收录屡创新高
- Eclipse同时显示两个编辑窗口
- [推荐] 查询剩余火车票(我今天证实实在是好用,激动啊!)
- 【妙味课堂】原创JavaScript实现的3D球面标签云效果