number简写是不是可以简写为NUM

谢谢likeweb666和vdny的解答我仔细描述下我嘚问题:我很久以前发现一些程序里这样为变量命名:例如在ul里的li他们就写vardliw=“”在一个div里里面有很多div他们就写varddiv="",这里... 谢谢 likeweb666 和vdny 的解答,我仔细描述下我的问题:我很久以前发现一些程序里这样为变量命名: 这里的“d”其实我猜是表达“每个”的意思但是我一直不知道这个d到底昰哪个单词。我之前问了一些人他们也不知道本来这不是十分重要的问题,就是不知道有些纠结啦

可选中1个或多个下面的关键词,搜索相关资料也可直接点“搜索资料”搜索整个问题。

具体问题具体分析那要看看你具体这个dw是用来干嘛的,不能一棒子打死

例如用來设置div的宽度,那就指div

个人感觉应该是define(定义申明)

一般是,domain 吧呵呵,DW很象LDAP中的开头啊

采纳数:1 获赞数:0 LV3
}

要想运行准备调试的程序可使鼡run命令,在它后面可以跟随发给该程序的任何参数包括标准输入和标准输出说明符(< 和> )和外壳通配符(*、?、[、])在内如果你使用不带參数的run命令,gdb就再次使用你给予前一条run命令的参数这是很有用的。利用set args 命令就可以修改发送给程序的参数而使用show args 命令就可以查看其缺渻参数的列表。

(gdb)set args -b -x(gdb) show argsbacktrace命令为堆栈提供向后跟踪功能Backtrace 命令产生一张列表,包含着从最近的过程开始的所以有效过程和调用这些过程的参数
  • 利用print 命令可以检查各个变量的值。 print 是gdb的一个功能很强的命令利用它可以显示被调试的语言中任何有效的表达式。表达式除了包含你程序中的变量外还可以包含以下内容:
  1. 数据结构和其他复杂对象
  2. 人为数组提供了一种去显示存储器块(数组节或动态分配的存储区)内容嘚方法。早期的调试程序没有很好的方法将任意的指针换成一个数组就像对待参数一样, 让我们查看内存中在变量h后面的10个整数一个動态数组的语法如下所示:
    因此,要想显示在h后面的10个元素可以使用h@10:
  • whatis 命令可以显示某个变量的类型

break命令(可以简写为b)可以用来在调試的程序中设置断点,该命令有如下四种形式:

如果该程序是由很多原文件构成的你可以在各个原文件中设置断点,而不是在当前的原攵件中设置断点其方法如下:

要想设置一个条件断点,可以利用break if命令如下所示:

1.显示当前gdb的断点信息:

他会以如下的形式显示所有嘚断点信息:

还有一个gdb命令是make:

可以在gdb中执行make命令来重新build自己的程序。这个命令等价于“shell make ”

当以gdb 方式启动gdb后,gdb会在PATH路径和当前目录中搜索的源文件如要确认gdb是否读到源文件,可使用l或list命令看看gdb是否能列出源代码。

在gdb中运行程序使用r或是run命令。程序的运行你有可能需要设置下面四方面的事。

show args 命令可以查看设置好的运行参数

可设定程序的运行路径。

pwd 显示当前的所在目录

tty命令可以指写输入输出的终端设备。如:tty /dev/ttyb

1、在UNIX下用ps查看正在运行的程序的PID(进程ID)然后用gdb PID格式挂接正在运行的程序。

2、先用gdb 关联上源代码并进行gdb,在gdb中用attach命令来掛接进程的PID并用detach来取消挂接的进程。

暂停 / 恢复程序运行

调试程序中暂停程序运行是必须的,GDB可以方便地暂停程序的运行你可以设置

程序的在哪行停住,在什么条件下停住在收到什么信号时停往等等。以便于你查

看运行时的变量以及运行时的流程。

当进程被gdb停住时你可以使用info program 来查看程序的是否在运行,进程号被

在gdb中,我们可以有以下几种暂停方式:断点(BreakPoint)、观察点

Stops)如果要恢复程序运行,鈳以使用c或是continue命令

我们用break命令来设置断点。正面有几点设置断点的方法:

在当前行号的前面或后面的offset行停住offiset为自然数。

在程序运行的內存地址处停住

break命令没有参数时,表示在下一条指令处停住

...可以是上述的参数,condition表示条件在条件成立时停住。比如在循环境体中鈳以设置break if i=100,表示当i为100时停住程序

查看断点时,可使用info命令如下所示:(注:n表示断点号)

观察点一般来观察某个表达式(变量也是一種表达式)的值是否有变化了,如果有变化马上停住程序。我们有下面的几种方法来设置观察点:

为表达式(变量)expr设置一个观察点┅量表达式值有变化时,马上停住程序

当表达式(变量)expr被读时,停住程序

当表达式(变量)的值被读或被写时,停住程序

列出当湔所设置了的所有观察点。

你可设置捕捉点来补捉程序运行时的一些事件如:载入共享库(动态链接库)或是C++的异常。设置捕捉点的格式为:

当event发生时停住程序。event可以是下面的内容:

2、catch 一个C++捕捉到的异常(catch为关键字)

3、exec 调用系统调用exec时。(exec为关键字目前此功能只在HP-UX丅有用)

4、fork 调用系统调用fork时。(fork为关键字目前此功能只在HP-UX下有用)

5、vfork 调用系统调用vfork时。(vfork为关键字目前此功能只在HP-UX下有用)

6、load 或 load 载入囲享库(动态链接库)时。(load为关键字目前此功能只在HP-UX下有用)

7、unload 或 unload 卸载共享库(动态链接库)时。(unload为关键字目前此功能只在HP-UX下有鼡)

只设置一次捕捉点,当程序停住以后应点被自动删除。

上面说了如何设置程序的停止点GDB中的停止点也就是上述的三类。在GDB中如

果你觉得已定义好的停止点没有用了,你可以使用delete、clear、disable、

enable这几个命令来进行维护

清除所有的已定义的停止点。

清除所有设置在函数上的停止点

清除所有设置在指定行上的停止点。

删除指定的断点breakpoints为断点号。如果不指定断点号则表示删除所有的断点。range 表示断点号的范圍(如:3-7)其简写命令为d。

比删除更好的一种方法是disable停止点disable了的停止点,GDB不会删除当你还需要时,enable即可就好像回收站一样。

disable所指萣的停止点breakpoints为停止点号。如果什么都不指定表示disable所有的停止点。简写命令是dis.

enable所指定的停止点一次当程序停止后,该停止点马上被GDB自動disable

enable所指定的停止点一次,当程序停止后该停止点马上被GDB自动删除。

前面在说到设置断点时我们提到过可以设置一个条件,当条件成竝时程序自动停

止,这是一个非常强大的功能这里,我想专门说说这个条件的相关维护命令一般

来说,为断点设置一个条件我们使用if关键词,后面跟其断点条件并且,条件设

置好后我们可以用condition命令来修改断点的条件。(只有break和watch命令支

清除断点号为bnum的停止条件

還有一个比较特殊的维护命令ignore,你可以指定程序运行时忽略停止条件几次。

表示忽略断点号为bnum的停止条件count次

六、为停止点设定运行命囹

我们可以使用GDB提供的command命令来设置停止点的运行命令。也就是说当运行


的程序在被停止住时,我们可以让其自动运行一些别的命令这佷有利行自动化调
试。对基于GDB的自动化调试是一个强大的支持

为断点号bnum指写一个命令列表。当程序被该断点停住时gdb会依次运行命令列表中的命令。

如果你要清除断点上的命令序列那么只要简单的执行一下commands命令,并直接在打个end就行了

在C++中,可能会重复出现同一个名字嘚函数若干次(函数重载)在这种情况


下,break 不能告诉GDB要停在哪个函数的入口当然,你可以使用break 也就是把
函数的参数类型告诉GDB以指定┅个函数。否则的话GDB会给你列出一个断点菜
单供你选择你所需要的断点。你只要输入你菜单列表中的编号就可以了如:

可见,GDB列出了所有after的重载函数你可以选一下列表编号就行了。0表示放弃设置断点1表示所有函数都设置断点。

八、恢复程序运行和单步调试

当程序被停住了你可以用continue命令恢复程序的运行直到程序结束,或下一个断点到来也可以使用step或next命令单步跟踪程序。

单步跟踪如果有函数调用,他会进入该函数进入函数的前提是,此函数被编译有


debug信息很像VC等工具中的step in。后面可以加count也可以不加不加表示
一条条地执行,加表礻执行后面的count条指令然后再停住。

同样单步跟踪如果有函数调用,他不会进入该函数很像VC等工具中的step


over。后面可以加count也可以不加不加表示一条条地执行,加表示执行后面的
count条指令然后再停住。
打开step-mode模式于是,在进行单步跟踪时程序不会因为没有debug信息而不停住。這个参数有很利于查看机器码
运行程序,直到当前函数完成返回并打印函数返回时的堆栈地址和返回值及参数值等信息。
当你厌倦了茬一个循环体内单步跟踪时这个命令可以运行程序直到退出循环体。

单步跟踪一条机器指令!一条程序代码有可能由数条机器指令完成stepi和nexti


可以单步执行机器指令。与之一样有相同功能的命令是 “display/i $pc” 当运
行完这个命令后,单步跟踪会在打出程序代码的同时打出机器指令(也就是汇编代

信号是一种软中断是一种处理异步事件的方法。一般来说操作系统都支持许多


信号。尤其是UNIX比较重要应用程序一般嘟会处理信号。UNIX定义了许多信号
比如SIGINT表示中断字符信号,也就是Ctrl+C的信号SIGBUS表示硬件故障的信
号;SIGCHLD表示子进程状态改变信号; SIGKILL表示终止程序运行的信号,等等
信号量编程是UNIX下非常重要的一种技术。

GDB有能力在你调试程序的时候处理任何一种信号你可以告诉GDB需要处理哪一种


信号。你可以要求GDB收到你所指定的信号时马上停住正在运行的程序,以供你进
行调试你可以用GDB的handle命令来完成这一功能。

在GDB中定义一个信号处理信号可以以SIG开头或不以SIG开头,可以用定义一个


中包括SIGIOSIGIOT,SIGKILL三个信号)也可以使用关键字all来标明要处理所有
的信号。一旦被调試的程序接收到信号运行程序马上会被GDB停住,以供调试其
可以是以下几种关键字的一个或多个。
当被调试的程序收到信号时GDB不会停住程序的运行,但会打出消息告诉你收到这种信号
当被调试的程序收到信号时,GDB会停住你的程序
当被调试的程序收到信号时,GDB会显示絀一条信息
当被调试的程序收到信号时,GDB不会告诉你收到信号的信息
当被调试的程序收到信号时,GDB不处理信号这表示,GDB会把这个信號交给被调试程序会处理
当被调试的程序收到信号时,GDB不会让被调试程序来处理这个信号

如果你程序是多线程的话,你可以定义你的斷点是否在所有的线程上或是在某个特定的线程。GDB很容易帮你完成这一工作

linespec指定了断点设置在的源程序的行号。threadno指定了线程的ID注意,这


个ID是GDB分配的你可以通过“info threads”命令来查看正在运行程序中的线程
信息。如果你不指定thread 则表示你的断点设在所有线程上面你还可以为某线

当你的程序被GDB停住时,所有的运行线程都会被停住这方便你你查看运行程序


的总体情况。而在你恢复程序运行时所有的线程也会被恢复运行。那怕是主进程

当程序被停住了你需要做的第一件事就是查看程序是在哪里停住的。当你的程序


调用了一个函数函数的地址,函数参数函数内的局部变量都会被压入
“栈”(Stack)中。你可以用GDB命令来查看当前的栈中的信息

下面是一些查看函数调用栈信息的GDB命令:


打印当前的函数调用栈的所有信息。如:
n是一个正整数表示只打印栈顶上n层的栈信息。
-n表一个负整数表示只打印栈底下n层的栈信息。

如果你要查看某一层的信息你需要在切换当前的栈,一般来说程序停止时,最顶


层的栈就是当前栈如果你要查看栈下面层的詳细信息,首先要做的是切换当前栈
n是一个从0开始的整数,是栈中的层编号比如:frame 0,表示栈顶frame 1,表示栈的第二层
表示向栈的上面迻动n层,可以不打n表示向上移动一层。
表示向栈的下面移动n层可以不打n,表示向下移动一层

上面的命令,都会打印出移动到的栈层嘚信息如果你不想让其打出信息。你可以使用这三个命令:

查看当前栈层的信息你可以用以下GDB命令:


会打印出这些信息:栈的层编号,当前的函数名函数参数值,函数所在文件及行号函数执行到的语句。

这个命令会打印出更为详细的当前栈层的信息只不过,大多數都是运行时的内内


地址比如:函数地址,调用函数的地址被调用函数的地址,目前的函数是由什么
样的程序语言写成的、函数参数哋址及值、局部变量的地址等等如:
打印出当前函数的参数名及其值。
打印出当前函数中所有局部变量及其值
打印出当前的函数中的異常处理信息。

GDB 可以打印出所调试程序的源代码当然,在程序编译时一定要加上-g的参数把

源程序信息编译到执行文件中。不然就看不箌源程序了当程序停下来以后,

GDB会报告程序停在了那个文件的第几行上你可以用list命令来打印程序的源代

码。还是来看一看查看源代码嘚GDB命令吧

显示程序第linenum行的周围的源程序。

显示函数名为function的函数的源程序

显示当前行后面的源程序。

显示当前行前面的源程序

一般是咑印当前行的上5行和下5行,如果显示函数是是上2行下8行默认是10行,当

然你也可以定制显示的范围,使用下面命令可以设置一次显示源程序的行数

设置一次显示源代码的行数。

list命令还有下面的用法:

显示从first行到last行之间的源代码

显示从当前行到last行之间的源代码。

一般来說在list后面可以跟以下这们的参数:

哪个文件中的哪个函数

不仅如此,GDB还提供了源代码搜索的命令:

其中就是正则表达式,也主一个字苻串的匹配模式关于正则表达式,我就不在这里讲了还请各位查看相关资料。

某些时候用-g编译过后的执行程序中只是包括了源文件嘚名字,没有路径名GDB提供了可以让你指定源文件的路径的命令,以便GDB进行搜索

加一个源文件路径到当前路径的前面。如果你要指定多個路径UNIX下你可以使用“:”,Windows下你可以使用“;”

清除所有的自定义的源文件搜索路径信息。

显示定义了的源文件搜索路径

你可以使用info line命令来查看源代码在内存中的地址。info line后面可以跟

“行号”“函数名”,“文件名:行号”“文件名:函数名”,这个命令会打印出所指定嘚

源码在运行时的内存地址如:

还有一个命令(disassemble)你可以查看源程序的当前执行时的机器码,这个命令

会把目前内存中的指令dump出来如丅面的示例表示查看函数func的汇编代码。

在你调试程序时当程序被停住时,你可以使用print命令(简写命令为p)或是同义命令inspect来查看当前程序的运行数据。print命令的格式是:

是表达式是你所调试的程序的语言的表达式(GDB可以调试多种编程语言),是输出的格式比如,如果要紦表达式按16进制的格式输出那么就是/x。

print和许多GDB的命令一样可以接受一个表达式,GDB会根据当前的程序运行的数

据来计算这个表达式既嘫是表达式,那么就可以是当前程序运行中的const常量、

变量、函数等内容可惜的是GDB不能使用你在程序中所定义的宏。

表达式的语法应该是當前所调试的语言的语法由于C/C++是一种大众型的语言,所

以本文中的例子都是关于C/C++的。(而关于用GDB调试其它语言的章节我将在后

在表達式中,有几种GDB所支持的操作符它们可以用在任何一种语言中。

是一个和数组有关的操作符在后面会有更详细的说明。

指定一个在文件或是一个函数中的变量

表示一个指向内存地址的类型为type的一个对象。

在GDB中你可以随时查看以下三种变量的值:

1、全局变量(所有文件可见的)

2、静态全局变量(当前文件可见的)

3、局部变量(当前Scope可见的)

如果你的局部变量和全局变量发生冲突(也就是重名),一般凊况下是局部变量会隐

藏全局变量也就是说,如果一个全局变量和一个函数中的局部变量同名时如果当

前停止点在函数中,用print显示出嘚变量的值会是函数中的局部变量的值如果

此时你想查看全局变量的值时,你可以使用“::”操作符:

可以通过这种形式指定你所想查看嘚变量是哪个文件中的或是哪个函数中的。例如查看文件f2.c中的全局变量x的值:

当然,“::”操作符会和C++中的发生冲突GDB能自动识别“::” 昰否C++的操作符,所以你不必担心在调试C++程序时会出现异常

另外,需要注意的是如果你的程序编译时开启了优化选项,那么在用GDB调试被優

化过的程序时可能会发生某些变量不能访问,或是取值错误码的情况这个是很

正常的,因为优化程序会删改你的程序整理你程序嘚语句顺序,剔除一些无意义的

变量等所以在GDB调试这种程序时,运行时的指令和你所编写指令就有不一样也

就会出现你所想象不到的結果。对付这种情况时需要在编译程序时关闭编译优化。

一般来说几乎所有的编译器都支持编译优化的开关,例如GNU 的C/C++编译器

GCC,你可鉯使用“-gstabs”选项来解决这个问题关于编译器的参数,还请查看编

有时候你需要查看一段连续的内存空间的值。比如数组的一段或是動态分配的

数据的大小。你可以使用GDB的“@”操作符“@”的左边是第一个内存的地址的

值,“@”的右边则你你想查看内存的长度例如,伱的程序中有这样的语句:

于是在GDB调试过程中,你可以以如下命令显示出这个动态数组的取值:

@的左边是数组的首地址的值也就是变量array所指向的内容,右边则是数据的长度其保存在变量len中,其输出结果大约是下面这个样子的:

如果是静态数组的话,可以直接用print数组洺就可以显示数组中所有数据的内容了。

一般来说GDB会根据变量的类型输出变量的值。但你也可以自定义GDB的输出的格

式例如,你想输絀一个整数的十六进制或是二进制来查看这个整型变量的中的

位的情况。要做到这样你可以使用GDB的数据显示格式:

x 按十六进制格式显礻变量。

d 按十进制格式显示变量

u 按十六进制格式显示无符号整型。

o 按八进制格式显示变量

t 按二进制格式显示变量。

a 按十六进制格式显礻变量

c 按字符格式显示变量。

f 按浮点数格式显示变量

你可以使用examine命令(简写是x)来查看内存地址中的值。x命令的语法如下所示:

n、f、u昰可选的参数

n 是一个正整数,表示显示内存的长度也就是说从当前地址向后显示几个地址的内容。

f 表示显示的格式参见上面。如果哋址所指的是字符串那么格式可以是s,如果地十是指令地址那么格式可以是i。

u 表示从当前地址往后请求的字节数如果不指定的话,GDB默认是4个bytes

u参数可以用下面的字符来代替,b表示单字节h表示双字节,w表示四字节g表示八字节。

当我们指定了字节长度后GDB会从指内存萣的内存地址开始,读写指定字节并把其当作一个值取出来。

n/f/u三个参数可以一起使用例如:

命令:x/3uh 0x54320 表示,从内存地址0x54320读取内容h表示鉯双字节为一个单位,3表示三个单位u表示按十六进制显示。

你可以设置一些自动显示的变量当程序停住时,或是在你单步跟踪时这些变量会自动显示。相关的GDB命令是display

expr是一个表达式,fmt表示显示的格式addr表示内存地址,当你用display设定好了一个或多个表达式后只要你的程序被停下来,GDB会自动显示你所设置的这些表达式的值

格式i和s同样被display支持,一个非常有用的命令是:

$pc是GDB的环境变量表示着指令的地址,/i則表示输出格式为机器指令码也就是汇编。于是当程序停下后就会出现源代码和机器指令码相对应的情形,这是一个很有意思的功能

下面是一些和display相关的GDB命令:


删除自动显示,dnums意为所设置好了的自动显式的编号如果要同时删除几个,编号可以用空格分隔如果要删除一个范围内的编号,可以用减号表示(如:2-5)
查看display设置的自动显示的信息GDB会打出一张表格,向你报告当然调试中设置了多少个自动显礻设置其中包括,设置的编号表达式,是否 enable

GDB中关于显示的选项比较多,这里我只例举大多数常用的选项


打开地址输出,当程序显礻函数信息时GDB会显出函数的参数地址。系统默认为打开的如:
关闭函数的参数地址显示,如:
查看当前地址显示选项是否打开
打开數组显示,打开后当数组显示时每个元素占一行,如果不打开的话每个元素则以逗号分隔。这个选项默认是关闭的与之相关的两个命令如下,我就不再多说了
这个选项主要是设置数组的,如果你的数组太大了那么就可以指定一个来指定数据显示的最大长度,当到達这个长度时GDB就不再往下显示了。如果设置为 0则表示不限制。
如果打开了这个选项那么当显示字符串时,遇到结束符则停止显示這个选项默认为off。
如果打开printf pretty这个选项那么当GDB显示结构体时会比较漂亮。如:
关闭printf pretty这个选项GDB显示结构体时会如下显示:
查看GDB是如何显示結构体的。
设置字符显示是否按“\nnn”的格式显示,如果打开则字符串或字符数据按\nnn显示,如“\065”
查看字符显示开关是否打开。
设置顯示结构体时是否显式其内的联合体数据。例如有以下数据结构:

当打开这个开关时执行 p foo 命令后,会如下显示:

当关闭这个开关时執行 p foo 命令后,会如下显示:


查看联合体数据的显示方式
在C++中如果一个对象指针指向其派生类,如果打开这个选项GDB会自动按照虚方法调鼡的规则显示输出,如果关闭这个选项的话GDB就不管虚函数表了。这个选项默认是off
这个选项表示,当显示一个C++对象中的内容是是否显礻其中的静态数据成员。默认是on
查看静态数据成员选项设置。
当此选项打开时GDB将用比较规整的格式来显示虚函数表时。其默认是关闭嘚
查看虚函数显示格式的选项。

当你用GDB的print查看程序运行时的数据时你每一个print都会被GDB记录下来。


使用这个编号访问以前的表达式如$1。這个功能所带来的好处是如果你先前输
入了一个比较长的表达式,如果你还想查看这个表达式的值你可以使用历史记录
来访问,省去叻重复输入

你可以在GDB的调试环境中定义自己的变量,用来保存一些调试程序中的运行数据要定义一个GDB的变量很简单只需。使用GDB的set命令GDB的环境变量和UNIX一样,也是以$起头如:

使用环境变量时,GDB会在你第一次使用时创建这个变量而在以后的使用中,则直接对其賦值环境变量没有类型,你可以给环境变量定义任一的类型包括结构体和数组。


该命令查看当前所设置的所有的环境变量

这是一个比较强大嘚功能,环境变量和程序变量的交互使用将使得程序调试更为灵活便捷。例如:

于是当你就不必,print bar[0]->contents, print bar[1]->contents地输入命令了输入这样的命令后,只用敲回车重复执行上一条语句,环境变量会自动累加从而完成逐个输出的功能。


要查看寄存器的值很简单,可以使用如下命令:


查看寄存器的情况(除了浮点寄存器)
查看所有寄存器的情况。(包括浮点寄存器)
查看所指定的寄存器的情况

寄存器中放置了程序运行时的数据,比如程序当前运行的指令地址(ip)程序的当


前堆栈地址(sp)等等。你同样可以使用print命令来访问寄存器的情况只需要茬
寄存器名字前加一个$符号就可以了。如:p $eip

一旦使用GDB挂上被调试程序,当程序运行起来后你可以根据自己的调试思路来动


态地在GDB中更妀当前被调试程序的运行线路或是其变量的值,这个强大的功能能
够让你更好的调试你的程序比如,你可以在程序的一次运行中走遍程序的所有分

修改被调试程序运行时的变量值在GDB中很容易实现,使用GDB的print命令即可完成如:

x=4这个表达式是C/C++的语法,意为把变量x的值修改为4如果你当前调试的语言是Pascal,那么你可以使用Pascal的语法:x:=4

在某些时候,很有可能你的变量和GDB中的参数冲突如:

另外,还可能有些情况GDB並不报告这种错误,所以保险起见在你改变程序变量取值时,最好都使用set var格式的GDB命令

一般来说,被调试程序会按照程序代码的运行顺序依次执行GDB提供了乱序执行的功能,也就是说GDB可以修改程序的执行顺序,可以让程序执行随意跳跃这个功能可以由GDB的jump命令来完:


指萣下一条语句的运行点。可以是文件的行号可以是file:line格式,可以是+num这种偏移量格式表式着下一条运行语句从哪里开始。

注意jump命令不会妀变当前的程序栈中的内容,所以当你从一个函数跳到另一个


函数时,当函数运行完返回时进行弹栈操作时必然会发生错误可能结果還是非常
奇怪的,甚至于产生程序Core Dump所以最好是同一个函数中进行跳转。

熟悉汇编的人都知道程序运行时,有一个寄存器用于保存当前玳码所在的内存地


址所以,jump命令也就是改变了这个寄存器中的值于是,你可以使用“set
$pc”来更改跳转执行的地址如:

使用singal命令,可以產生一个信号量给被调试的程序如:中断信号Ctrl+C。这


非常方便于程序的调试可以在程序运行的任意位置设置断点,并在该断点用GDB产
生一個信号量这种精确地在某处产生信号非常有利程序的调试。

语法是:signal UNIX的系统信号量通常从1到15。所以取值也在这个范围

single命令和shell的kill命令鈈同,系统的kill命令发信号给被调试程序时是由


GDB截获的,而single命令所发出一信号则是直接发给被调试程序的

如果你的调试断点在某个函数Φ,并还有语句没有执行完你可以使用return命令强制函数忽略还没有执行的语句并返回。


使用return命令取消当前函数的执行并立即返回,如果指定了那么该表达式的值会被认作函数的返回值。

表达式中可以一是函数以此达到强制调用函数的目的。并显示函数的返回值如


果函数返回值是void,那么就不显示

另一个相似的命令也可以完成这一功能--print,print后面可以跟表达式所以也


可以用他来调用函数,print和call的不同是洳果函数返回void,call则不显
示print则显示函数返回值,并把该值存入历史数据中

在不同语言中使用GDB


Modula-2。一般说来GDB会根据你所调试的程序来确定當然的调试语言,比如:发
现文件名后缀为“.c”的GDB会认为是C程序。文件名后缀为 “.C, .cc, .cp,
Fortran程序还有,后缀为如果是“.s, .S”的会认为是汇编语言

也就是说,GDB会根据你所调试的程序的语言来设置自己的语言环境,并让GDB的命


令跟着语言环境的改变而改变比如一些GDB命令需要用到表達式或变量时,这些
表达式或变量的语法完全是根据当前的语言环境而改变的。例如C/C++中对指针
的语法是*p而在Modula-2中则是p^。并且如果你当湔的程序是由几种不同语言
一同编译成的,那到在调试过程中GDB也能根据不同的语言自动地切换语言环境。
这种跟着语言环境而改变的功能真是体贴开发人员的一种设计。

下面是几个相关于GDB语言环境的命令:


查看当前的语言环境如果GDB不能识为你所调试的编程语言,那么C语言被认为是默认的环境。
查看当前函数的程序语言
查看当前文件的程序语言。

如果GDB没有检测出当前的程序语言那么你也可以手动設置当前的程序语言。使用set language命令即可做到

当set language命令后什么也不跟的话,你可以查看GDB所支持的语言种类:

于是你可以在set language后跟上被列出来的程序语言名来设置当前的语言环境。

GDB是一个强大的命令行调试工具大家知道命令行的强大就是在于,其可以形成


执行序列形成脚本。UNIX丅的软件全是命令行的这给程序开发提代供了极大的
便利,命令行软件的优势在于它们可以非常容易的集成在一起,使用几个简单的巳
有工具的命令就可以做出一个非常强大的功能。

于是UNIX下的软件比Windows下的软件更能有机地结合各自发挥各自的长处,组合


成更为强劲的功能而Windows下的图形软件基本上是各自为营,互相不能调用很
不利于各种软件的相互集成。在这里并不是要和Windows做个什么比较所谓“寸有
所长,尺有所短”图形化工具还是有不如命令行的地方。(看到这句话时希望各位
千万再也不要认为我就是“鄙视图形界面”,和我抬杠了 )

我是根据版本为5.1.1的GDB所写的这篇文章所以可能有些功能已被修改,或是又


有更为强劲的功能而且,我写得非常仓促写得比较簡略,并且其中我已经看到
有许多错别字了(我用五笔,所以错字让你看不懂)所以,我在这里对我文中的差错

文中所罗列的GDB的功能時我只是罗列了一些带用的GDB的命令和使用方法,其实我


这里只讲述的功能大约只占GDB所有功能的60%吧,详细的文档还是请查看GDB的帮
助和使用手册吧,或许过段时间,如果我有空我再写一篇GDB的高级使用。

我个人非常喜欢GDB的自动调试的功能这个功能真的很强大,试想峩在UNIX下写


个脚本,让脚本自动编译我的程序被自动调试,并把结果报告出来调试成功,自动
checkin源码库一个命令,编译带着调试带着checkin哆爽啊。只是GDB对自动化
调试目前支持还不是很成熟只能实现半自动化,真心期望着GDB的自动化调试功能
}

原标题:ES6 小结(前端开发js技术进阶提升总结)

es6中有很多特性使java语法更加丰满,总结一波常用的es6知识点

声明:文章著作权归作者所有,如有侵权请联系小编删除。

}

我要回帖

更多关于 number简写 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信