gdb常用功能

1,调试core dump 文件
    ulimit -c 1024:设置coredump文件大小为1024,否则默认不会生成coredump文件
    gdb -c core:gdb调试该coredump文件
    file a.out:指定符号表文件
    bt:打印堆栈信息

2,插入断点:
    b/break  15
    b  funcname
    b  filename::linenum
    b  默认在下一条指令停止
    b if a=100

3,退出gdb
    q
    quit

4,执行shell命令
    shell clear

5,停止运行程序/恢复运行
    断点(breakpoint),观察点(watchpoint),捕捉点(catchpoint),信号(signal),线程停止(thread stops)
    c/continue恢复运行

6,设置观察点
    watch  <expr>    
    rwatch  <expr>    当expr被读时停止程序
    awatch  <expr>    当expr被读或写时停止程序

7,维护停止点
    clear    清除所有停止点,只有在程序运行时才起作用
    clear  <function>
    clear  <linenum>
    d/delete  [breakpoints][range...]    删除指定的断点,breakpoints表示断点号,range表示断点号的范围,如3-7
    dis/disable  [breakpoints][range...]    禁用指定的断点

8,单步运行
    c/fg/continue    恢复程序运行直到下一个断点
    step  <count>    单步count次,如果有函数调用,进入该函数内部执行
    next  <count>    单步count次,如果有函数调用,不会进入该函数
    finish    运行程序直到当前函数完成返回
    u/until    运行程序直到完成当前循环体并返回

9,查看栈信息
    bt/backtrace    打印当前函数调用栈的所有信息
    bt <n>    打印栈顶上n层信息
    bt <-n>    打印栈低下n层信息
    f/frame  <n>    一般来说,程序停止时,当前栈就是最顶层栈,f/frame 0表示打印0层,即栈顶信息,n表示打印第n层栈信息,打印信息比bt丰富
    up  <n>    向栈的上面移动n层,如果没有n,则表示移动一层
    down  <n>    向栈的下面移动n层,如果没有n,则表示移动一层
    info  f/frame,打印更为详细的信息
    info  args    打印当前函数的参数名及值
    info  locals    打印当前函数中所有局部变量的值
    info  catch    打印当前函数中异常处理信息

10,查看源代码
    list  <linenum>    显示程序第linenum行的周围的源程序
    list  <function>    显示函数名为function的函数的源程序     
    list    显示当前行后面的源程序
    list -   显示当前行前面的源程序
    一般是打印当前行的上5行和下5行,如果显示函数是是上2行下8行,默认是10行,当然,你也可以定制显示的范围,使用下面命令可以设置一次显示源程序的行数
    set listsize <count>    设置一次显示源代码的行数
    show listsize    查看当前listsize的设置       
list命令还有下面的用法:
    list <first>, <last>    显示从first行到last行之间的源代码
    list , <last>    显示从当前行到last行之间的源代码  
    list +    往后显示源代码
一般来说在list后面可以跟以下这们的参数:
    <linenum>   行号
    <+offset>   当前行号的正偏移量
    <-offset>   当前行号的负偏移量
    <filename:linenum>  哪个文件的哪一行
    <function>  函数名
    <filename:function> 哪个文件中的哪个函数
    <*address>  程序运行时的语句在内存中的地址

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

12,源代码在内存中的位置
    info  line  <test.c:function>
    info  line  <linenum>

13,查看源代码的机器码
    disassemble  function

14,查看运行时数据
    p/print  <expr>
    p  /<f>  <expr>    <f>是输出的格式,如果设置十六进制输出的话,就是/x
    x  按十六进制格式显示变量。
    d  按十进制格式显示变量。
    u  按十六进制格式显示无符号整型。
    o  按八进制格式显示变量。
    t  按二进制格式显示变量。
    a  按十六进制格式显示变量。
    c  按字符格式显示变量。
    f  按浮点数格式显示变量。

15,打印数组
    int *array = (int *) malloc (len * sizeof (int));
    p  *[email protected]    @左边是数组地址,右边是数组长度

16,自动显示,即程序停止或单步跟踪时,变量自动显示
    display  <expr>
    display  /<fmt>  <expr>
    display  /<fmt>  <addr>
    info  display    打印设置的自动显示的变量信息

17,查看寄存器的值
    info  registers
    info  all-registers
    info  registers  <regname...>

需要注意的是,如果你的程序编译时开启了优化选项,那么在用GDB调试被优化过的程序时,可能会发生某些变量不能访问,或是取值错误码的情况。这个是很正常的,因为优化程序会删改你的程序,整理你程序的语句顺序,剔除一些无意义的变量等,所以在GDB调试这种程序时,运行时的指令和你所编写指令就有不一样,也就会出现你所想象不到的结果。对付这种情况时,需要在编译程序时关闭编译优化。一般来说,几乎所有的编译器都支持编译优化的开关,例如,GNU的C/C++编译器GCC,你可以使用“-gstabs”选项来解决这个问题。

时间: 2024-11-10 09:47:27

gdb常用功能的相关文章

GDB常用命令使用说明(一)

本文由霸气的菠萝原创,转载请注明出处:http://www.cnblogs.com/xsln/p/gdb_instructions1.html 全部关于gdb的文章索引请点这里 GDB(GNU Debugger)是在Unix以及类Unix系统下的调试工具.功能极其强大,几乎涵盖了你所需要的全部功能. GDB主要帮忙你完成下面四个方面的功能: 1.启动你的程序,可以按照你的定制要求随心所欲的运行程序. 2.可让被调试的程序在你所指定的调置的断点处停住. 3.当程序被停住时,可以检查此时你的程序中所

GDB 常用的命令(转)

转自 http://blog.csdn.net/gnuhpc/article/details/4368831 调用gdb编译需要在cc后面加 -g参数再加-o: [[email protected] home]#gdb 调试文件:启动gdb (gdb) l :(字母l)从第一行开始列出源码 (gdb) break n :在第n行处设置断点 (gdb) break func:在函数func()的入口处设置断点 (gdb) info break: 查看断点信息 (gdb) r:运行程序 (gdb)

GDB常用命令使用

GDB(GNU Debugger)是在Unix以及类Unix系统下的调试工具.功能极其强大,几乎涵盖了你所需要的全部功能. GDB主要帮忙你完成下面四个方面的功能: 1.启动你的程序,可以按照你的定制要求随心所欲的运行程序. 2.可让被调试的程序在你所指定的调置的断点处停住. 3.当程序被停住时,可以检查此时你的程序中所发生的事,以及内存状态等. 4.动态的改变你程序的执行环境. gdb使用总旨:help指令很强大!多用help!help里面总会有你需要的信息.如果你不知道如何使用help,请在

js常用功能代码

js常用功能代码(持续更新): 1,--折叠与展开 <input id="btnDisplay" type="button" class="baocun2" value="添加" onclick="changeDisplay()" /> <script type="text/javascript"> function changeDisplay() { var h

SVN的安装与常用功能使用以及解决安装配置过程中的一些错误

SVN简介: SVN是Subversion的简称,是一个开放源代码的版本控制系统,将工程代码集中在服务器上进行一个统一的集中式管理,从而能够方便地控制代码版本,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上很多版本控制服务已从CVS迁移到Subversion.说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的,而且通过使用SVN开发人员之间[学Java,到凯哥学堂kaige123.com]能够很方便的更新.提交工程代码,并且如果工程的版本有冲突还

WebStorm常用功能的使用技巧分享

WebStorm 是 JetBrain 公司开发的一款 JavaScript IDE,使用非常方便,可以使编写代码过程更加流畅. 本文在这里分享一些常用功能的使用技巧,希望能帮助大家更好的使用这款强大的 JavaScript 开发工具. 代码编辑 代码跳转: Ctrl + 左键 或者 Ctrl + B,可以跳转到函数或者变量的声明位置 调用位置: Alt + F7,查找调用者 自动补全: 最好是修改一下响应时间,Settings->Editors->General->Code Compl

项目中常用功能,如:流媒体、健康数据(步数等)等-b

整理iOS开发中使用的各种流媒体和常用的高级功能.由于时间关系,目前只写了一部分功能,全部都采用的是系统方法,没用第三方,截图如下: screen1.png screen2.png 个人比较懒,不爱多写文字,直接上代码,哈哈. 视频 系统用AVFoundation与MediaPlayer框架实现播放视频的方案.其中AVFoundation扩展性好,都需自定义功能,而MediaPlayer集成简单,但是样式不可扩展. 1.AVFoundation使用AVPlayer播放视频,它属于view的lay

html(三) -- 常用功能标签

媒体标签 <embed></embed> 属性:        hidden : 设置隐藏插件是否隐藏.        src :用于指定音乐的路径 超链接标签 <a></a> 属性: href  : 用于指定链接的资源.常用协议:file:. mailTo:. http:      target: 设置打开新资源的目标.属性对应的值:_Blank 在独立的窗口上打开新资源   _self 在当前窗口打开新资源. a标签的原理:    1. a标签的href

IOS开发-OC学习-常用功能代码片段整理

IOS开发-OC学习-常用功能代码片段整理 IOS开发中会频繁用到一些代码段,用来实现一些固定的功能.比如在文本框中输入完后要让键盘收回,这个需要用一个简单的让文本框失去第一响应者的身份来完成.或者是在做与URL有关的功能时,需要在Info.plist中添加一段代码进而实现让网址完成从Http到Https的转换,以及其他的一些功能. 在从一个新手到逐渐学会各种功能.代码.控件.方法如何使用的过程中,也在逐渐积累一些知识,但是一次总不会把这些东西都深刻记住并完全理解.所以在这儿记录下这些东西,用来