国外源码分享网站g开头(国外源代码分享网站)

大家好,今天来为大家分享国外源码分享网站g开头的一些知识点,和国外源代码分享网站的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!

本文整理自《DebuggingwithGDB:theGNUSource-LevelDebuggerforGDB(GDB)》–Fsf

本文导航

-目录……00%

-break……11%

-infobreakpoints……18%

-disable……20%

-enable……22%

-clear……26%

-delete……30%

-tbreak……32%

-watch……33%

-step……36%

-reverse-step……40%

-next……42%

-reverse-next……44%

-return……46%

-finish……48%

-until……50%

-continue……52%

-print……55%

-x……60%

-display……67%

-infodisplay……70%

-undisplay……71%

-disabledisplay……72%

-enabledisplay……74%

-help……75%

-attach……78%

-run……81%

-backtrace……84%

-ptype……91%

-参考资料……98%

编译自:https://sourceware.org/gdb/current/onlinedocs/gdb/

作者:Fsf

译者:robot527

目录

break–在指定的行或函数处设置断点,缩写为b

infobreakpoints–打印未删除的所有断点,观察点和捕获点的列表,缩写为ib

disable–禁用断点,缩写为dis

enable–启用断点

clear–清除指定行或函数处的断点

delete–删除断点,缩写为d

tbreak–设置临时断点,参数同break,但在程序第一次停住后会被自动删除

watch–为表达式(或变量)设置观察点,当表达式(或变量)的值有变化时,暂停程序执行

step–单步跟踪,如果有函数调用,会进入该函数,缩写为s

reverse-step–反向单步跟踪,如果有函数调用,会进入该函数

next–单步跟踪,如果有函数调用,不会进入该函数,缩写为n

reverse-next–反向单步跟踪,如果有函数调用,不会进入该函数

return–使选定的栈帧返回到其调用者

finish–执行直到选择的栈帧返回,缩写为fin

until–执行直到达到当前栈帧中当前行后的某一行(用于跳过循环、递归函数调用),缩写为u

continue–恢复程序执行,缩写为c

print–打印表达式EXP的值,缩写为p

x–查看内存

display–每次程序停止时打印表达式EXP的值(自动显示)

infodisplay–打印早先设置为自动显示的表达式列表

disabledisplay–禁用自动显示

enabledisplay–启用自动显示

undisplay–删除自动显示项

help–打印命令列表(带参数时查找命令的帮助),缩写为h

attach–挂接到已在运行的进程来调试

run–启动被调试的程序,缩写为r

backtrace–查看程序调用栈的信息,缩写为bt

ptype–打印类型TYPE的定义

break

使用break命令(缩写b)来设置断点。

用法:

break当不带参数时,在所选栈帧中执行的下一条指令处设置断点。

break<function-name>在函数体入口处打断点,在C++中可以使用class::function或function(type,…)格式来指定函数名。

break<line-number>在当前源码文件指定行的开始处打断点。

break-Nbreak+N在当前源码行前面或后面的N行开始处打断点,N为正整数。

break<filename:linenum>在源码文件filename的linenum行处打断点。

break<filename:function>在源码文件filename的function函数入口处打断点。

break<address>在程序指令的地址处打断点。

break…if<cond>设置条件断点,…代表上述参数之一(或无参数),cond为条件表达式,仅在cond值非零时暂停程序执行。

详见官方文档[1]。

infobreakpoints

查看断点,观察点和捕获点的列表。

用法:

infobreakpoints

infobreak

list…用来指定若干个断点的编号(可省略),可以是2,1-3,25等。

disable

禁用一些断点。参数是用空格分隔的断点编号。要禁用所有断点,不加参数。

禁用的断点不会被忘记,但直到重新启用才有效。

用法:

disable[breakpoints]

breakpoints是disable的子命令(可省略),list…同infobreakpoints中的描述。

详见官方文档[2]。

enable

启用一些断点。给出断点编号(以空格分隔)作为参数。没有参数时,所有断点被启用。

用法:

enable[breakpoints]

启用指定的断点(或所有定义的断点)。

enable[breakpoints]oncelist…临时启用指定的断点。GDB在停止您的程序后立即禁用这些断点。

enable[breakpoints]deletelist…使指定的断点启用一次,然后删除。一旦您的程序停止,GDB就会删除这些断点。等效于用tbreak设置的断点。

breakpoints同disable中的描述。

详见官方文档[3]。

clear

在指定行或函数处清除断点。参数可以是行号,函数名称或*跟一个地址。

用法:

clear当不带参数时,清除所选栈帧在执行的源码行中的所有断点。

clear<function>,clear<filename:function>删除在命名函数的入口处设置的任何断点。

clear<linenum>,clear<filename:linenum>删除在指定的文件指定的行号的代码中设置的任何断点。

clear<address>清除指定程序指令的地址处的断点。

详见官方文档[4]。

delete

删除一些断点或自动显示表达式。参数是用空格分隔的断点编号。要删除所有断点,不加参数。

用法:delete[breakpoints]

详见官方文档[5]。

tbreak

设置临时断点。参数形式同break一样。

除了断点是临时的之外,其他同break一样,所以在命中时会被删除。

详见官方文档[6]。

watch

为表达式设置观察点。

用法:watch[-l|-location]<expr>每当一个表达式的值改变时,观察点就会暂停程序执行。

如果给出了-l或者-location,则它会对expr求值并观察它所指向的内存。例如,watch*(int*)0x12345678将在指定的地址处观察一个4字节的区域(假设int占用4个字节)。

详见官方文档[7]。

step

单步执行程序,直到到达不同的源码行。

用法:step[N]参数N表示执行N次(或由于另一个原因直到程序停止)。

警告:如果当控制在没有调试信息的情况下编译的函数中使用step命令,则执行将继续进行,直到控制到达具有调试信息的函数。同样,它不会进入没有调试信息编译的函数。

要执行没有调试信息的函数,请使用stepi命令,详见后文。

详见官方文档[8]。

reverse-step

反向单步执行程序,直到到达另一个源码行的开头。

用法:reverse-step[N]参数N表示执行N次(或由于另一个原因直到程序停止)。

详见官方文档[9]。

next

单步执行程序,执行完子程序调用。

用法:next[N]

与step不同,如果当前的源代码行调用子程序,则此命令不会进入子程序,而是将其视为单个源代码行,继续执行。

详见官方文档[10]。

reverse-next

反向步进程序,执行完子程序调用。

用法:reverse-next[N]

如果要执行的源代码行调用子程序,则此命令不会进入子程序,调用被视为一个指令。

参数N表示执行N次(或由于另一个原因直到程序停止)。

详见官方文档[11]。

return

您可以使用return命令取消函数调用的执行。如果你给出一个表达式参数,它的值被用作函数的返回值。

用法:return<expression>将expression的值作为函数的返回值并使函数直接返回。

详见官方文档[12]。

finish

执行直到选定的栈帧返回。

用法:finish返回后,返回的值将被打印并放入到值历史记录中。

详见官方文档[13]。

until

执行直到程序到达当前栈帧中当前行之后(与break[14]命令相同的参数)的源码行。此命令用于通过一个多次的循环,以避免单步执行。

用法:until<location>或u<location>继续运行程序,直到达到指定的位置,或者当前栈帧返回。

详见官方文档[15]。

continue

在信号或断点之后,继续运行被调试的程序。

用法:continue[N]如果从断点开始,可以使用数字N作为参数,这意味着将该断点的忽略计数设置为N-1(以便断点在第N次到达之前不会中断)。如果启用了非停止模式(使用shownon-stop查看),则仅继续当前线程,否则程序中的所有线程都将继续。

详见官方文档[16]。

print

求值并打印表达式EXP的值。可访问的变量是所选栈帧的词法环境,以及范围为全局或整个文件的所有变量。

用法:

print[expr]或print/f[expr]expr是一个(在源代码语言中的)表达式。

默认情况下,expr的值以适合其数据类型的格式打印;您可以通过指定/f来选择不同的格式,其中f是一个指定格式的字母;详见输出格式[17]。

如果省略expr,GDB再次显示最后一个值。

要以每行一个成员带缩进的格式打印结构体变量请使用命令setprintprettyon,取消则使用命令setprintprettyoff。

可使用命令showprint查看所有打印的设置。

详见官方文档[18]。

x

检查内存。

用法:x/nfu<addr>或x<addr>n、f和u都是可选参数,用于指定要显示的内存以及如何格式化。addr是要开始显示内存的地址的表达式。

n重复次数(默认值是1),指定要显示多少个单位(由u指定)的内存值。

f显示格式(初始默认值是x),显示格式是print(‘x’,’d’,’u’,’o’,’t’,’a’,’c’,’f’,’s’)使用的格式之一,再加i(机器指令)。

u单位大小,b表示单字节,h表示双字节,w表示四字节,g表示八字节。

例如:

x/3uh0x54320表示从地址0x54320开始以无符号十进制整数的格式,双字节为单位来显示3个内存值。

x/16xb0x7f95b7d18870表示从地址0x7f95b7d18870开始以十六进制整数的格式,单字节为单位显示16个内存值。

详见官方文档[19]。

display

每次程序暂停时,打印表达式EXP的值。

用法:display<expr>,display/fmt<expr>或display/fmt<addr>fmt用于指定显示格式。像print[20]命令里的/f一样。

对于格式i或s,或者包括单位大小或单位数量,将表达式addr添加为每次程序停止时要检查的内存地址。

详见官方文档[21]。

infodisplay

打印自动显示的表达式列表,每个表达式都带有项目编号,但不显示其值。

包括被禁用的表达式和不能立即显示的表达式(当前不可用的自动变量)。

undisplay

取消某些表达式在程序暂停时的自动显示。参数是表达式的编号(使用infodisplay查询编号)。不带参数表示取消所有自动显示表达式。

deletedisplay具有与此命令相同的效果。

disabledisplay

禁用某些表达式在程序暂停时的自动显示。禁用的显示项目不会被自动打印,但不会被忘记。它可能稍后再次被启用。

参数是表达式的编号(使用infodisplay查询编号)。不带参数表示禁用所有自动显示表达式。

enabledisplay

启用某些表达式在程序暂停时的自动显示。

参数是重新显示的表达式的编号(使用infodisplay查询编号)。不带参数表示启用所有自动显示表达式。

help

打印命令列表。

您可以使用不带参数的help(缩写为h)来显示命令的类别名的简短列表。

使用help<class>您可以获取该类中的各个命令的列表。使用help<command>显示如何使用该命令。

详见官方文档[22]。

attach

挂接到GDB之外的进程或文件。该命令可以将进程ID或设备文件作为参数。

对于进程ID,您必须具有向进程发送信号的权限,并且必须具有与调试器相同的有效的uid。

用法:attach<process-id>GDB在安排调试指定的进程之后做的第一件事是暂停该进程。

无论是通过attach命令挂接的进程还是通过run命令启动的进程,您都可以使用的GDB命令来检查和修改挂接的进程。

详见官方文档[23]。

run

启动被调试的程序。

可以直接指定参数,也可以用setargs[24]设置(启动所需的)参数。

例如:runarg1arg2…等效于

setargsarg1arg2…

run

还允许使用>、<或>>进行输入和输出重定向。

详见官方文档[25]。

backtrace

打印整体栈帧信息。

bt打印整体栈帧信息,每个栈帧一行。

btn类似于上,但只打印最内层的n个栈帧。

bt-n类似于上,但只打印最外层的n个栈帧。

btfulln类似于btn,还打印局部变量的值。

where和infostack(缩写infos)是backtrace的别名。调用栈信息类似如下:

(gdb)where

10x080ed68ainvconn_run(vconn=0x99e5e38)atlib/vconn.c:276

30x08077b83inofconn_run(ofconn=0x99e8070,handle_openflow=0x805e274<handle_openflow>)atofproto/connmgr.c:1234

50x08057d58inofproto_run(p=0x99d9ba0)atofproto/ofproto.c:1159

70x08054168inmain(argc=4,argv=0xbf8333e4)atvswitchd/ovs-vswitchd.c:125

详见官方文档[26]。

ptype

打印类型TYPE的定义。

用法:ptype[/FLAGS]TYPE-NAME|EXPRESSION

参数可以是由typedef定义的类型名,或者structSTRUCT-TAG或者classCLASS-NAME或者unionUNION-TAG或者enumENUM-TAG。

根据所选的栈帧的词法上下文来查找该名字。

类似的命令是whatis,区别在于whatis不展开由typedef定义的数据类型,而ptype会展开,举例如下:

/*类型声明与变量定义*/

typedefdoublereal_t;

structcomplex{

real_treal;

doubleimag;

};

typedefstructcomplexcomplex_t;

complex_tvar;

real_t*real_pointer_var;

这两个命令给出了如下输出:

(gdb)whatisvar

type=complex_t

(gdb)ptypevar

type=structcomplex{

real_treal;

doubleimag;

}

(gdb)whatiscomplex_t

type=structcomplex

(gdb)whatisstructcomplex

type=structcomplex

(gdb)ptypestructcomplex

type=structcomplex{

real_treal;

doubleimag;

}

(gdb)whatisreal_pointer_var

type=real_t*

(gdb)ptypereal_pointer_var

type=double*

详见官方文档[27]。

参考资料

DebuggingwithGDB[28]

译者:robot527校对:mudongliang,wxy

点击“了解更多”可访问文内链接

好了,文章到此结束,希望可以帮助到大家。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平