• GDB调试总结__1


    该博客旨在分享IT技术心得和实际工作中遇到问题的解决方法,下面是新浪博客地址http://blog.sina.com.cn/qianyumolu,则为分享经济、行业趋势、心灵文章等,有兴趣的朋友能够踩踩,讨论分享    也欢迎来群里一起学习交流http://url.cn/LJhxoQ                                                 

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    也欢迎来群里一起学习交流http://url.cn/LJhxoQ

    我的GDB调试学习思路:

    A、怎样启动调试

    1、源代码级启动

    2、已执行程序启动

    B、怎样设置断点、观察点

    C、怎样打印相关变量

    D、切换线程

    E、动态的修改你程式的运行环境

    正文

    GDB概述 


    GDB是GNU开源组织公布的一个强大的UNIX下的程序调试工具。也许,各位比較喜欢那
    种图形界面方式的,像VC、BCB等IDE的调试,但假设你是在UNIX平台下做软件,你
    会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,
    尺有所短”就是这个道理。 


    一般来说,GDB主要帮忙你完毕以下四个方面的功能: 
    1、启动你的程序,能够依照你的自己定义的要求随心所欲的执行程序。 
    2、可让被调试的程序在你所指定的调置的断点处停住。(断点能够是条件表达式) 
    3、当程序被停住时,能够检查此时你的程序中所发生的事。 
    4、动态的改变你程序的运行环境。 

    A、怎样启动调试

    启动GDB的方法有下面几种:

    1、gdb program  

    program 也就是你的运行文件,一般在当前文件夹下。 

    2、gdb program core  

    用gdb同一时候调试一个执行程式和core文件,core是程式非法执行后core dump后产生的文件。 

    3、gdb   program ID  

    假设你的程式是个服务程式,那么你能指定这个服务程式执行时的进程ID。gdb会自己主动attach上去,并调试他。program应该在PATH环境变量中搜索得到。

     
    GDB启动时,能够加上一些GDB的启动开关,具体的开关能够用gdb -help查看。我在下
    面仅仅例举一些比較经常使用的參数: 
    -symbols 
    -s 
    从指定文件里读取符号表。 
    -se file 
    从指定文件里读取符号表信息,并把他用在可运行文件里。 
    -core 
    -c 
    调试时core dump的core文件。 
    -directory 
    -d 
    增加一个源文件的搜索路径。默认搜索路径是环境变量中PATH所定义的路径。 

    在GDB中执行程序 
    ———————— 
    当以gdb 方式启动gdb后,gdb会在PATH路径和当前文件夹中搜索的源文件。如要确认gdb
    是否读到源文件,可使用l或list命令,看看gdb能否列出源码。 
    在gdb中,执行程序使用r或是run命令。程序的执行,你有可能须要设置以下四方面的事。 
    1、程序执行參数。 
    set args 可指定执行时參数。(如:set args 10 20 30 40 50) 
    show args 命令能够查看设置好的执行參数。 
    2、执行环境。 
    path 
    可设定程序的执行路径。 
    show paths 查看程序的执行路径。

    setenvironment varname [=value] 环境变量设置。如:set envUSER=hchen 
    show environment [varname] 查看环境变量。 
    3、工作文件夹。 
    cd 
    相当于shell的cd命令。 
    pwd 显示当前的所在文件夹。 
    4、程序的输入输出。 
    info terminal 显示你程序用到的终端的模式。 
    使用重定向控制程序输出。如:run > outfile 
    tty命令能够指写输入输出的终端设备。如:tty /dev/ttyb 
    调试已执行的程序 
    ————————  

    B、设置断点、观察点

    1、设置断点

    b + 断点 -》设置调试的断点。

    两种:

    一种是:b CMSTask.cpp:200 

    表示在CMSTask.cpp文件的第200行设置断点 。 

               
    还有一种:b TaskManager::buildPubWinTask 

    表示在运行buildPubWinTask这个函数的时候停止。 

    取消断点: 

      dis 1 表示取消第一个断点  

      dis 2 表示取消第二个断点  

    查看设置断点信息: info b 

    2、设置观察点(WatchPoint) 
    观察点一般来观察某个表达式(变量也是一种表达式)的值是否有变化了,假设有变化,马
    上停住程序。我们有以下的几种方法来设置观察点: 
    watch 
    为表达式(变量)expr设置一个观察点。一量表达式值有变化时,立即停住程序。 
    rwatch 
    当表达式(变量)expr被读时,停住程序。 
    awatch 
    当表达式(变量)的值被读或被写时,停住程序。

    infowatchpoints 
    列出当前所设置了的全部观察点。 

    设置捕捉点(CatchPoint) 
    你可设置捕捉点来补捉程序执行时的一些事件。如:加载共享库(动态链接库)或是C++
    的异常。设置捕捉点的格式为: 
    catch 
    当event发生时,停住程序。event能够是以下的内容: 
    1、throw 一个C++抛出的异常。(throw为keyword) 
    2、catch 一个C++捕捉到的异常。(catch为keyword) 
    3、exec 调用系统调用exec时。(exec为keyword,眼下此功能仅仅在HP-UX下实用) 
    4、fork 调用系统调用fork时。(fork为keyword,眼下此功能仅仅在HP-UX下实用) 
    5、vfork 调用系统调用vfork时。(vfork为keyword,眼下此功能仅仅在HP-UX下实用) 
    6、load 或 load 加载共享库(动态链接库)时。(load为keyword,眼下此功能仅仅在HP-UX
    下实用) 
    7、unload 或 unload 卸载共享库(动态链接库)时。(unload为keyword,眼下此功能仅仅在
    HP-UX下实用) 
    tcatch 
    仅仅设置一次捕捉点,当程序停住以后,应点被自己主动删除。 

  • 相关阅读:
    coursera 《现代操作系统》 -- 第五周 同步机制(2)
    coursera 《现代操作系统》 -- 第五周 同步机制(1)
    coursera 《现代操作系统》 -- 第四周 处理器调度
    coursera 《现代操作系统》
    路由器WAN端与LAN端的区别
    如何查看与刷新DNS本地缓存
    国内外常用的DNS服务器
    PPPOE协议
    WDS 的两种实现方式
    wifi基础知识整理
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/3895589.html
Copyright © 2020-2023  润新知