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  *array@len    @左边是数组地址,右边是数组长度

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”选项来解决这个问题。

gdb常用功能的更多相关文章

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

    本文由霸气的菠萝原创,转载请注明出处:http://www.cnblogs.com/xsln/p/gdb_instructions1.html 全部关于gdb的文章索引请点这里 GDB(GNU Deb ...

  2. C 调试 gdb常用命令

    gdb常用命令: [root@redhat home]#gdb 调试文件:启动gdb (gdb) l :(字母l)从第一行开始列出源码 (gdb) break n :在第n行处设置断点 (gdb) b ...

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

    WebStorm 是 JetBrain 公司开发的一款 JavaScript IDE,使用非常方便,可以使编写代码过程更加流畅. 本文在这里分享一些常用功能的使用技巧,希望能帮助大家更好的使用这款强大 ...

  4. AVA正则表达式4种常用功能

    正则表达式在字符串处理上有着强大的功能,sun在jdk1.4加入了对它的支持 下面简单的说下它的4种常用功能: 查询: String str="abc efg ABC";  Str ...

  5. [转]WebPack 常用功能介绍

    概述 Webpack是一款用户打包前端模块的工具.主要是用来打包在浏览器端使用的javascript的.同时也能转换.捆绑.打包其他的静态资源,包括css.image.font file.templa ...

  6. FastReport.Net 常用功能总汇

    一.常用控件 文本框:输入文字或表达式 表格:设置表格的行列数,输入数字或表达式 子报表:放置子报表后,系统会自动增加一个页面,你可以在此页面上设计需要的报表.系统在打印处理时,先按主报表打印,当碰到 ...

  7. python3 字符串与列表常用功能

    一.字符串常用功能 1. capitalize(),将字符串的首字母变成大写,其余全部置为小写:如果字符串中有多个单词,也只是将第一个单词的首字母置为大写:例: >>> name = ...

  8. matlab进阶:常用功能的实现,常用函数的说明

    常用功能的实现 获取当前脚本所在目录 current_script_dir = fileparts(mfilename('fullpath')); % 结尾不带'/' 常用函数的说明 bsxfun m ...

  9. WebPack常用功能介绍

    概述 Webpack是一款用户打包前端模块的工具.主要是用来打包在浏览器端使用的javascript的.同时也能转换.捆绑.打包其他的静态资源,包括css.image.font file.templa ...

随机推荐

  1. c#网络通信框架networkcomms内核解析之三 消息同步调用

    networkcomms.net 来自英国的网络通信框架 官方网址 www.networkcomms.net 中文网址www.networkcomms.cn 客户端发送消息给服务器,服务器计算结果返回 ...

  2. 8、如何实现可迭代对象和迭代器对象 9、如何使用生成器函数实现可迭代对象 10、如何进行反向迭代以及如何实现反向迭代 11、如何对迭代器做切片操作 12、如何在一个for语句中迭代多个可迭代对象

    8.如何实现可迭代对象和迭代器对象 PS:注意重载Iterator方法的时候,需要和原来的方法名一样,否则创建实例时会报错 from collections import Iterator,Itera ...

  3. VMware中 CentOS7挂载windows共享文件夹

    在编译自己的hadoop时,不想再次在虚拟机中下载jar包,就想到了挂载自己本地的maven仓库,使用本地仓库来进行编译,这里就需要使用VMware的VMware Tools了,直接复制官方文档如下 ...

  4. dubbo源码学习(二) : spring 自定义标签

    做dubbo的配置时很容易发现,dubbo有一套自己的标签,提供给开发者配置,其实每一个标签对应着一个 实体,在容器启动的时候,dubbo会对所有的配置进行解析然后将解析后的内容设置到实体里,最终du ...

  5. linux 磁盘与文件系统管理 (鸟哥私房菜)

    各种接口磁盘在Linux中的文件名分别为 /dev/sd[a-p][1-15]:为SCSI,SATA,USB,Flash随身碟等接口的磁盘文件名 /dev/hd[a-d][1-63]:为IDE接口的磁 ...

  6. linux 7下已有mysql之后,如何使用

    今天在使用阿里云平台的esc时,选择的centos7系统,在安装mariadb的时候,发现系统已经自带了,然后却无法使用,在调查了之后,发现启动service的依赖件没有安装,所以安装以下依赖件. m ...

  7. asp.net MVC项目,localhost响应时间过长

    1.早上高高兴兴的吃完早餐,敲了几句代码,准备调试,竟然发现VS调试项目打开的很慢,最后报错如下图 2.那就很可能是IIS问题嘛,IIS重启了一下,还是不行,在地址栏输入localhost,如下图(本 ...

  8. struts2注解方式的验证

    struts2的验证分为分编程式验证.声明式验证.注解式验证.因现在的人越来越懒,都追求零配置,所以本文介绍下注解式验证. 一.hello world 参考javaeye的这篇文章,按着做一次,起码有 ...

  9. top.location.href

    window.location.href.location.href是本页面跳转   parent.location.href是上一层页面跳转   top.location.href是最外层的页面跳转 ...

  10. Dubbox框架和Zookeeper 依赖的引入

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...