如何使用GDB工具来调试程序

官方参考文档:http://www.gnu.org/software/gdb/documentation/ 

GDB(GNU 项目调试器)可以让您了解程序在执行时“内部”  究竟在干些什么,以及在程序发生崩溃的瞬间正在做什么。 GDB 做以下  4 件主要的事情来帮助您捕获程序中的  bug:   
◼  在程序启动之前指定一些可以影响程序行为的变量或条件 
◼  在某个指定的地方或条件下暂停程序 
◼  在程序停止时检查已经发生了什么 
◼  在程序执行过程中修改程序中的变量或条件,这样就可以体验修复一个 bug 的成果,并继续了解其他  bug 

 

准备

1、编译软件的时候 使用 gcc -g  xxx.c -o xxx   使用-g参数, 表明需要生成有调试信息的可执行程序

gcc -g  xxx.c -o xxx 

2、在实际生成调试程序时,一般不仅要加上  -g 选项,也建议关闭编译器的程序优化选项。编译器的程序优化选项一般有五个级别,从  O0 ~ O4 (  注意第一个  O0 ,是字母  O 加上数字  0 ),  O0 表示不优化,从  O1 ~ O4 优化级别越来越高,O4 最高。这
样做的目的是为了调试的时候,符号文件显示的调试变量等能与源代码完全对应起来 , 默认是-O0  不优化

3、第1步骤生成的课执行程序是有调试信息的, 如果不需要调试信息  可以使用 strip + 可执行程序,去掉打印信息

strip xxx

 

启动gdb调试 三种方式

1、直接调试可执行文件,

 gdb  xxx

2、调试正在运行的进程,而又不想终止程序, gdb attch 进程id

查看进程的方式  ps  -aux

gdb attch 2367   //例如进程id 为 2367

当调试完程序想结束此次调试时,而且不对当前进程有任何影响,也就是说想让这个程序继续运行,可以在  GDB 的命令行界面输入  detach 命令让程序与  GDB 调试器分离,这样  redis就可以继续运行了

(gdb) detach  

 

3、调试core_dump 文件,gdb filename coredumpname

gdb filename core_dump123141231

调试core_dump文件主要是用在:有时候,服务器程序运行一段时间后会突然崩溃,这并不是我们希望看到的,需要解决这个问题。只要程序在崩溃的时候有  core 文件产生,就可以使用这个  core 文件来定位崩溃的原因

第1步: 查看linux是否打开了core的机制,默认linux是不打开的

ulimit -a

如果core file size    是      (blocks, -c) 0 ,则需要自己 重新设置一下 ulimite -c 的值,可以直接设置成 不做限制 ulimit -c unlimited

ulimit -c unlimited

上述操作是临时的,可以将上述命令写入到/etc/profile  中

(1)将ulimit -c unlimited 放入/etc/profile 
(2)source /etc/profile 
(3)再次查看  ulimit -a 

 

第2步:设置生成core_dump文件的位置

(1)在/etc/sysctl.conf写入corefile文件生成的目录,例如 

kernel.core_pattern=/home/qb/samba_myshare/seemyself/core_dump/core-%e-%p-%t

(2)创建应对的生成目录 

cd  /home/qb/samba_myshare/seemyself/     -- 自己设置的路径

mkdir core_dump

(3)然后执行生效   sudo sysctl -p /etc/sysctl.conf 

 sudo sysctl -p /etc/sysctl.conf 

可以查看自己是否设置成功

第3步: 写一个会core_dump的程序

#include <stdio.h>

int main(void)
{
    printf("hello world! dump core for set value to NULL pointer\n");

    *(char *)0 = 0;

    return 0;
}

编译

gcc -g -o test_core_dump test_core_dump.c

运行

./test_core_dump 

在刚才我们设置生成core_dump的位置,会生成一个core_dump文件

运行gdb

 gdb test_core_dump ~/samba_myshare/seemyself/core_dump/core-test_core_dump-3583-1598603271

 

退出gdb

q 或者  ctrl +d

 

常用命令

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值