gcc,gdb,makefile
来源:互联网 发布:关于编程的电影 编辑:程序博客网 时间:2024/06/07 14:14
gcc
1.gcc 编译时加入调试信息
gcc -g
2.c++编译
gcc -lstdc++ xxx.cpp
或:
g++ xxx.cpp
3.静态库 和 动态库
这段转自这里
1,如何生成静态库
静态库只是一堆object对象的集合,使用ar命令可以将.o文件打包成.a静态库。
假设gcc已经生成了a.o, b.o, c.o,使用下面的命令即可生成libmylib.a
$ar rcs libmylib.a a.o b.o c.o
2,如何生成动态库
动态库的生成由gcc直接生成。
假设a.c, b.c两个文件,通过下面的命令可生成libmylib.so
$gcc a.c b.c -o libmylib.so --shared
3,如何使用库
gcc中关于库的参数有:
-L 指定搜寻库的目录
如指定当前目录 gcc -L .
-l 指定要链接的库的名称
加入库的名称是libmylib.a,则gcc -l mylib,即去头去尾。
–static 组织在链接时使用动态库
–shared 生成动态库
–static-libgcc 链接静态libgcc库
–shared-libgcc 链接动态libgcc库可见对动态库和静态库的使用方法是一样的,同一个库如果同时存在动态库和静态库,优先链接动态库,除非使用–static强制使用静态库。
gcc 编译动态库时有人用-fpic,不知道有什么用 gcc -c -fpic hello1.c hello2.c
ldd
查看程序需要的动态连接库
gdb
0.运行和命令行参数
start
r
=run
c
=continue
n
=next
finish
返回当前函数 until
直到循环结束 run arg1 arg2 arg3
=set args arg1 arg2 arg3
+run
k
=kill
show args
show paths
show environment
info program
调试已运行进程:
gdb [program] [pid]
或者:
gdb [program]
然后 , attach [pid]
1.查看代码
l
=list
搜索 search [regexp]
forward-search [regexp]
reverse-search [regexp]
查看汇编 disaaaemble [function name]
2.断点
break [line number]
break [function name]
i breakpoints
=info breakpoints
delete breakpoint [number]
disable breakpoint [number]
enable breakpoint [number]
3.查看变量x
p x
=print x
print
=inspect
? display x
undisplay x
display/i $pc
???
数组:
malloc的指针 print *array@len
静态数组 print array
格式:
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十六进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
c 按字符格式显示变量。
f 按浮点数格式显示变量。
(gdb) p i $21 = 101 (gdb) p/a i $22 = 0x65 (gdb) p/c i $23 = 101 'e' (gdb) p/f i $24 = 1.41531145e-43 (gdb) p/x i $25 = 0x65 (gdb) p/t i $26 = 1100101
当变量改变是停住程序
变化时停住:watch x
被读时停住:rwatch x
被读写停住:awatch x
info watchpoints
4.查看内存
examine
=x
x/<n/f/u> [addr]
n、f、u是可选的参数。n 是一个正整数,表示显示内存的长度,也就是说从当前地址向后显示几个地址的内容。f 表示显示的格式,参见上面。如果地址所指的是字符串,那么格式可以是s,如果地十是指令地址,那么格式可以是i。u 表示从当前地址往后请求的字节数,如果不指定的话,GDB默认是4个bytes。u参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字节,g表示八字节。当我们指定了字节长度后,GDB会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。<addr>表示一个内存地址。n/f/u三个参数可以一起使用。例如:命令:x/3uh 0x54320 表示,从内存地址0x54320读取内容,h表示以双字节为一个单位,3表示三个单位,u表示按十六进制显示。
5.查看寄存器
info registers
info all-registers
包括浮点寄存器 info register eax
print $esp
6.查看堆栈
bt
=backtrace
makefile
陈皓的教程太长了,而且一些东西用不到,看完之后就很快会忘掉
推荐阮一峰的这篇
几个例子:
多个文件目录下Makefile的写法
最后,vpath
VPATH
好像是和%.c
%.h
这类搭配使用的
还有一篇关于cmake的:
http://www.leoox.com/?p=264
参考:
0.1陈皓的blog(gdb):http://blog.csdn.net/haoel/article/category/9197
0.2陈皓的blog(makefile):http://blog.csdn.net/haoel/article/category/9198/1
1.http://www.cnblogs.com/bubbler/p/3915931.html
2.gdb: http://www.2cto.com/os/201303/194230.html
3.gdb: http://blog.csdn.net/mifan88/article/details/7301973
4.gcc: http://www.cnblogs.com/iloveyoucc/archive/2012/08/29/2661851.html
5.makefile: http://www.cnblogs.com/little221/archive/2012/12/02/2798401.html
- gcc/makefile/gdb常用命令
- linux GCC、GDB、Makefile
- linux GCC、GDB、Makefile
- gcc gdb make makefile
- GCC,GDB,Makefile
- GCC、GDB、Makefile
- GCC/Makefile/GDB
- gcc,gdb,makefile
- gcc,gdb,makefile
- linux下gcc、gdb、makefile
- gcc、makefile、gdb学习笔记
- linux-基础-gcc/gdb/makefile
- Linux学习之GCC&GDB,Makefile
- gcc、gdb、makefile 学习和用法
- Linux程序设计基础(gcc、makefile、gdb)
- GCC+GDB+Makefile学习和使用记录
- Linux 开发工具 ---gcc makefile gdb
- makefile文件和gcc g++ gdb编译
- BAT MYSQL BACKUP AND ARCHIVE WITH WINRAR
- mac下修改环境变量
- QT16 delete data from sqlite database with pushbutton
- 导入内容错误
- Two Sum
- gcc,gdb,makefile
- android studio 使用技巧
- 设计模式之 抽象工厂模式的扩展(C++实现)
- 转:典型错误:locale.Error:unsupported locale setting
- Qt17 load sqlite table data to qtableview
- 面向对象编程的原则
- QT18 how to link QListView with sqlite Database values
- 为什么Nginx的性能要比Apache高很多?
- 第一章 用神经网络识别手写数字(第一节 感知器)