GDB调试(快速入门篇)

15 篇文章 0 订阅

前言:

在LINUX平台下使用Log+Gdb+Core,一般能应付绝大多数调试程序的场景;

GDB:

 用户文档查阅:https://sourceware.org/gdb/current/onlinedocs/gdb/

 编译程序时请加上-g选项,关闭优化机制和创建符号表以便调试器调试:gcc/g++ -g

你能用GDB对C/C++程序做什么?

(1)启动程序;

(2)使程序在指定条件下停止;

(3)当程序停止时,检查发生了什么;

(4)更改程序中的内容,以便可以纠正一个错误并继续了解了另一个错误

本文主要教会你使用以上四点!

GDB启动/退出程序

使用GDB启动程序的最简单方法是使用一个参数:

gdb 程序名

使用GDB调试core文件的方法是:

gdb 程序名 core

使用GDB调试正在运行的程序的方法是:

gdb 程序名 进程ID

退出GDB请输入:

quit或者q

使程序开始运行的命令是:

run或者r

使程序单步运行的命令是:

next或者n

使程序继续运行的命令是:

continue或者c

GDB使程序在指定条件下停止

使用gdb给你的程序打一个断点,使它到达某一点时停止。location可以是某一行、某个函数名、某个地址:

break locataion或者b locataion

在包含主函数源文件的38行打一个断点:

break 38

在进入test函数时打断点

break test

在table.cpp源文件的32行打一个断点

break table.cpp:32

假设我们知道函数指针的地址为0x5859c0,则可以在0x5859c0上打一个断点

break *0x5859c0

假设你需要在某个条件时启用断点,在table.cpp源文件的32行,当i=32时打一个断点

break table.cpp:32 if i == 32

假设你的程序是多线程运行,你可能会需要在指定线程打断点

首先查看当前程序的线程信息:

info threads

然后在断点命令后添加线程ID 

break locataion thread threadID

你可以通过命令查看当前gdb的断点号,断点的地址和在程序中的位置:

info breakpoints

你可以通过命令删除gdb的断点,breakpoints 是断点号

delete breakpoints 

GDB检查发生了什么

当程序停下时,你需要知道当前发生了什么,可以使用命令查看当前栈信息,了解程序运行到哪里;

breacktrace或者bt

也许你想看看当前这个位置之后源代码,则可以运行命令:

list

也许你想看看当前这个位置之前源代码,则可以运行命令:

list -

也许你想看当前变量的相关信息,则可以运行命令:

print variate 或者 p variate

GDB更改程序中的内容

在调试程序过程中,你可能需要修改某些变量的值,则可以运行命令,variate是变量名,value是修改后的值

print variate = value

在调试程序过程中,你可能需要发送信号给当前程序,则可以运行命令,signalvalue是信号量,一般为1~15

signal signalvalue

在调试程序过程中,你可能需要强制结束当前程序运行的函数,则可以运行命令,

return

在调试程序过程中,你可能需要强制调用函数,则可以运行命令,function是函数名

call function 或者 print function

好了!学会使用上面这些命令,基本GDB入门了,下面将拓展一些实用的知识。

GDB日志输出

您可能希望将GDB命令的输出保存到文件中。有几个命令可以控制GDB的日志记录。

启用日志记录:

set logging on

禁用日志记录:

set logging off

更改当前日志文件的名称。默认日志文件是gdb.txt。

set logging file file

 

 

 

 

 

 

GDB使用手册 GDB调试器使用手册(一) ................................................................................................. 1 使用GDB: ........................................................................................................................ 1 GDB简介 ......................................................................................................................... 3 GDB的作者 ..................................................................................................................... 3 GDB调试器使用手册(二) ................................................................................................. 4 GDB调试器使用手册(三) ................................................................................................. 9 运行GDB(一些详细的说明) ........................................................................................... 9 谈谈模式的设置............................................................................................................. 11 GDB调试器使用手册(四) ............................................................................................... 12 退出gdb ......................................................................................................................... 12 Shell 命令 ....................................................................................................................... 12 GDB 命令 ...................................................................................................................... 12 Command语法 ............................................................................................................... 13 GDB调试器使用手册(五) ............................................................................................... 13 输入命令的技巧............................................................................................................. 13 GDB调试器使用手册(六-1) ............................................................................................ 14 得到帮助 ........................................................................................................................ 14 在gdb下运行你的程序 ................................................................................................. 16 GDB调试器使用手册(六-2)程序环境 ............................................................................ 19 工作路径 ........................................................................................................................ 19 你程序的输入/输出 ....................................................................................................... 20 调试一个已经运行的程序: ......................................................................................... 20 GDB调试器使用手册(七) ............................................................................................... 21 结束子进程 .................................................................................................................... 21 附加的进程信息............................................................................................................. 21 对多线程程序的调试 ..................................................................................................... 22 调试多进程的程序 ......................................................................................................... 23 停止和继续 .................................................................................................................... 24 断点,观察点和异常 ..................................................................................................... 24 DB调试器使用手册(八) ............................................................................................... 25 设置断点 ........................................................................................................................ 25 设置观察点 .................................................................................................................... 27 断点和异常 .................................................................................................................... 28 DB调试器使用手册(九) ............................................................................................... 29 断点条件 ........................................................................................................................ 29 断点命令列表................................................................................................................. 31 断点菜单 ........................................................................................................................ 32
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值