gdb 调试解决-带参数程序-条件断点-core文件开启调试-watch监视内存-gdb多线程调试

2 篇文章 0 订阅

gdb set args 和 show args命令 调试带参数程序
gdb如何调试core文件?core 文件是什么?
getopt 函数介绍

让被GDB调试的程序接收信号
gdb 条件断点
gdb 多线程下禁止切换
gdb 调试多进程
gdb 查找某一个文件指定行/或断某行/函数

gdb set args 和 show args命令 调试带参数程序

[root@(none) ~]# gdb main
GNU gdb Red Hat Linux (6.6-8.fc7rh)
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License,and you are
welcome to change it and/or distribute copies of it under certainconditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type"show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu"...
Using host libthread_db library "/lib/libthread_db.so.1".
(gdb) set args a b c
(gdb) r

int getopt(int argc,char * const argv[ ],const char * optstring);

前两个参数大家不会陌生,没错,就是老大main函数的两个参数!老大传进来的参数自然要有人接着!

第三个参数是个字符串,看名字,我们可以叫他选项字符串(后面会说明)

返回值为int类型,我们都知道char类型是可以转换成int类型的,每个字符都有他所对应的整型值,其实这个返回值返回的就是一个字符,什么字符呢,叫选项字符(姑且这么叫吧,后面会进一步说明)
链接:https://www.cnblogs.com/qingergege/p/5914218.html

gdb如何调试core文件?core 文件是什么?
core文件是在程序奔溃的时候来定位原因的。

ulimit -a 查看是否开启,默认是没有开启core文件产生。
0 表示未开启
在这里插入图片描述unlimited 表示不限制
ulimut -c unlimited 命令设置

core.PID 表示进程id 某一个server 崩溃后就会产生一个这样的文件。
在这里插入图片描述
gdb chatserver core.28252
在这里插入图片描述在这里插入图片描述就这样成功定位到原因,“配置文件中没有设置logdir”

gdb 条件断点
分为:普通断点,条件断点,硬件断点
普通断点

	break  10 if i == 50

硬件断点
watch 命令 监视一个变量或者一段内存

int i;
int buf[111];
watch i; watch buf;

display 命令
监视变量或内存地址

让被GDB调试的程序接收信号

gdb 多线程下禁止切换

void run()
{
	代码1
	代码2
	。。。
}  

假设现在4个线程 A B C D 执行run每次都根据cpu时间片进行切换,而且还是随机的我们在调试过程中非常的麻烦,但是也并不是没有办法

	set scheduler-locking on
	set scheduler-locking off	

gdb 调试多进程

当fork后使用 gdb attach到子进程上去;

show follow-fork mode  
set follow-fork child  继续调试子进程 , 默认情况下不写child 调试parent父进程;
show follow-fork mode 
follow-fork 查看当前值

gdb 查找某一个文件指定行/或断某行/函数

(gdb) break [< file-name>:]< func-name>
(gdb) break [< file-name>:]< line-num>

(gdb) list xxfile:100
(gdb) b xxfile:100

(gdb) break [< file-name>:]< func-name>
(gdb) break [< file-name>:]< line-num>




上面讲了gdb 的使用,用的比较多的是一些常用命令
next ,run ,stop , info , bt(查看堆栈),breakpoint
用的比较多的操作是查看堆栈,和断点,条件断点
这core也是最新发现的,但是非常有用当程序奔溃了可以通过core 文件进行分析,好气现在才知道;
再是非常重要的多线程调试技巧,特别是遇到多线程的时候很多同学是没有办法下手的,多线程调试结合条件断点使用,简直就是仗剑走天涯。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值