gdb调试详解与darknet框架gdb调试过程

准备工作

开启core, 采集程序崩溃的状态

首先你跟着我做开启core崩溃状态采集. 可以通过ulimit -c查看,如果是0表示没有开启. 开启按照下面操作:

sudo gedit /etc/profile

/etc/profile最后一行添加下面几句话设置全局开启 core文件调试,大小不限.

# No core files by default 0, unlimited is oo
ulimit -S -c unlimited > /dev/null 2>&1

最后立即生效.

source /etc/profile

再跟着我做, 因为生成的core文件同名会覆盖. 这里为其加上一个core命名规则, 让其变成[core.pid]格式.

sudo gedit /etc/sysctl.conf

在该文件的最后的加上如下几句话,并保存

# open, add core.pid
kernel.core_pattern = ./core_%t_%p_%e
kernel.core_uses_pid = 1

立即启用

sudo sysctl -p /etc/sysctl.conf

最后是ulimit -ccat /proc/sys/kernel/core_uses_pid查看,下面状态表示core启用都搞好了.

如果显示没有开启成功,可以试试注销系统或者重启

简单接触 GDB , 开始调试 r n p

第一个演示代码heoo.c

#include <stdio.h>

int g_var = 0;

static int _add(int a, int b) {
    printf("_add callad, a:%d, b:%d\n", a, b);
    return a+b;
}

int main(void) {
    int n = 1;
   
    printf("one n=%d, g_var=%d\n", n, g_var);
    ++n;
    --n;
   
    g_var += 20;
    g_var -= 10;
    n = _add(1, g_var);
    printf("two n=%d, g_var=%d\n", n, g_var);
   
    return 0;
}

我们从下图说起,
使用命令

gcc -g -Wall -o heoo.out heoo.c
gdb heoo.out

gdb heoo.out表示gdb加载heoo.out开始调试. 如果需要使用gdb调试的话编译的时候gcc需要加上-g命令.

其中l命令表示 查看加载源码内容. .

下面将演示如何加断点,使用命令b 函数名或者b 行数r表示调试的程序开始运行.

p命令表示 打印值. n表示过程调试, 到下一步. 不管子过程如何都不进入. 直接一次跳过.

下面的s 表示单步调试, 遇到子函数,会进入函数内部调试.

总结一下 . l查看源码 ,b加断点, r 开始运行调试, n下一步, s下一步但是会进入子函数. p输出数据. c跳过直到下一个断点处,watch 变量名给变量添加监视点,whatis 变量名打印变量名的类型, finish跳出当前代码(之前跳入调试),q表示程序退出.

到这里gdb 基本会用了. 是不是也很容易. 直白. 小代码可以随便调试了.

看到这里基础知识普及完毕了. 后面可以不看了. 有机会再看. 好那我们接着扯.

gdb其它开发中用的命令

开始扯一点, linux总是敲命令操作, 也很不安全. 有时候晕了. 写这样编译命令.

gcc -g -Wall -o heoo.c heoo.out

非常恐怖, heoo.c代码删除了. heoo.out => heoo.c 先创建后生成失败退出. 原先的内容被抹掉了. 哈哈. 服务器开发, 经验不足, 熟练度不够.自己都怕自己.

gdb 其它常用命令用法 c q b info

首先看 用到的调试文件houge.c

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

/*
 * arr 只能是数组
 * 返回当前数组长度
 *
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值