GDB总结

http://my.csdn.net/haoel

以下内容主要参考上面博主的文章,我是把他写的GDB总结看了一遍,然后汇总了一些我可能以后经常用的功能,方便以后我查找学习

l                                 ::显示代码

break(b) 行数           ::设置断点位置
info break                 ::查看断点信息
r                                ::运行程序
n                               ::单语句执行next命令简写
p 变量名                   ::打印变量的值
bt                             ::查看函数堆栈,如果后面跟的是正整数表示打印栈顶上n层的栈信息,如果后面跟的是负整数表示打印栈底下n层的栈信息
finish                        ::退出函数
watch expr              ::为表达式变量expr设置一个观察点,一旦表达式值有变化时,马上停住程序


clear                   ::清除所有的已定义的停止点
clear linenum           ::清楚设置在指定行上的停止点
http://blog.csdn.net/haoel/article/details/2881


在C++中可能该出现同一个名字的函数若干次(函数重载)
b String::after
GDB会给你列出一个断点菜单供你选择你所需要的断点这时候你选择第几个就好了
c/continue/fg [ignore-count]后面的ignore-count表示忽略其后的断点次数


step count 单步跟踪,如果有函数调用,他会进入该函数,进入函数的前提是此函数被编译有debug信息,count不加表示一条条的执行,加表示执行后面的count条指令然后再停住


finish      运行程序,直到当前函数完成返回。并打印函数返回时的堆栈地址和返回值及参数值等信息。


util 或 u   当你厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体




http://blog.csdn.net/haoel/article/details/2881
:::::GDB的信号:::::用handle
handle <signal><keywords...>





:::::GDB的线程:::::


info threads查看正在运行的线程的信息
不指定thread就表示你的断点在所有线程上面
    当你的程序被GDB停住时,所有的运行线程都会被停住。这方便你你查看运行程序的总体情况。而在你恢复程序运行时,所有的线程也会被恢复运行。那怕是主进程在被单步调试时。




关于栈的查看:
f                       ::打印栈的层编号,当前函数名,函数参数值,函数所在文件及行号,函数执行到的语句  
info frame/f            ::打印出更为详细的当前栈层的信息,只不过大多数都是运行时的地址:函数地址,调用函数的地址,目前的函数是由什么样的程序语言写成的,函数参数地址及值,局部变量地址等等
info args               ::打印出当前函数的参数名及其值
info locals             ::打印出当前函数中所有局部变量及其值
info catch              ::打印出当前函数中的异常处理信息








关于显示:
l就会向下显示
set listsize<count>
设置一次显示源代码的行数




搜索源代码
forward-search <regexp>
search <regexp>
向前面搜索
reverse-search <regexp>
全部搜索




file::variable
function::variable
用来查看文件中和函数中的变量(gdb自动识别::是否是C++操作符)


对于数组-----------------------------------------
int* array = (int*)malloc(len*sizeof(int));
p *array@len
@左边是数组的首地址的值,也就是array所指的内容,右边则是数据的长度,目前该语句的作用是输出array所有的内容




输出格式
p/a i
表示按十六进制格式显示变量,还有其他方式可以参考 
http://blog.csdn.net/haoel/article/details/2883




查看寄存器
info register(除了浮点寄存器)
info all-registers 查看所有寄存器的情况


------------------------------------------------------
修改被调试程序运行时候的值
print x=4(C/C++)
这样就把x的值改成了4




GDB还可以让程序跳转执行
jump <linespec>
跳转到代码行的位置


产生信号量:
使用signal命令可以产生一个信号量给被调试的程序。
signal <signal>
注意自己产生的信号直接发给被调试程序
系统的kill命令发信号给被调试程序时,是由GDB截获的


return <expression>
强制函数返回


call <expr>
强制调用函数






关于gdb如何调试多线程
http://blog.csdn.net/pbymw8iwm/article/details/7876797
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值