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. Mysql 函数大全- 5.6 中文解释函数参考

    mysql 函数大全 5.6 函数参考 5.6函数参考    (只翻译部分,细节查看相关英文版) 12.1功能和操作员参考 12.2表达式评估中的类型转换 12.3运营商 12.4控制流功能 12.5 ...

  2. windows 基础命令小集

    windows 基础命令小集 winver---------检查Windows版本wmimgmt.msc----打开windows管理体系结构(WMI)wupdmgr--------windows更新 ...

  3. npm 淘宝源

    --------- npm: 淘宝源设置:npm config set registry https://registry.npm.taobao.org

  4. 【Loj117】有源汇上下界最小流(网络流)

    [Loj117]有源汇上下界最小流(网络流) 题面 Loj 题解 还是模板题. #include<iostream> #include<cstdio> #include< ...

  5. 【BZOJ3601】一个人的数论(数论)

    [BZOJ3601]一个人的数论(数论) 题面 BZOJ 怎么这图片这么大啊... 题解 要求的是\(\displaystyle \sum_{i=1}^n [gcd(i,n)=1]i^d\) 然后把\ ...

  6. [luogu3648][bzoj3675][APIO2014]序列分割【动态规划+斜率优化】

    题目大意 让你把一个数列分成k+1个部分,使分成乘积分成各个段乘积和最大. 分析 首先肯定是无法开下n \(\times\) n的数组,那么来一个小技巧:因为我们知道k的状态肯定是从k-1的状态转移过 ...

  7. js-基本语法2

    类型转换 1.直接转换 parseInt() 与 parseFloat() alert('12'+7); //弹出127 alert( parseInt('12') + 7 ); //弹出19 ale ...

  8. Visible Trees HDU - 2841(容斥)

    对于已经满足条件的(x1,y1),不满足条件的点就是(n*x1,n*y1),所以要求的就是满足点(x,y)的x,y互质,也就是gcd(x,y) == 1,然后就可以用之前多校的方法来做了 另f[i] ...

  9. jenkins自动打包部署项目

    首先去jenkins的官网下载安装包 https://jenkins.io/   个人下载是长期稳定的那个版本,下载后,得到一个.msi的安装包: 点击进行安装,然后一直点击下一步. jenkins会 ...

  10. python中深拷贝和浅拷贝

    python中所谓浅拷贝就是对引用的拷贝,所谓深拷贝就是对对象的资源的拷贝. 首先,对赋值操作我们要有以下认识: 赋值是将一个对象的地址赋值给一个变量,让变量指向该地址( 旧瓶装旧酒 ). 修改不可变 ...