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
