Linux core dumps 的调试

前言:
     上篇 文章 里提到如何生成core dumps,调试core dumps对于linux程序员也是家常便饭,这篇文章介绍在linux系统里如何通过gdb调试core dumps 文件。对于程序的编译,运行那是另外一个话题,此篇文章略过,只谈gdb命令和gdb调试core dumps文件。

gdb简单命令:
     1、开始和停止
     gdb program.exe

     装载程序


     run

     运行程序,命令也可以用简写 r


     r < file
     r [argv]

     通过传递文件流, 或者参数运行程序


     help

     帮助命令,简单列出gdb命令信息,简写为h


     help  [name]

     列出具体命令帮助信息,name为命令名


     quit
     退出gdb调试程序,简写为q

     2、代码查看和断点
     list 20

     从当前代码开始,列出20行代码 ,并且指向最后一行,下次再执行list,从当前行开始。如果list参数为空,列出当前10行代码,如果是两个参数,列出范围代码。简写为 l


     list function

     列出当前函数前后代码


     info

     列出当前信息,比如info break,列出断点信息,info stack 列出当前堆栈信息,info frame 列出当前程序执行的程式信息。


     frame    

     当前程序将要执行的程式信息,简写为f


     break

     在当前frame下断点,简写为b


     b n

     在程序第n行下断点


     b function

     在函数内部第一条可执行语句下断点。


     delete n

     删除第n个断点,如果不带参数,删除所有断点,简写为del


     watch i == 3

     设置观察判断语句,一旦程序执行到满足条件的地方,程序停止。这个功能对于循环调试帮助非常大。同时对于空指针,非法值调试起到事半功倍的效果。


     print var

     打印变量值和数据结构,简写为p


     display val

     每执行一条程式,都显示一次变量的值,其实watch才是最佳选择


     undisplay val
     取消对变量val的显示

     3、单步调试
     next

     执行下一条程式,遇到程序直接跳过,简写为n


     step

     执行下一条程式,遇到函数,跳入函数,简写为s


     finish

     执行完程序,并暂停到函数下一行可执行程式。


     continue

     继续运行程序,直到下一个断点暂停,或者如果没有断点,程序执行完毕,退出。简写为c


     call function()

     调用函数,并且可以传递参数,这对调试或者测试来说,太实用了,并且调用函数不影响当前程序的执行。


     set x value
     设置变量x的值为value,在调试程序的时候,可以设置假想值,调试程序还是很方便的。
     
     4、堆栈调试
     backtrace

     显示当前执行程式的堆栈信息,简写为bt


     up

     上一层堆栈


     down

     下一层堆栈


     return
     从当前函数退出,在当前执行函数的下一条执行程式暂停。

gdb调试core dumps:
     gdb program core
     载入dump文件, program为产生dump的文件,这两个必须要一致,不然符号表和程序完全对不上,如果没有及时发现,会耽误很多时间。运行dump 文件后,程序会停在崩溃程式的那一行,然后就可以通过,print, up, down 这些命令来精确定位程序bug。
     
总结:
     上面只是罗列出部分gdb命令,gdb, make, gcc 每个工具都足够写一本书的,可能很多人怕麻烦,认为我有Ide,啥都用鼠标搞定,为啥学习这些东西浪费时间。其实磨刀不误砍柴工,ide的可视化界面只不过是加了漂亮的外壳而已,不过不明白原理和基础,在学习和实用C/C++的道路上会遇到更多的问题,花费更加巨量的时间。可能开始感觉学习这些东西浪费时间了,但把这些东西搞透了,后面反而节省了更多的时间。那种方式更高效,显而易见。

参考资料:
http://betterexplained.com/articles/debugging-with-gdb/
http://www.cs.dartmouth.edu/~campbell/cs50/gdb.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值