一起talk GDB吧(第二回:GDB单步调试)
各位看官们,大家好。我们在上一回中说简单地介绍了GDB。这一回中,我们介绍GDB的调试功能:单步
调试。
闲话休提,言归正转。
让我们一起talk GDB吧!
看官们,我们先说一下什么是单步调试。大家都知道。程序是依照指令。一步一步地执行,仅仅是程序执行
的非常快,所以你没有办法看到走过的每一步。
这个有点类似我们寻常走路,一步一步地向前走,在路上可
以看到很多风景,假设坐车,那么车速太快了,就会看不清楚路上的风景。单步调试就是不让程序非常快地
执行,通俗点说,说是不让程序“坐车”走,让程序一步一步地执行。
我们来看看怎样使用GDB让程序一步一步地执行。具体的过程例如以下:
- 1.启动GDB:gdb file.o(表示使用GDB对file.o这个程序进行调试);
- 2.開始调试:start.这个时候。GDB会从file.o程序中的main函数開始执行;
- 3.单步调试:next(能够缩写为n)。
程序执行到下一条语句;
- 4.重复调试:继续输入n,程序就会跳到下一行。如此重复,程序就会一步步地执行。
这里有个技巧和大家共享一下:运行完第一个n命令后,假设想继续运行n命令,那么仅仅须要按下回车键就
能够继续运行n命令。而不须要继续输入n,由于在GDB中回车键表示反复运行它前面的命令,这个有点类似
Linux中的点命令。
在单步调试过程中遇到程序中的函数时。会把函数调用当做一个总体。大家可能不理解。没关系,咱们举个
样例:程序中有下面三条语句:
a =5;b = 3;
c =min(a,b); //min是求最小值的一个函数
printf("min is :%d",c);
当程序执行到“a =5;b = 3;”这行时。使用单步调试命令n,程序会执行到“c =min(a,b);”这一行,假设再执行
单步调试n。那么程序会执行到“printf("min is :%d",c);“这一行。大家都知道,函数是多个语句组成的,不
会一步就执行完,可是单步调试的时候把函数看成了一个总体,让它一步执行完。
假设我们想看函数中每
个语句的执行步骤,怎么办?看官莫急。强大的GDB不会让我们失望的。我们能够使用GDB的命令:step
(缩写为s),使用该命令能够进入函数中。
然后就能使用单步调试命令。一步一步地看清楚函数中每条语句
的执行步骤了。
假设想从函数中跳出来能够使用命令:finish.这时程序会调用函数的地方,也就是我们样例
中“printf("min is :%d",c);“这一行。
看官们,通过单步调试,我们能够看到程序执行的“脚印”。
在调试过程中,假设看到程序执行步骤与我们
事先给程序设计好的步骤不一样,那么说明程序没有依照我们设计的步骤走。这肯定是有地方出问题了。
我们须要把出问题的地方找出来。由于程序是一步一步地执行,所以我们非常easy找到哪一步出了问题,进
而找出问题的解决办法。这便是单步调试的作用。当然了。单步调试还有其他的作用。它能够和其他调试方法
一起配合使用,至于是什么调试方法。我们以后在的章回中会介绍。
我们平时还认为电脑上的程序不够快呢,你还不让它“坐车”,让它步行。这不让电脑更加慢了吗?看官说的
有道理。只是,我们通过单步调试让程序运行慢下来,目的是为了看清楚程序每一步运行时的样子,这样
有助于我们发现程序中错误。进而方便我们改动程序中错误。试想一下。程序“坐着车”跑的那么快,你还没
有看清楚它的样子。它已经跑的无影无踪,更不要说找它的运行时的错误了。
看官们,关于GDB的内容。今天咱们就讲到这里。
欲知后事怎样,且听下回分解!
一起talk GDB吧(第二回:GDB单步调试)的更多相关文章
- GDB:从单线程调试到多线程调试(MFiX单步调试)
GDB:从单线程调试到多线程调试 1. 裸跑GDB 1.1 安装GDB sudo apt-get install gdb 1.2 编译程序 由于需要调试,因此编译的时候需要添加-g编译参数: 1.3 ...
- GDB 单步调试汇编
本文同时发表在 https://github.com/zhangyachen/zhangyachen.github.io/issues/134 之前在看汇编的时候一直是肉眼看GCC -S的结果,缺点是 ...
- 手把手教你使用eclipse+qemu+gdb来单步调试ARM内核【学习笔记】
平台信息:linux4.0 平台:qemu 作者:庄泽彬 说明:笨叔叔的Linux视频的笔记 一.编译linux源码 export CROSS_COMPILE=arm-linux-gnueabi- e ...
- LINUX上使用GDB单步调试Chromium Android C++代码。
###动机###在LINUX使用GDB单步调试Chromium Android C++代码. [1]编译android平台Chromium, 修改GN文件中编译选项:-g -O0 使得编译优化更少,便 ...
- GDB调试指南-单步调试
前言 前面通过<启动调试>,<断点设置>,<变量查看>,我们已经了解了GDB基本的启动,设置断点,查看变量等,如果这些内容你还不知道,建议先回顾一下前面的内容.在启 ...
- gdb常用命令及gdb调试多进程/线程程序&coredump
一.常用普通调试命令 1.简单介绍GDB 介绍: gdb是Linux环境下的代码调试⼯具.使⽤:需要在源代码⽣成的时候加上 -g 选项.开始使⽤: gdb binFile退出: ctrl + d 或 ...
- [转]Building a Basic Fuzzer with GDB: The Five Minute GDB Scripting Tutorial
link:http://www.praetorian.com/blog/building-a-basic-fuzzer-with-gdb-the-five-minute-gdb-scripting-t ...
- [gdb][python][libpython] 使用gdb调试python脚本
https://devguide.python.org/gdb/ https://sourceware.org/gdb/current/onlinedocs/gdb/Python.html#Pytho ...
- GDB(十)--调试正在运行的进程
我编写了一个循环: long i; for (i = 0; i < 999999; i++) { mt.a += 1; sleep(1); }把它编译成a ...
随机推荐
- 用Javascript实现图片的缓慢缩放效果
<body> <!--页面布局:一张图片两个按钮--> <div style = "width:400px;margin:0 auto"> &l ...
- Windows server 2008 R2 + IIS7.5,ASP网站设置
Windows server 2008 R2 + IIS7.5,ASP网站设置 1. 让IIS7支持ASP Win2008 IIS7 默认不安装ASP,如果需要ASP 的支持,需要将这个角色服务选上. ...
- 洛谷 P 3379 【模板】最近公共祖先(LCA)
题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询问的个数和树根结点的序号. 接下来N-1行每 ...
- 乘法逆元__C++
在开始之前我们先介绍3个定理: 1.乘法逆元(在维基百科中也叫倒数,当然是 mod p后的,其实就是倒数不是吗?): 如果ax≡1 (mod p),且gcd(a,p)=1(a与p互质),则称a关于模p ...
- luogu 1354 房间最短路问题 线段与直线相交 最短路
题目链接 题目描述 在一个长宽均为10,入口出口分别为(0,5).(10,5)的房间里,有几堵墙,每堵墙上有两个缺口,求入口到出口的最短路经. 输入输出格式 输入格式: 第一排为n(n<=20) ...
- 标准C程序设计七---110
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- LeetCode OJ--Binary Tree Level Order Traversal II
http://oj.leetcode.com/problems/binary-tree-level-order-traversal-ii/ 树的层序遍历,和上一道题相比,对结果做一个顺序调整 reve ...
- TF-IDF 实践
打算分以下几个部分进行 1. 用python写一个爬虫爬取网易新闻 2. 用分词工具对爬下来的文字进行处理, 形成语料库 3. 根据TF-IDF, 自动找出新闻的关键词 4. 根据TF-IDF, 实现 ...
- Win10下 tensorflow gpu版安装
准备: 系统环境: windows10 + Anaconda3 + Pycharm (1)环境配置: 打开Anaconda Prompt,输入清华仓库镜像,这样更新会快一些: 输入: conda co ...
- TCP11种状态
2.全部11种状态 2.1.客户端独有的:(1)SYN_SENT (2)FIN_WAIT1 (3)FIN_WAIT2 (4)CLOSING (5)TIME_WAIT . 2.2.服务器独有的:(1)L ...