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. mac 使用指南

    资料检索: Command + Option + Esc 查看进程或关闭 深度开源为OPEN other 工具使用: Alfred快捷键:option+space iTerm2命令行工具 SSH Sh ...

  2. PHP 事务写法

    $md=new Model(); //创建事务 $md->startTrans(); //开始事务 $md->table("ym_xxx")->where(&qu ...

  3. 「UVA10766」Organising the Organisation(生成树计数)

    BUPT 2017 Summer Training (for 16) #6C 题意 n个点,完全图减去m条边,求生成树个数. 题解 注意可能会给重边. 然后就是生成树计数了. 代码 #include ...

  4. 【HDU - 4345 】Permutation(DP)

    BUPT2017 wintertraining(15) #8F 题意 1到n的排列,经过几次置换(也是一个排列)回到原来的排列,就是循环了. 现在给n(<=1000),求循环周期的所有可能数. ...

  5. linux中shell脚本引用另一shell脚本

    调用有三种方法: 1.fork:不同的shell,调用后返回父shell,子shell从父shell中继承变量,但子shell的变量不会带回父shell,直接用path/to/file.sh调用: 2 ...

  6. 【UOJ#340】【清华集训2017】小 Y 和恐怖的奴隶主(矩阵快速幂,动态规划)

    [UOJ#340][清华集训2017]小 Y 和恐怖的奴隶主(矩阵快速幂,动态规划) 题面 UOJ 洛谷 题解 考虑如何暴力\(dp\). 设\(f[i][a][b][c]\)表示当前到了第\(i\) ...

  7. Nginx代理MysqlCluster集群(二)

    Nginx代理MySql集群本次实验采用nginx 版本1.12以上 集合了tcp代理功能只需在编译时明文开启指定的功能 --with-stream--prefix=/usr/local/ngin - ...

  8. iptables防火墙详解(二)

    -- 基于状态的iptables 如果按照tcp/ip来划分连接状态,有11种之多(课后可以自己去读一下相关知识) 但iptables里只有4种状态:ESTABLISHED.NEW.RELATED及I ...

  9. PHP使用自定义key实现对数据加密解密

    // 加密 function encryptStr($str, $key){ $block = mcrypt_get_block_size('des', 'ecb'); $pad = $block - ...

  10. 没有上司的舞会 codevs 1380

    上树DP,记忆化搜索. 本题老师讲的方法是直接树形DP,但是由于我对树并不够了解,什么dfs也不想尝试(虽然感觉自己可以搞),于是搞了个结构体存点以及该点的信息,用f[i][j]作为记忆化数组.以后最 ...