一:列文件清单 1. List (gdb) list line1,line2 二: 执行程序要想运行准备调试的程序, 可使用 run 命令, 在它后面可以跟随发给该程序的任何参数, 包括标准输入和标准输出说明符() 和外壳通配符( *、?、[、] )在内。如果你使用不带参数的 run 命令, gdb 就再次使用你给予前一条 run 命令的参数, 这是很有用的。利用 set args 命令就可以修改发送给程序的参数,而使用 show args 命令就可以查看其缺省参数的列表。( gdb ) set args –b–x (gdb) show args backtrace 命令为堆栈提供向后跟踪功能。 Backtrace 命令产生一张列表,包含着从最近的过程开始的所以有效过程和调用这些过程的参数。三: 显示数据利用 print 命令可以检查各个变量的值。(gdb) print p (p 为变量名) whatis 命令可以显示某个变量的类型(gdb) whatis p type = int * print 是 gdb 的一个功能很强的命令, 利用它可以显示被调试的语言中任何有效的表达式。表达式除了包含你程序中的变量外, 还可以包含以下内容: l对程序中函数的调用(gdb) print find_entry(1,0) l 数据结构和其他复杂对象(gdb) print *table_start $8={e=reference= ’¥000 ’,location=0x0,next=0x0} l值的历史成分(gdb)print $1 ($1 为历史记录变量, 在以后可以直接引用$1 的值) l人为数组人为数组提供了一种去显示存储器块(数组节或动态分配的存储区)内容的方法。早期的调试程序没有很好的方法将任意的指针换成一个数组。就像对待参数一样,让我们查看内存中在变量h 后面的 10 个整数,一个动态数组的语法如下所示: ******@length 因此,要想显示在 h 后面的 10 个元素,可以使用 ******@10 : (gdb)print ******@10 $13=(-1,345,23,-234,0,0,0,98,345,10) 四: 断点(breakpoint) break 命令(可以简写为b )可以用来在调试的程序中设置断点, 该命令有如下四种形式: l break line-number 使程序恰好在执行给定行之前停止。 l break function-name 使程序恰好在进入指定的函数之前停止。 l break line-or-function if condition 如果 condition (条件)是真,程序到达指定行或函数时停止。 l break routine-name 在指定例程的入口处设置断点如果该程序是由很多原文件构成的,你可以在各个原文件中设置断点,而不是在当前的原文件中设置断点,其方法如下: (gdb) break filename:line-number (gdb) break filename:function-name 要想设置一个条件断点,可以利用 break if 命令,如下所示: (gdb) break line-or-function if expr 例: (gdb) break 46 if testsize==100 从断点继续运行: countinue gdb 的断点信息: (gdb) info break 他会以如下的形式显示所有的断点信息: Num Type Disp Enb Address What 1 breakpoint keep y 0x000028bc in init_random at :155 2 breakpoint keep y 0x0000291c in an at :168 (gdb) : (gdb) delete breakpoint 1 该命令将会删除编号为1 的断点,如果不带编号参数,将删除所有的断点(gdb) delete breakpoint 3. 禁止使用某个断点(gdb) disable breakpoint 1 该命令将禁止断点 1,同时断点信息的(Enb) 域将变为 n 4 .允许使用某个断点(gdb) enable breakpoint 1 该命令将允许断点 1,同时断点信息的(Enb) 域将变为 y 5 .清除原文件中某一代码行上的所有断点(gdb)clean number 注: number 为原文件的某个代码行的行号六. 变量的检查和赋值 l whatis: 识别数组或变量的类型 l ptype: 比 whatis 的功能更强,他可以提供一个结构的定义 l set vari
gdb 详解 来自淘豆网m.daumloan.com转载请标明出处.