用GDB调试C程序命令集锦

本文介绍使用GDB调试C++程序的方法,包括设置断点、查看变量、跟踪函数等操作,并提供核心命令的缩写形式。此外,还介绍了如何通过core dump文件及进程ID进行调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

好久没用GDB调试过C++程序了,今天需要调试一下,所以记录一下。


首先在编译的时候一定要加上-g选项告诉编译器在编译的时候要包含debug信息。


然后用gdb运行你的可执行程序

gdb your_program

show args 列出命令行参数

list  列出源代码

回车 重复上一命令

break 22 在22行设置断点

info break 查看断点信息

break handle_login 在函数handle_login设置断点

clear handle_login 取消handle_login的断点

disable handle_login 暂时时断点失效 

enable handle_lgoin 恢复断点

b main.cpp:213 设置源文件行断点,若出现no source file named,你可以用directory告诉源文件所在目录

directory "/home/zhc/project/db_server/src"

watch login_name 当login_name发生变化时,会断住

run 运行程序,到断点处自动停住

next 执行下一行命令

step 进入一个指令内部, 相当于step in

step out 跳出

continue 到下一断点

print name 打印name变量

set name 123 动态的改变变量的内容

print *array@len 打印动态数组array指针指向的内容,长度是len

set print object on 开启派生类对象信息

set print pretty on 树形打印对象成员

display name 自动显示name的内容

undisplay name 取消自动显示name的内容

info local 显示局部变量

info display 查看所有display的信息

bt 查看函数堆栈

finish 退出函数

return 1 强制当前函数返回1,忽略还没有执行的语句。

info threads 查看线程信息

thread 3 切换到线程3,有时候因为有阻塞在,比如调用数据库,那么gdb会自动帮你切换到可以运行的线程,这样不利于调试,可以将自动切换线程关闭。

set scheduler-locking on 只调试当前线程。

set scheduler-locking off 调试所有线程,gdb的默认值是这个。

break handle_login thread 1 只在线程1里对handle_login进行断点

help 如果你忘了命令,可以用这个命令查看

quit 退出gdb


以上所有的命令都可以简写,只要gdb能认出即可,比如break可以只写一个b

刚才我们用gdb直接去调试可执行文件,还有其它几种类型的调试方法,比如你有一个core dump文件,你的程序不知道什么原因崩溃了,你可以这样进行调试,详细内容可参考GDB调试core文件

gdb your_program -c core_file

再比如说你想调试一个正在运行的程序,比如一个service,你可以用进程ID来调试:

gdb your_program PID

gdb会自动attach上去,your_program应该在PATH环境变量中搜索的到才行。

原文:http://blog.youkuaiyun.com/hongchangfirst/article/details/51336461

作者:hongchangfirst

hongchangfirst的主页:http://blog.youkuaiyun.com/hongchangfirst



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值