i007.cc

i007.cc

优先队列-降维打击

linux c 开发工具gcc gdb的使用:

原创 2013年11月04日 21:10:06

1、GCC最基本的用法是∶gcc [options] [filenames]

其中options就是编译器所需要的参数,filenames给出相关的文件名称。

-c,只编译,不链接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。

-o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。

-g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。

-O,对程序进行优化编译、链接,采用这个选项,整个源代码会在编译、链接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、链接的速度就相应地要慢一些。

-O2,比-O更好的优化编译、链接,当然整个编译、链接过程会更慢。

-Idirname,将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。C程序中的头文件包含两种情况∶

另外附上其他用法:

gcc -pedantic source.c  //使用扩展语法产生警告信息。

gcc -Wall source.c //产生更多警告。推荐使用

gcc -Werror source.c //警告当成错误来处理。

gcc -save-temps source.c

time ./exe //统计运行时间

2、gdb

2.1、list line1,line2 查看源代码

list lineNum 在lineNum的前后源代码显示出来

list + 列出当前行的后面代码行

list – 列出当前行的前面代码行

list function

set listsize count 设置显示代码的行数

show listsize 显示打印代码的行数

list first,last 显示从first到last的源代码行

2.2、加载程序
(gdb) file a.out //加载被调试的可执行程序文件。

(gdb)set args –b –x

(gdb) show args

(gdb)r //执行程序run

backtrace命令为堆栈提供向后跟踪功能。

Backtrace 命令产生一张列表,包含着从最近的过程开始的所有有效过程和调用这些过程的参数。

2.3、显示数据
(gdb) print p (p为变量名)

(gdb) print find_entry(1,0) (函数名)

(gdb) print *table_start  (打印结构体)

(gdb)print h@10  =(-1,345,23,-234,0,0,0,98,345,10)

whatis命令可以显示某个变量的类型

(gdb) whatis p
type = int *

2.4 break

break line-number 使程序恰好在执行给定行之前停止。

break function-name 使程序恰好在进入指定的函数之前停止。

break line-or-function if condition 如果condition(条件)是真,程序到达指定行或函数时停止。

break routine-name 在指定例程的入口处设置断点

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

(gdb) break filename:line-number

(gdb) break filename:function-name

(gdb) break line-or-function if expr

(gdb) break 46 if testsize==100

2.5、断点信息

(gdb) info break

(gdb) delete breakpoint 1 该命令将会删除编号为1的断点,如果不带编号参数,将删除所有的断点

(gdb) delete breakpoint

(gdb) disable breakpoint 1

(gdb) enable breakpoint 1

(gdb)clear number  注:number 为源文件的某个代码行的行号

2.6、变量检查赋值

whatis:识别数组或变量的类型

ptype:比whatis的功能更强,他可以提供一个结构的定义

set variable = value:将值赋予变量

print variable = value or p variable = value : 除了显示一个变量的值外,还可以用来赋值

2.7、执行

(gdb) next

(gdb) step

(gdb) call gen_and_sork(1234,1,0)

(gdb) call printf(“abcd”)

(gdb) finish  结束执行当前函数,显示其返回值(如果有的话)

2.8、其他用法:
(gdb) crash
(gdb) run
(gdb) backtrace
(gdb) frame 3
(gdb) quit

发表回复