zoukankan      html  css  js  c++  java
  • GDB高级技巧

    GDB高级技巧
     
    yijian 2009-2-22
     
    难得有雅兴,边动手边记录操作步骤,本文主要示例一些平常较少使用到的GDB功能,掌握这些用法有助于提高GDB调试和解决问题的能力。
     
    1) 查看宏
    默认情况下,在GDB中是不能查看宏的值及定义的,但通过如下方法,则可以达到目的:
    编译源代码时,加上“-g3 -gdwarf-2”选项,请注意不是“-g”,必须为“-g3”,查看宏的值使用命令p,这和查看变量的值的方法相同,如果想查看宏的定义,使用“-macro expand”命令即可
     
    2) 如果执行一连串命令?
    这个借助命令“source”即可,“source”的参数为一个存有一串命令的文件名
     
    3) 如何同时给多个函数打断点?
    使用“rb”命令,如果执行“rb”时不带参数,则表示在所有函数处打一个断点,“rb”后面可以接一个符合正则表达式的参数,用来对符合正则表达式的所有函数打断点
     
    4) .gdbinit文件
    GDB在启动时,会在用户主目录中寻找这个文件,并执行该文件中所有命令,文件格式为:
    define command-alias
    command
    end
    如要给“b main”取一个别名“bm”:
    define bm
    b main
    end
    此外,还可以给这个别名加上帮助说明性文字,格式为:
    document bm
    帮助说明性文字
    end
    如,给“bm”别名添加帮助说明性文字:
    document bm
    break at main() function
    end
    这样,在使用“help bm”时,GDB就会打印出“break at main() function”
     
    5) 自定义命令
    除了在.gdbinit文件自定义命令外,还可以直接在GDB运行环境定义命令,语法相同
     
    6) 定义命令钩子
    钩子用来在执行某个命令前或命令后,先执行某个或某些命令。假如想在print命令前显示一段“----------”,则:
    define hook-print
    echo ----------\n
    end
    注意“hook-”后接的必须是命令全称,不能是缩写。
    如果想在命令执行完,再执行某个或某些命令,则:
    #define hookpost-print
    echo ----------\n
    end
     
    7) GDB中循环
    GDB支持if/else/while/loop_break/loop_continue,如:
    (gdb) set $x=1
    (gdb) while $x==1
     >p $x
     >set $x=0
     >p $x
     >end
    -----------------
    b$8 = 1
    -----------------
    b$9 = 0
  • 相关阅读:
    java实现二叉树的构建以及三种遍历
    binary-tree-preorder-traversal二叉树的前序遍历
    insertion-sort-list使用插入排序对链表进行排序
    binary-tree-postorder-traversa二叉树的后序遍历
    sort-list
    Redis的数据类型
    在Windows上搭建Redis服务器
    Eureka源码分析
    Eureka概念理解
    Spring Cloud Eureka
  • 原文地址:https://www.cnblogs.com/aquester/p/9891926.html
Copyright © 2011-2022 走看看