Linux下gdb调试程序

来源 :本文是针对《 GDB 完全手册》的学习笔记

说明 1. 在使用 gdb 时,需要对要编译调试的源文件加 –g 参数进行编译。也可以在 makefile 中定义 CFLAGS 变量: CFLAGS -g

              2. 命令后,括号里的内容表示对这个命令的缩写。

              3. 调试程序中直接回车表示重复执行上一条命令。

              4. gdb 的功能很强大,这里只是列举出使用频率较高的一些命令。

              5. 学习笔记定位于完全不懂 gdb 的人,如果想知道 gdb 更多的用法,参考《 GDB 完全手册》或者 Linux 中自带的 gdb 帮助文档。

gdb 可以完成如下的任务:

1. 设置断点; 2. 监视程序变量的值; 3. 程序的单步执行; 4 修改变量的值。

使用总结

1.          启动 gdb 调试生成的可执行文件: gdb ./ 可执行文件名。

2.          指定运行程序的参数: set args 运行时的参数。

显示运行程序的参数: show args

3.          列出源代码命令: list l

list                                        显示当前行后的源代码。

list-                                        显示当前行前的源代码。

list   行号:                                 显示行号附近的源代码。

list   函数名字:                          显示函数附近的源代码。

list   起始行号,终止行号:        显示这个范围内源代码。

       list +offset                             显示当前行号正偏移量的源代码。

       list -offset                              显示当前行号负偏移量的源代码。

4.          运行程序: run r

5.          暂停程序的运行(主要分为三个部分):

info 被调试程序    :产看程序是否在运行,进程号,被暂停原因。

5.1      设置断点:     程序停下时并未执行当前语句。

break b    行号;

                            break b    函数名;

                            break b    +offset    :在当前行号正偏移量设置断点。

                            break b    -offset     :在当前行号负偏移量设置断点。

                            break b    if 条件语句:当满足条件语句的时候程序停。

       查看断点信息: info break

       删除断点:     delete d     断点号。

       使断点有效或者无效: disable /enable 断点号。

5.2      设置观察点:观察某个表达式的值是否有变化,如果有程序暂停执行。

watch     表达式:当表达式程序有变化时,程序暂停执行。

              rwatch    表达式:当表达式被读时,程序暂停执行。

              awatch    表达式:当表达式被写时,程序暂停执行。

              察看观察点信息: info watch

5.3   设置捕捉点:捕捉程序运行时的一些事件,例如 载入共享库(动态链接库), C++ 异常等

              catch      表达式                     tcatch 表达式

5.4   维护停止点:

              clear                                清除所有已设置的停止点。

              clear 函数名              清除设置在该函数上的停止点。

              clear 行号                  清除该行号上的停止点。

6.          恢复程序的运行:

continue c fg )忽略断点的次数      

7.          单步调试:

step < 执行的行数 >              :如果有函数调用,则会进入该函数。

       stepi si                  :单步跟踪一条机器指令。

       next n                     :如果有函数调用,不会进入该函数。

       nexti ni                    :单步跟踪一条机器指令。

8.          自动显示变量:

display

9.          察看寄存器:

info registers

10.      打印变量的值(这个命令也可以设置一个变量的值)

print p )变量名

11.   显示变量对应的类型:

whatis var                    :var 代表变量名字,可以显示变量对应的类型。

12.    察看函数堆栈:

backtrace bt +offset :栈顶 offset 层的信息。

backtrace bt -offset  :栈底 offset 层的信息。

13.    察看函数执行到哪里:

where      :显示目前执行的代码,会给出内存地址。

14.    退出函数:

finish          返回当前函数返回时堆栈地址,返回值,参数值等信息。

15.    动态改变程序的执行顺序:

jump 或者 call 命令。

16.    退出 gdb

quit q

 

 

总结:

写程序时一门艺术,调试程序更是一门艺术。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值