免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1116 | 回复: 0
打印 上一主题 下一主题

GDB使用详解 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-26 19:50 |只看该作者 |倒序浏览

               
1、gdb的主要功能
    1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
        2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
        3、当程序被停住时,可以检查此时你的程序中所发生的事。
        4、动态的改变你程序的执行环境。
2、使用简介
           A、gdb是一个符号式命令行调试器,所谓“符号式”(symbolic),意思是在执行程序的时候可以使用变量名和函数名,就好像它是源代码中的名称一样,为了显示和翻译这些名称,调试器需要变量类型和函数类型的相关的信息,以及那几条机器指令对应到那几条源代码的信息,这类信息会以符号表的形式出现,当使用-g选项进行编译和链接是就会产生符号表,符号表被包含在可执行文件中。如 gcc -g filename;在包含多个源代码文件的大型程序中,必须在编译每个模块时都使用-g选项。
    B、启动gdb : gdb ./(可执行文件)
    C、实用参数解释
        l : 显示源代码,一般默认是10行。如果继续使用该命令就会输出接下来的几行源代码。
        b(break):设置断点
            断点设置是随意的即可以是函数,也可以是某一行代码
            (gdb) b func
                                       Breakpoint 1 at 0x8048458: file hello.c, line 10.
            (gdb) b 10
            Breakpoint 1 at 0x80484ec: file shu.c, line 10.
        r(run): 执行程序,一旦遇到断点就会中断程序的执行,并且显示接下来要执行的的语句。此时我们希望一步一步的执行此函数,通常可以用next(n)和step(s)命令来实现。
                这两个命令的区别在于当遇到函数调用时,都会执行一整行代码,包含整个函数的调用,然停留在下一行,而step命令不一样,如果此函数有符号表的话,就会  跳进函数内,在函数内的第一条语句处中断。
         p(print): 使用该命令显示某个表达式的值
        c(continue):让程序可以继续执行,直到遇到下一个断点或程序的尾端。
        q(quit): 停止执行调试器,即使被调试程序仍在执行中。   
         finish .一直运行到函数返回
        until、运行到某一行
    D、gdb命令的使用
        gdb的命令很多,gdb把之分成许多个种类。help命令只是例出gdb的命令种类,如果要看种类中的命令,可以使用help 命令,如:help breakpoints,查看设置断点的所有命令。也可以直接help 来查看命令的帮助。
        gdb中,输入命令时,可以不用打全命令,只用打命令的前几个字符就可以了,当然,命令的前几个字符应该要标志着一个唯一的命令,在Linux下,你可以敲击两次TAB键来补齐命令的全称,如果有重复的,那么gdb会把其例出来。
        1、敲入b按两次TAB键,你会看到所有b打头的命令:(即可以通过命令的首字母来查找命令)
        (gdb) b
        backtrace break bt
        2、只记得函数的前缀,可以这样:
        (gdb) b make_
        (再按下一次TAB键,你会看到:)
        make_a_section_from_file make_environ
        make_abs_section make_function_type
        make_blockvector make_pointer_type
        make_cleanup make_reference_type
        make_command make_symbol_completion_list
        (gdb) b make_
        GDB把所有make开头的函数全部例出来给你查看。
        3、调试C++的程序时,有可以函数名一样。如:
        (gdb) b 'bubble( M-?
        bubble(double,double) bubble(int,int)
        (gdb) b 'bubble(
        你可以查看到C++中的所有的重载函数及参数。(注:M-?和“按两次TAB键”是一个意思)
    E、GDB中运行UNIX的shell程序(不懂)
    在gdb环境中,你可以执行UNIX的shell的命令,使用gdb的shell命令来完成:
    shell
    调用UNIX的shell来执行,环境变量SHELL中定义的UNIX的shell将会被用来执行,如果SHELL没有定义,那就使用UNIX的标准shell:/bin/sh。(在Windows中使用Command.com或cmd.exe)
    还有一个gdb命令是make:
    make
    可以在gdb中执行make命令来重新build自己的程序。这个命令等价于“shell make ”。
    F、GDB中运行程序
        当以gdb 方式启动gdb后,gdb会在PATH路径和当前目录中搜索的源文件。如要确认gdb是否读到源文件,可使用l或list命令,看看gdb是否能列出源代码。
        在gdb中,运行程序使用r或是run命令。程序的运行,你有可能需要设置下面四方面的事。
        1、程序运行参数。
&nb
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/104227/showart_2104884.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP