Linux命令(十四)gdb调试
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调试的更多相关文章
- Nginx学习之十四-GDB调试Nginx初试
本文的测试环境: Win7+虚拟机VMWareVMware-workstation-full-7.1.4-385536+Ubuntu12.04 Nginx-1.4.0 要想有效的研究Nginx源码,必 ...
- Linux基础 30分钟GDB调试快速突破
引言 Linus心灵鸡汤 在*nix开发中有道卡叫gdb调试,不管你怎么搞. 它依然在那丝毫不会松动.今天致敬一个 活着的传奇 Linus Torvalds Unix 始于上个世纪60年代,在70年代 ...
- gdb常用命令及使用gdb调试多进程多线程程序
一.常用普通调试命令 1.简单介绍GDB 介绍: gdb是Linux环境下的代码调试⼯具.使⽤:需要在源代码⽣成的时候加上 -g 选项.开始使⽤: gdb binFile退出: ctrl + d 或 ...
- linux下如何使用gdb调试
gdb是linux下非常好用的一个调试工具,虽然它是命令行模式的调试工具,但是它的功能强大到你无法想象,这里简单介绍下gdb下常用的命令. 首先编译生成可执行文件(这里的test.c是一个简单的求前n ...
- 自学Linux命令的四种方法
自学Linux命令的四种方法 导读 童鞋们刚接触linux时,在学习过程中中会遇到不少问题,学习linux摸不着头脑,那么下面介绍四种linux的学习方法,特别适合新手. 方法一:终端"每日 ...
- Linux命令-文件管理(四)
Linux命令-文件管理 Linux slocate命令 Linux slocate命令查找文件或目录. slocate本身具有一个数据库,里面存放了系统中文件与目录的相关信息. 语法 slocate ...
- Linux 常用命令十四 killall和pkill
用killall杀死所有同名的进程. wang@wang:~/workpalce/git$ ps -aux | grep vim wang pts/ S+ : : vim a wang pts/ S+ ...
- linux下如何用GDB调试c++程序
转:http://blog.csdn.net/wfdtxz/article/details/7368357 GDB 是GNU开源组织发布的一个强大的UNIX下的程序调试工具.或许,各位比较喜欢那种图形 ...
- linux(十四)之linux NFS服务管理
学到这里差不多就结束了linux的基础学习了,其实linux的内容并不难,我们要经常的反复的去操作它,多多和它去联络感情才能很好的掌握这个linux. 加油!今天是星期二.没有什么比努力让人更加热血沸 ...
- 攻城狮在路上(叁)Linux(十四)--- 查阅文件内容
常用命令:cat.tac.nl.more.less.head.tail.od... 一.直接查看文件内容:cat.tac.nl <==一次性全部读取 1.cat [-AbEnTv] 文件名 参数 ...
随机推荐
- bzoj 1083: [SCOI2005]繁忙的都市 (最小生成树)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1083 思路:连接所有点,肯定最少是需要n-1条边的,也就是写个最小生成树,记得保存下最大的权 ...
- MT【253】仿射和蒙日圆
如图,设点$M(x_0,y_0)$是椭圆$C:\dfrac{x^2}{2}+y^2=1$上一点,从原点$O$向圆$M:(x-x_0)^2+(y-y_0)^2=\dfrac{2}{3}$作两条切线分别与 ...
- SA / SAM 题目集
上一次做 SA / SAM 相关的题还要数到某场毒瘤 NOIP 模拟赛--这么久没做了都快忘光了--写点东西记录一些最近做到的水好题. LOJ2059 「TJOI / HEOI2016」字符串 题意 ...
- [luogu3157][bzoj3295][CQOI2011]动态逆序对【cdq分治+树状数组】
题目描述 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序 ...
- bzoj1014 火星人 (hash+splay+二分答案)
求公共前缀的问题可以用hash+二分来解决,但这个是动态的,所以我们用平衡树来维护区间的hash值 复杂度$O(mlog^2n)$ #include<bits/stdc++.h> #def ...
- String Reconstruction (并查集)
并查集维护和我这个位置的字母连续的已经被填充的字母能到达的最右边的第一个还没有填充的位置,然后把这个位置填上应该填的东西,然后把这个位置和下一个位置连接起来,如果下一个位置还没有填,我就会把下一个位置 ...
- BZOJ3029守卫者的挑战(概率dp)
题目大意:给定n个事件,第i个事件发生的概率为pi,收益为ai,初始收益为k,求n个事件之后发生的事件数>=l且收益>=0的概率 收益只可能是正整数或-1. Solution dp[i][ ...
- Docker部署Jenkins测试环境
安装docker环境 yum install epel-release -y && yum install docker -y 如果是高手需要docker-compose的话就再装个d ...
- HDU/HDOJ 2087 剪花布条
KMP裸题 (极限5分钟A题) /** freopen("in.in", "r", stdin); freopen("my.out", &q ...
- ImageMagick: DrawImage(Image*,DrawInfo*) 绘制填充图片时卡住的原因分析
今天傍晚在测试的时候无意发现有两个动画会卡住,正常情况下,20秒就完成的操作,突然卡住. CPU:95%+,经过30 - 50秒左右后,程序又能正常的向下执行,结果是对的. 这种情况不是每次都发生,有 ...