再学C/C++ 之 浅析gdb的-g选项
浅析gdb的-g选项
准备
gdb是Linux下学习C/C++最常用的debug工具。要使用这一强大工具,必须在编译时加上-g选项,生成的目标文件才可以用gdb进行调试。
如,先创建一个test.c文件,内容为:
#include <stdio.h> int main(void){
int a[];
a[] = ;
a[] = ;
return ;
}
使用编译语句,进行编译:
gcc -g test.c -o test.out
浅析-g选项
-g选项的作用就是在编译生成的目标文件中加入源码信息。例如,把目标文件中的机器指令与源代码的行数对应起来。注意,这里并不是将整个源码都添嵌入到目标文件中,而是只是添加对应的行数信息,因此,在进行debug的时候,必须保证gdb可以找到源文件。
下面做一个小测试进行验证:
(1)先针对上面的文件调试:
gdb test.out
(gdb) start
如下:
可以看到,第一个breakpoint是第5行,且源码为:
a[0] = 1;
这个时候,如果在源文件中的第一和第三行间添加1行,然后再运行gdb(注意,不要在运行gcc编译)
gdb test.out
(gdb) start
此时,发现gdb中第一个breakpoint仍为第5行,但是,源码却为原来的上一行。
由此,验证了我们的说法:“gdb只是添加对应的行数信息,而非嵌入源代码”。
扩展
-g 选项具有三个等级。即:
-g1
不包含局部变量和与行号有关的调试信息,因此只能够用于回溯跟踪和堆栈存储和函数的调用等等。
-g2
默认的级别,此时产生的调试信息包括扩展的符号表、行号、局部或外部变量信息
-g3
包含级别2中的所有调试信息,以及源代码中定义的宏
再学C/C++ 之 浅析gdb的-g选项的更多相关文章
- 【C】 01 - 再学C语言
“C语言还用再学吗?嵌入式工程师可是每天都在用它,大家早就烂熟于心,脱离语言这个层面了”.这样说不无道理,这门古老的语言以其简单的语法.自由的形式的而著称.使用C完成工作并不会造成太大困扰,所以很少有 ...
- [Python]再学 socket 之非阻塞 Server
再学 socket 之非阻塞 Server 本文是基于 python2.7 实现,运行于 Mac 系统下 本篇文章是上一篇初探 socket 的续集, 上一篇文章介绍了:如何建立起一个基本的 sock ...
- 再学Java 之 interface的成员变量
前言:最近在学多线程,写“哲学家就餐问题(Dining Philosophers)”的时候,需要定义一个全局的变量,即哲学家的人数.常用的做法是在其中一个类中定义一个static final的变量,然 ...
- GDB如何调试没有符号表(未加-g选项的编译)的程序
/********************************************************************* * Author : Samson * Date ...
- 再学ajax--第一天
今天写这个帖子就是是前几天在学ES6在学到Promise实现AJAX操作时,发现对ajax的一些知识点有些遗忘,所以就回头重新复习了一遍ajax,温故而知新. 主要有从4个方面去复习ajax,分析不透 ...
- 再学python类(终结篇)
续写 初学python类,这几天吃坏东西了,拖着虚弱的身躯写的.有些乱请各位看官海涵. 声明:本人编程新手,还在学习中.所表述的东西都是基础语法之类的,分享我的学习笔记.还望多多指点,我一定虚心接受. ...
- 他学习一年Python找不到工作,大佬都说你别再学Python了!
引言: 都说,滴水穿石非一日之功.然而有些人即使奋斗一辈子也比不上别人一年,别人学习一年比不得你学习一个月.其中缘由,有些人看了大半辈子还没看明白. 即使Python这么火,为何你学习一年的Pytho ...
- Java编码方式再学
一直以来对编码方式对了解不是很深入.建议读下这几篇博文 学点编码知识又不会死:Unicode的流言终结者和编码大揭秘 编码研究笔记 这几篇博文上回答了内心存在的一些问题,这些问题可能也是大家经常遇到的 ...
- 不要再学 JSP 了,学 SpringBoot + Thymeleaf + Vue吧
老读者就请肆无忌惮地点赞吧,微信搜索[沉默王二]关注这个在九朝古都洛阳苟且偷生的程序员.本文 GitHub github.com/itwanger 已收录,里面还有我精心为你准备的一线大厂面试题. 读 ...
随机推荐
- keras CNN解读
loss是训练集损失值. acc是训练集准确率.val_loss是测试集上的损失值,val_acc是测试集上的准确率. 用深度学习框架跑过实际问题的朋友一定有这样的感觉: 太神奇了, 它竟然能自己学 ...
- 把sublime text打造成python交互终端(windows和Ubuntu)
作者:tongqingliu 转载请注明出处:http://www.cnblogs.com/liutongqing/p/7015958.html 把sublime text打造成python交互终端 ...
- War Chess (hdu 3345)
http://acm.hdu.edu.cn/showproblem.php?pid=3345 Problem Description War chess is hh's favorite game:I ...
- python常用算法题
一: #计算平均数,中位数和众数 #coding:utf-8 #计算平均数,中位数和众数 import random lst = [random.randint(0,10) for i in rang ...
- ASP.NET Web API 框架研究 Controller实例的销毁
我们知道项目中创建的Controller,如ProductController都继承自ApiController抽象类,其又实现了接口IDisposable,所以,框架中自动调用Dispose方法来释 ...
- list列表常用操作
1.创建列表.只要把逗号分隔的不同的数据项使用方括号括起来即可 List = ['wade','james','bosh','haslem'] 2.使用 range() 创建数字列表 numbers ...
- Microsoft.Office.Interop.Excel.ApplicationClass can not embedded 的问题
用c#进行开发时,要做一个excel导入功能,期间使用到Microsoft.Office.Interop.Excel程序集,在用vs2008开发的时候没有报错,将这个程序集引用到vs2010的时候,便 ...
- 面向对象——单例模式,五种方式
单例模式:多次实例化的结果指向同一个实例 实现方式 一.使用类方法(调用创新对象,函数返回原定对象) import settings class Mysql: __instance = None de ...
- awk的匹配
关系运算符 含义 用法示例 < 小于 x < y > 大于 x > y
- 18_python_类关系
一.类与类之间的关系 1.依赖关系 class Elephant: def __init__(self, name): self.name = name def open(self, ...