c++调试之gdb

本文详细介绍了如何使用GDB调试C/C++程序,包括在编译时添加调试信息,启动GDB并进入程序,设置断点的多种方式,以及查看和操作断点。同时,还讲解了在调试过程中查看变量信息的命令和不同输出格式,为C/C++开发者提供了一份实用的调试指南。
摘要由CSDN通过智能技术生成

1、前提

一般来说GDB主要调试的是C/C++的程序。要调试C/C++的程序,首先在编译时,我们必须要把调试信息加到可执行文件中。使用编译器(cc/gcc/g++)的 -g 参数可以做到这一点。如:

    > cc -g hello.c -o hello
    > g++ -g hello.cpp -o hello

如果没有-g,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。当你用-g把调试信息加入之后,并成功编译目标代码以后,启动gdb调试。

2、启动gdb进入程序

2.1、以gdb启动程序

1、启动命令:gdb <program>

2、进入gdb后,输入命令:'r或run',执行程序

 

2.2、调试正在运行的程序

1、通过命令'ps -ef|grep <进程名>'获取正在运行的进程号pid

2、进入程序通过命令'gdb -p <pid>'

 

3、设置断点

3.1、常见设置断点的方式

 用break命令来设置断点。设置断点的方法:

  1、在进入指定函数时停住。C++中可以使用class::function或function(type,type)格式来指定函数     名:break <function>

   2、在指定行号停住:    break <linenum>

   3、在当前行号的前面或后面的offset行停住。offiset为自然数:

           break +offset       

           break -offset

  4、在源文件filename的linenum行处停住:    break filename:linenum

  5、 在源文件filename的function函数的入口处停住:    break filename:function

  6、在程序运行的内存地址处停住:    break *address

   7、break命令没有参数时,表示在下一条指令处停住:break

   8、 break ... if <condition>

        ...可以是上述的参数,condition表示条件,在条件成立时停住。比如在循环境体中,可以设置break if i=100,表示当i为100时停住程序。

 

3.2、查看设置的断点信息

    查看断点时,可使用info命令,如下所示:(注:n表示断点号)
    info breakpoints [n]
    info break [n] 

 

4、调试,查看信息

4.1、调试

当程序遇到断点,可以用continue 命令恢复程序的运行直到程序结束,或到下一个断点。

也可以使用step或next命令单步跟踪程序。

4.2、查看信息

4.2.1、查看信息表达式

在你调试程序时,当程序被停住时,你可以使用print命令(简写命令为p)。print命令的格式是:
   
    print <expr>
    print /<f> <expr>
        <expr>是表达式,是你所调试的程序的语言的表达式(GDB可以调试多种编程语言),<f>是输出的格式,比如,如果要把表达式按16进制的格式输出,那么就是/x。

4.2.2、gdb常见输出格式 

    x 按十六进制格式显示变量。
    d 按十进制格式显示变量。
    u 按十六进制格式显示无符号整型。
    o 按八进制格式显示变量。
    t 按二进制格式显示变量。
    a 按十六进制格式显示变量。
    c 按字符格式显示变量。
    f 按浮点数格式显示变量。

4.2.2、实例

1、直接查看变量:p x

2、以某浮点数查看变量: p/f x

3、查看数组:  p *array@len

@的左边是数组的首地址的值,也就是变量array所指向的内容,右边则是数据的长度,其保存在变量len中

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值