gcc和gdb简单使用

读书笔记

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表示显示机器码,也即是汇编代码。停止时会显示机器码和代码对应情形。

 

examinex查看内存

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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章