GDB是一个功能强大的调试器,它是一个自由软件,能够用在许多UNIX平台上。它同时也是Linux系统中的默认调试器。GDB已被移植到许多其他的计算机平台上,并且能够用于调试嵌入式实时系统。一般来说,GDB主要可以帮助我们完成以下四个方面的功能:  1, 启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 2,可以让被调试的程序在你所指定的断点处停住。  3, 当程序被停住时,可以检查此时你的程序中所发生的事情。 4, 动态的改变你程序的执行环境。  与图形化的调试工具相比,GDB具有如下优点: GDB的启动速度比GUI快很多,当只需要快速检查代码中的某项内容时,这就是一 个很重要的优点。在与Eclipse比较时,这种启动时间上的差距很大。

下面我在自己虚拟机上的一个进程拷贝的代码进行的实验

gcc main.c -g -o app

gdb app

之后我们就可以使用gdb进行调试了

run全速执行,start开始执行,这两个命令如果有命令行参数的话最好加上(建议)

启动界面

start直接执行到了67行

list:可以查看代码

list+num可以指明查看哪一行代码

听过break可以打断点,info breakpoints可以查看我们用了哪些断点,delete breakpoints可以取消断点,这里我们需要注意一个问题就是,在virtual studio中的断点,如果关闭了下次打开仍然存在,但是这里如果关闭了下次就不会存在了

相对应的,vs中有监禁的功能,就是监视变量,display就有这个功能,info display可以查看我们监视了哪些变量,之后我们每次next和step的时候,都会在最后几行显示监视的变量,delete就是删除了

step就是按语句调式,next就是按照过程调式

set var 变量名=值  可以中途改变变量的值,

printf可以中间输出变量的值

backtrace( bt )显示程序的层次关闭,与函数调用栈帧,下面75行到26行跳到了另外一个函数,这样可以使用backtrace就可以看层次关系,两个函数使用不同的栈,所以我们使用print argc的时候不好使,我们可以通过frame临时跳到main中,

在一盒函数中我们使用finish可以挑战到调用的开始位置

x(x/20wx)可一查看内存,20表示查看20字节,w表示word,x表示十六进制

continue  如果使用断点的话我们使用continue可以按照断电进行

set follow-fork-mode (child or parent)  调用父进程子进程

core启用core文件,帮助调试

在编译运行app的时候,如果有问题,会生成一个core文件通过gdb core会直接发现错误,这种方法非常方便,但是core的文件特别大

quit退出调试

linux gdb基本概念的更多相关文章

  1. linux信号基本概念及如何产生信号

    linux信号基本概念及如何产生信号 摘自:https://blog.csdn.net/summy_j/article/details/73199069 2017年06月14日 09:34:21 阅读 ...

  2. Linux GDB常用命令一栏

    Linux GDB 常用命令如下: 1.启动和退出gdb (1)启动:gdb ***:显示一段版权说明: (*** 表示可执行程序名) (2)退出:quit.有的时候输入quit后会出现相关提示:类似 ...

  3. Linux负载均衡概念与实践(一)

    根据网上文章整理. 负载均衡软件LVS(Linux Virtual Server)概念篇 lvs是在linux操作系统基础上建立虚拟服务器,实现服务节点之间的负载均衡.它是基于linux内核实现的.2 ...

  4. Linux(二)—— Unix&Linux 的基本概念

    Linux(二)-- Unix&Linux 的基本概念 计算机 = 主机(host)+ 终端(terminal) 主机 = 内核 + 实用工具 内核(kernel) 当计算机启动时,计算机要经 ...

  5. linux gdb

    linux gdb linux 测试代码 #include <stdio.h> #include <stdlib.h> static char buf[255]; static ...

  6. Linux的防火墙概念

    #linux的防火墙概念#因为如果你不关防火墙,很可能运行 django.nginx.mysql出错#防火墙可能会阻挡端口流量的 出口#也会阻挡外来请求的 入口 #selinux iptables f ...

  7. Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx)

    Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx) 一丶集群和Nginx反向代理 ...

  8. Linux入门-基本概念

    本文主要介绍linux基础概念介绍,对基本概念了解后,更好入门. 这里主要介绍一下几个概念 什么是linux GNU项目和自由软件基金会 linux发行版 什么是linux   也许大家都已经知道,L ...

  9. linux 时间管理——概念、注意点(一)【转】

    转自:http://www.cnblogs.com/openix/p/3324243.html 参考:1.http://bbs.eyeler.com/thread-69-1-1.html        ...

随机推荐

  1. LWIP_STM32_ENC28J60_NETCONN_TCP_CLIENT(4)

    既然udp说完了,那接下来自然就是TCP通讯了,今天说说TCP客户端通讯,也就是单片机作为客户端,主机PC作为服务器 相比于udp而言,tcp增加了一个连接服务器的流程,首先还是创建tcp_clien ...

  2. Spring自学教程-ssh整合(六)

    以下是本人原创,如若转载和使用请注明转载地址.本博客信息切勿用于商业,可以个人使用,若喜欢我的博客,请关注我,谢谢!博客地址 感谢您支持我的博客,我的动力是您的支持和关注!如若转载和使用请注明转载地址 ...

  3. Java 的Object类

    1.toString()是Objectde的方法,如果不重写,直接输出对象或者用对象调用toString()输出是会输出包名.类名@对象哈希码的无符号十六进制表示 子类如果重写了这个方法,可以隐式调用 ...

  4. Yaf 使用遇到的坑

    yaf 使用心得: 1.    yaf中使用__get魔术方法后,直接导致模板不能自动渲染,需要手动指定模板 ? 1 $this->getView()->display('index/in ...

  5. MySQL常用命令(参考资料,部分改动)

    一.连接MYSQL 格式: mysql -h主机地址 -u用户名 -p用户密码 . 连接到本机上的MYSQL. 首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root ...

  6. EclipseEE导入项目出现的那些问题

    1.显示.project文件丢失, 解决方法:在eclipse中删除和该项目相同的文件名,重新import即可 2.导入没有.classpath和.project文件的项目 解决方法:目前没遇到 3. ...

  7. 温故知新 javascript 正则表达式

    很长时间没看 正则表达式了,碰巧今天用到,温故知新了一把 看书学习吧 50% 的举一反三练习中的原创.   一 javascript正则表达式的基本知识 1     javascript 正则对象创建 ...

  8. Grunt那些事

    1.第一步当然是先安装好nodejs里面的npm包管理器咯,若还不知道怎么安装请参考nodejs那些事里面的安装步骤 2.node安装完后,就安装grunt-CLI,如果nodejs直接安装在系统默认 ...

  9. PHP中文件包含的路径问题

    在程序中当前文件夹下文件路径可以表示为3种:1)绝对路径,2)相对路径,3)直接文件名 例如在/var/www下的a.php:1)/var/www/a.php 2)./a.php 3)a.php 在P ...

  10. java 之 Spring

    1.Spring 介绍 2.Spring 下载 3.Spring 导入 4.Spring 配置