三、gdb调试(上)
01.gdb:gdb是GNU debugger的缩写,是编程调试工作。
功能:
  启动程序,可以按照用户自定义的要求随心所欲的运行程序;
  可让被调试的程序在用户所指定的调试的断点处停住(断点可以是条件表达式);
  当程序停住时,可以检测此时程序中所发生的事;
  动态改变量程序的执行环境。
#vi smiple.c
#include<stdio.h>
#include<stdlib.h>
long func(int n);
int main(int argc, char *argv[])
{
printf("Entering main ...\n");
int i;
long result = 0;
for(i=1;i<=100;i++)
{
result += i;
}
printf("result[1-100] = %ld\n",result);
printf("result[1-10]",func(10));
return 0;
}
long func(int n)
{
long sum = 0;
int i;
for(i=1;i<n;i++)
{
sum+=1;
}
return sum;
}
:wq
#gcc -Wall -g(以便生成调试,将源文件显示出来) simple.c -o 
simple
#./simple
#gdb simple
(gdb)list(显示所有源代码)
(gdb) l(同上)
(gdb)break 10(在第10行设置断点)
(gdb)info break(查看断点信息)  --ib(简写)
(gdb)b func(在函数入口设置断点)
(gdb)run --r(运行到断点处)
(gdb)step --s(单步跟踪)
(gdb)print i --p i(打印出i的当前值)
(gdb)p result
result=3
(gdb)p i
(gdb)s
(gdb)until(跳出for循环,循环的下一条语句)
(gdb)c(continue运行到下一个断点处)
(gdb)直接按回车,使用上一次的命令
(gdb)finish(结束单步调试)
#vi Makefile
.PHONY:clean all
CC=gcc
CFLAGS=-Wall -g
BIN=simple main
all:$(BIN)
$(CC) $(CFLAGS) -c $< -o $@
main:main.o search.o
$(CC) $(CFLAGS) &^ -o $@
clean:
rm -f *.o $(BIN)
:wq
#gdb simple
(gdb)r a b c(给程序加上启动参数)
(gdb)list fun(查看fun的函数源码)
(gdb)list file:fun(查看file文件中的fun函数源码)
02.设置断点与观察点
break 行号
break fun
break file:行号
break file:fun
break if<condition>-条件成立时程序停住
info break(i b)-查看断点
watch expr -变量expr值发生改变,程序停住
delete n - 删除断点
03.单步调试
continue(c)-运行至下一个断点
step(s)- 单步跟踪,进入函数,类似于VC中的step in
next(n)-单步跟踪,不进入函数,类似于VC中的step out
finish - 运行程序,直到当前函数完成返回。并打印函数返回时的堆栈地址和返回值及参数等信息。
until - 当厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体
print(p)查看运行时的变量以及表达式

Linux开发工具之gdb(上)的更多相关文章

  1. Linux开发工具之gdb(下)

    三.gdb调试(下) 01.查看运行时数据 print - 查看变量值 ptype - 查看类型 print array - 查看数组 print *array@len - 查看动态内存 print ...

  2. Linux开发工具的使用

    1.   Linux开发工具的使用 Vim编译的使用 Gdb调试工具的使用 Makefile的编写 linux跟踪调试 SSH的使用 subversion的使用 1.   Linux开发工具的使用 V ...

  3. Linux开发工具教程

    今天把上个星期写的Linux开发工具相关的教程整理一下,方便阅读: 1.第一课 GCC入门: 2.第二课 GCC入门之静态库以及共享库: 3.第三课 Makefile文件的制作(上) : 4.第四课 ...

  4. 基于AM3352/AM3354/AM3358/AM3359的Linux 开发环境搭建(上)

    遇到不少人新手小白问,前辈如何搭建一个优良的Linux 开发环境?之前一直都是在用win开发,现在想要尝试用Linux做开发等等一系列的问题.开源一直是给电子行业工作者提供了一种向技术更深处进发的机遇 ...

  5. Linux开发工具之Makefile(上)

    二.makefile(上) 01.make工具   利用make工具可以自动完成编译工作.这些工作包括:如果修改了某几 个源文件,则只重装新编译这几个源文件:如果某个头文件被修改了,则 重新编译所有包 ...

  6. 蜂鸟E203系列——Linux开发工具

    欲观原文,请君移步 Vivado安装 vivado是运行工程的工具,所以必须安装 后台回复[vivado2017]可获取vivado 2017.4 | 后台回复[vivado2020]可获取vitis ...

  7. Linux开发工具之gcc

    一.gcc入门(上)   1.gcc相关概念   gcc(GNU C Compiler)编译器,最初支持C语言,现已支持C.C++.Java.Pascal.Ada.COBOL语言等:支持多种硬件平台: ...

  8. Linux小工具:文件上传ftp服务器

    工作期间,每次将文件上传至ftp服务器时,均需要手工输入ip.用户名.密码等,因此,考虑编写脚本完成文件的上传任务.具体的脚本sync.sh如下: #!/bin/bash source ~/.bash ...

  9. Linux开发工具之Makefile(下)

    二.Makefile(下) 01.make常用内嵌函数 函数调用   $(function arguments) $(wildcard PATTERN)   当前目录下匹配模式的文件   例如:src ...

随机推荐

  1. shell 脚本中 命令

    终端工具tput和stty是两款终端处理工具tput cols,lines,longname,cpu 100 100 输入密码时,不能让输入的内容显示出来.用stty #!/bin/bash #Fil ...

  2. 那些年被我坑过的Python——玄而又玄(第六章 面向对象编程基础)

    面向对象编程: 面向对象顾名思义,就是把组织代码的粒度从函数级别抽象到对象级别,对象是通过类来生成的,类可以想象为模板或进本框架而对象是在原有模板或框架的基础上增加详细信息的实体,类,有分类.聚类的含 ...

  3. easyui_tree 复选框 动态加载树

    controller动态获取单位用户树 #region 下拉树菜单 /// <summary> /// 获取工作人员树菜单 /// </summary> /// <par ...

  4. 一个用得比较广的微信API的XXE外部实体注入漏洞

    文件地址: https://github.com/dodgepudding/wechat-php-sdk/raw/master/wechat.class.php 代码: <?php /** * ...

  5. 6月A项目的总结

    对JS效果的要求有几点: 1.顶部导航栏鼠标经过动画. 2.Slider轮播图带有左右箭头,底部有缩略图,缩略图和大图都会自动播放. 3.右侧有个三个按钮的导航菜单,第一个按钮回到整个页面顶部,第二个 ...

  6. Area of Simple Polygons

    poj1389:http://poj.org/problem?id=1389 题意:求矩形面积的并题解:扫描线加线段树 同poj1389 #include<iostream> #inclu ...

  7. java进程卡死问题

    原文地址:http://stackoverflow.com/questions/28739600/jvm-hang-and-kill-3-jmap-failed tomcat进程出现了如下异常,并且卡 ...

  8. The fundamental knowledge of Node JS.

    D3 JSJava scirpt is an awesome language for Internface Design.All Obejcts in JavaScirpt could be use ...

  9. 南桥先生谈《OUTLIERS》

    借来一套语音版的 Outliers 听完了.这本书里有很多故事,可是希望借此找到成功的奥秘恐怕很难,作者做的是一描述而不是预见.听了半天,只听出了六个字: “天时地利人和”. 比如比尔·盖茨,他之所以 ...

  10. 【动态规划】Vijos P1616 迎接仪式

    题目链接: https://vijos.org/p/1616 题目大意: 长度为N的字符串,只含‘j’和‘z’,可以将任意两个字符调换K次,求能够拥有的最多的'jz'串. 题目思路: [动态规划] 首 ...