linux学习笔记(二)——gdb

本文介绍使用GDB进行程序调试的基本命令及多进程、多线程调试的方法。包括载入程序、设置断点、单步执行、查看变量值等功能,并提供多进程及多线程调试的具体步骤。

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

从小对着vs点着stepin,stepover的,乍一没有图形界面的编译调试一体化工具,还真的是抓狂。

没办法,人都是逼出来的。在windows下鼓捣了一天eclipse+cygwin无果后,晚上只好看了下gdb。

成果记录下:

0、gdb有补齐;欲调试程序用g++编译带-g

1、常用命令:

file <可执行二进制文件名> —— 载入欲调试程序

list(l) —— 查看源码

run(可给参数,可重定向,可支持通配符) —— 运行程序

break <源文件行号><函数名> —— 设置断点

condition <断点编号> —— 在断点设置条件(即条件满足时才中断)

info break —— 查看断点信息

next (n)|step—— 单步执行

watch <变量名><表达式> —— 设置观察点

continue (c)—— 继续运行

print <变量名> (p)—— 观察变量值

bt —— 查看调用堆栈

frame <fid>—— 打印指定帧

info locals —— 打印当前帧的局部变量

info还有很多,frame,args,variables等...

set 变量=值 —— 在程序运行时改变变量取值

启动gdb时,可gdb <programname> core,将core文件加载

可 gdb <programname> <pid> attach一个正在运行的程序进行调试

call <funcname> —— 调用一函数执行

whatis 变量名 —— 查看变量类型

参考文章:http://kb.cnblogs.com/a/1532117/

2、多进程调试方法:

follow-fork-mode [parent|child] :parent: fork之后继续调试父进程,子进程不受影响。child: fork之后调试子进程,父进程不受影响。

attach <pid>:通过ps和pstree可以查看到所要调试的子进程pid。在子进程前加入一段调试代码,在调试代码中加断点,构造条件从断点处继续执行。

3、多线程调试方法:

info threads —— 查看当前被调试进程的线程

thread <ID> —— 切换调试线程为指定线程

set scheduler-locking off|on|step—— 针对当前调试线程和其他线程执行的控制

  • off 不锁定任何线程,也就是所有线程都执行,这是默认值。
  • on 只有当前被调试程序会执行。
  • step 在单步的时候,除了next过一个函数的情况(熟悉情况的人可能知道,这其实是一个设置断点然后continue的行为)以外,只有当前线程会执行。
<!-- -->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值