您的位置:首页 > 其它

gcc和gdb简单使用

2015-11-24 17:52 381 查看
读书笔记



1 预处理in.c out.i

gcc–E b.c –o b.i //让程序在预处理结束后停止编译过程 –E

2编译 in.i out.s

gcc–S b.i –o b.s

3.汇编 in.s out.o

gcc–c b.s –o b.o

4链接 输入为.o和其他的代码文件和库文件

gccb.o –o b

输出b就是一个可执行文件

如何使用GDB

首先编译时候要加入调试信息,用命令

gcc–g b.c –o b、、、、-g、-ggdb、-g3和-ggdb3

打开gdb调试 b

命令:gdb b

运行:run 会显示错误在那里

回溯:backtrace(bt)显示具体错误信息

显示错误代码 frame n

设置断点 break(b)

break<function>在进入指定函数时停住

break<linenum> 在指定行号前停住

break+-offset 在当前行号的前面(+)offset处停住 (-)后

break if(condition)在什么条件下停住

break没有参数代表在下一条指令处停住

breakfilename:function/linenum在源文件filename的。。。处停住

break*address在程序运行的内存处停止

delete 1 删除断点 1是断点的序号

break后面跟的那些参数很多其他的命令 比如list jump都可以用

watch i 变量i值有变化就停止

运行run(r)终止kill

单步进入函数step(s)

单步不进入函数next

print(查看运行时数据,print和$符号使用,以及输出格式)

print<expr> print/<fmt> <expr>

printa; print $;print $$;print $n

print/aa 显示十六进制格式的a (Xduotacf)

print还可以赋值print a=100;

display 自动显示命令

display<expr> display/<fmt><expr> display/<fmt><addr>

expr是一个表达式 fmt显示格式 addr表示内存地址

undisplay<dnums> delete display<dnums> 删除显示

disabledisplay<dnums> enable display<dnums> 失效或者恢复显示 info display 显示序号信息及是否有效等信息

显示的每一个变量都会加一个序号dnum,对dnum操作即可实现删除或者失效否

display/i $pc $pc 是gdb环境变量,就是指令的地址,/i表示显示机器码,也即是汇编代码。停止时会显示机器码和代码对应情形。

examine(x)查看内存

x/<n/f/u><addr> fu是参数可以独立或者联合使用,n正整数表示显示几个内存的内容 ;f格式,支持s,i格式;u字节数,bhwg分别表示1248个字节

set命令很强大

info

list(显示代码)

quit(退出gdb)

watchbachtrace frame n examine signal return call make shell//这两个需要系统支持(我的是在win7下mingw不可以,没装mnys)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: