GDB调试场景

GDB调试场景

gdb的调试对象,在编译的时候需要加“-g”参数。

 gcc -g 源文件.c  -o 可执行文件

1.调试普通执行文件

    gdb  可执行文件名

例:

	gdb a.out

2.调试core文件

1.什么是core文件?

有问题的程序运行后,产生“段错误 (核心已转储)”时生成的具有堆栈信息和调试信息的文件。

2.怎样配置生成 core 文件

(1) core文件开关
①使用 ulimit -c 查看core开关,如果为0表示关闭,不会生成core文件;
②使用 ulimit -c [filesize] 设置core文件大小,当最小设置为4之后才会生成core文件;
③使用 ulimit -c unlimited 设置core文件大小为不限制,这是常用的做法;
④如果需要开机就执行,则需要将这句命令写到 /etc/profile 等文件。

(2) core文件命名。格式不一定,有的机器直接命名core,有的命名core+进程号

3.启动gdb调试core文件命令

	gdb  原来可执行文件名字   core文件名字

例:

	gdb a.out core

3.调试正常运行的程序

	gdb -p 进程号

例:

	gdb -p  1234

补充:查看进程号的命令 ps -aux | grep 进程名

4.调试多进程程序

方法一: follow-fork-mode方法

启动gdb后,通过命令指定要去调试的进程。常用命令有:

set follow-fork-mode [parent|child]  设置调试进程,默认是父进程(父进程或者子进程)
show follow-fork-mode    查看当前调试模式

set detch-on-fork [on|off]   调试此进程时,其他进程是否运行,默认时on

inferior < infer number>  切换调试的进程。***表示正在调试的进程)**

例:
在这里插入图片描述在这里插入图片描述

方法二:attach的方式

运行gdb:  gdb
(gdb) attach xxxxx --- xxxxx为子进程process id
(gdb) stop --- 需要先暂停此子进程,然后设置一些断点和一些Watch
(gdb) break 37 ---- 设置一个断点
Breakpoint 1 at 0x10808: file eg1.c, line 37.
(gdb)  continue   ----继续调试

5.调试多线程程序

启动gdb,指定调试的可执行程序。常用命令:

info threads   // 显示可以调试的所有线程,gdb会为每个线程分配一个ID(和tid不同),编号一般从1开始。后面的ID是指这个ID。

thread ID  //切换线程到第ID个线程
set scheduler-locking off|on|step: 

off:不锁定任何线程,当前调试线程外的其他线程一直在正常运行,默认情况。 
on:只有当前调试线程运行,其他线程处于暂停状态。 
step:其他线程跟随当前调试线程运行,在step(单步)时,只有被调试线程运行。

例:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值