1. gdb调试

fun.c

#include <stdio.h>
#include "head.h" int sum(int a, int b)
{
printf("welcome call %s, %d + %d = %d\n",__FUNCTION__, a, b, a + b);
return a + b;
} int mul(int a, int b)
{
printf("welcome call %s, %d * %d = %d\n", __FUNCTION__, a, b, a * b);
return a * b;
}

head.h

#include <stdio.h>     

int sum(int a, int b); 

int mul(int a, int b);

main.c

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "head.h" typedef struct MyfunInfo
{
int fun_type; // 函数类型
int a; // 函数的第一个参数
int b; // 第二个参数
char funname[]; // 函数名称
}MyfunInfo; int main(int argc, char *argv[])
{
int a = ;
int i = ;
int a1 = , b1 = ;
MyfunInfo funinfo[];
char *Msg = "I will die !";
//Msg[0] = '1';
if (argc == )
{
a1 = atoi(argv[]);
b1 = atoi(argv[]);
funinfo[].a = a1;
funinfo[].b = b1;
funinfo[].a = a1;
funinfo[].b = b1;
} for (int i = ; i < ; i++)
{
printf("i===%d, LINE=%d\n", i, __LINE__);
if (i == )
{
funinfo[i].fun_type = ;
printf("begin call sum\n");
strcpy(funinfo[i].funname, "sum");
sum(funinfo[i].a, funinfo[i].b);
}
if (i == )
{
funinfo[i].fun_type = ; //call mul
printf("begin call mul\n");
strcpy(funinfo[i].funname, "mul");
mul(funinfo[i].a, funinfo[i].b);
}
} printf("say bye\n"); return ;
}

(-g是调试选项, 生成的app.out可调试)

2 启动gdb

gdb app.out

2.1 run (r) 启动

2.2 start 启动-停留在main函数,分步调试

2.21 next(n):下一步

2.22 step(s):下一步, 可以进入函数内部, 但是库函数不能进

2.3 设置启动参数和设置变量值 set args parm1 parm2 ...

2.31 设置启动参数  set args parm1 parm2.....

2.32 设置变量值

  • set argc=4

  • set argv[1]="12"

2.4 设置断点break (重要)

2.41 list查看代码

2.42 b 行号--主函数所在文件的行

2.43 b 函数名

2.44 b 文件名:行号

2.45 list 文件名:行号(默认10行)

2.46 info b--显示全部断点

2.5 删除断点 del (d)

2.6 运行至下个断点 c

2.7 p 变量--打印变量

2.8 ptype--查看类型

2.9 display 变量--用于追踪,查看变量具体何时变化

2.91 display 变量

2.92 undisplay 行号

3. 补充

3.1 设置条件断点

4. gdb跟踪core

注意:出现 段错误(核心已转储))

4.1 设置生成core:ulimit -c unlimited

4.2 取消生成core:ulimit -c 0

4.3 设置core文件格式:/proc/sys/kernel/core_pattern

  • 设置core
  • 使用该命令修改文件(无法用vim): sudo echo "core-%e-%t" > /proc/sys/kernel/core_pattern

Linux命令(十四)gdb调试的更多相关文章

  1. Nginx学习之十四-GDB调试Nginx初试

    本文的测试环境: Win7+虚拟机VMWareVMware-workstation-full-7.1.4-385536+Ubuntu12.04 Nginx-1.4.0 要想有效的研究Nginx源码,必 ...

  2. Linux基础 30分钟GDB调试快速突破

    引言 Linus心灵鸡汤 在*nix开发中有道卡叫gdb调试,不管你怎么搞. 它依然在那丝毫不会松动.今天致敬一个 活着的传奇 Linus Torvalds Unix 始于上个世纪60年代,在70年代 ...

  3. gdb常用命令及使用gdb调试多进程多线程程序

    一.常用普通调试命令 1.简单介绍GDB 介绍: gdb是Linux环境下的代码调试⼯具.使⽤:需要在源代码⽣成的时候加上 -g 选项.开始使⽤: gdb binFile退出: ctrl + d 或 ...

  4. linux下如何使用gdb调试

    gdb是linux下非常好用的一个调试工具,虽然它是命令行模式的调试工具,但是它的功能强大到你无法想象,这里简单介绍下gdb下常用的命令. 首先编译生成可执行文件(这里的test.c是一个简单的求前n ...

  5. 自学Linux命令的四种方法

    自学Linux命令的四种方法 导读 童鞋们刚接触linux时,在学习过程中中会遇到不少问题,学习linux摸不着头脑,那么下面介绍四种linux的学习方法,特别适合新手. 方法一:终端"每日 ...

  6. Linux命令-文件管理(四)

    Linux命令-文件管理 Linux slocate命令 Linux slocate命令查找文件或目录. slocate本身具有一个数据库,里面存放了系统中文件与目录的相关信息. 语法 slocate ...

  7. Linux 常用命令十四 killall和pkill

    用killall杀死所有同名的进程. wang@wang:~/workpalce/git$ ps -aux | grep vim wang pts/ S+ : : vim a wang pts/ S+ ...

  8. linux下如何用GDB调试c++程序

    转:http://blog.csdn.net/wfdtxz/article/details/7368357 GDB 是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形 ...

  9. linux(十四)之linux NFS服务管理

    学到这里差不多就结束了linux的基础学习了,其实linux的内容并不难,我们要经常的反复的去操作它,多多和它去联络感情才能很好的掌握这个linux. 加油!今天是星期二.没有什么比努力让人更加热血沸 ...

  10. 攻城狮在路上(叁)Linux(十四)--- 查阅文件内容

    常用命令:cat.tac.nl.more.less.head.tail.od... 一.直接查看文件内容:cat.tac.nl <==一次性全部读取 1.cat [-AbEnTv] 文件名 参数 ...

随机推荐

  1. 【BZOJ1580】【USACO2009Hol】杀手游戏 计算几何

    题目描述 一个平面上有很多个点在运动.给你每个点的初始坐标和每个点的速度,求出最多有多少个点到\(0\)号店的距离同时不超过\(r\). \(n\leq 50000\) 题解 我们先把\(0\)号点平 ...

  2. 【XSY2534】【CF835D】Palindromic characteristics 回文自动机

    题目大意 ​ 一个字符串\(s\)是\(1\)−回文串当且仅当这个串是回文串. ​ 一个串\(s\)是\(k\)−回文串\((k>1)\)当且仅当\(s\)的前一半与后一半相同且\(s\)的前一 ...

  3. 字符串数据结构模板/题单(后缀数组,后缀自动机,LCP,后缀平衡树,回文自动机)

    模板 后缀数组 #include<bits/stdc++.h> #define R register int using namespace std; const int N=1e6+9; ...

  4. rt-thread中线程内置定时器的作用 ---

    @2019-01-15 [小记] 常见到在内核组件的接口函数中,配置和启动一个定时器后,启动线程调度 我猜想是超时时间到达后恢复调用接口函数的线程以执行线程调度语句后的代码

  5. BZOJ3456 城市规划 【多项式求ln】

    题目链接 BZOJ3456 题解 真是一道经典好题,至此已经写了分治\(NTT\),多项式求逆,多项式求\(ln\)三种写法 我们发现我们要求的是大小为\(n\)无向联通图的数量 而\(n\)个点的无 ...

  6. luogu5019 [NOIp2018]铺设道路 (贪心)

    和NOIp2013 积木大赛一模一样 我在堆一格的时候,我把它尽量地往右去延伸 于是如果对于一个i,a[i-1]<a[i],那i在之前一定只堆过a[i-1]那么多,所以要再堆a[i]-a[i-1 ...

  7. go语言通道详解

    https://www.ardanlabs.com/blog/2017/10/the-behavior-of-channels.html Introduction When I started to ...

  8. 导出为word文档

    原来用freemarker就可以,真是太简便了.先设计一张文档,然后把要输出的值用freemarker取值表达式获取数据,最后保存为ftl文件,再调整一下就可以了.

  9. hystrix实战之javanica

    spingboot2.0.3集成hystrix的,访问dashboard的另外一种方式: https://blog.csdn.net/qq_38455201/article/details/80783 ...

  10. 浏览器报XMLHttpRequest cannot loadxxxxxx

    解决方案 找到浏览器-----右击---属性---加 加上这一句就不会报错--allow-file-access-from-files 加上这一句就不会报错--allow-file-access-fr ...