gcc -g

如果不打开-g或者-ggdb(GDB专用)调试开关,GCC编译时不会加入调试信息,因为这会增大生成代码的体积。GCC采用了分级调试,通过在-g选项后附加数字1、2或3来指定在代码中加入调试信息量。

级别1(-g1)不包含局部变量和与行号有关的调试信息,只能用于回溯跟踪和堆栈转储之用。[ 回溯跟踪指的是监视程序在运行过程中的函数调用历史,堆栈转储则是一种以原始的十六进制格式保存程序执行环境的方法,两者都是经常用到的调试手段。

默认的级别是2(-g2),此时调试信息包括扩展的符号表、行号、局部或外部变量信息。

级别3(- g3)包含级别2中的调试信息和源代码中定义的宏。

gcc -E

显示预处理结果,包括宏展开,头文件展开等。不进行后续编译等其他阶段。配合-p,可以在预处理阶段不生成linemarks。

objdump -l

在dump 代码段时显示代码行

.bss 未初始化或初始化为0,系统启动时多自动清零

.data 初始化为非0

.rodata 常量,常量也可包含在.text等中

common段:全局变量来若未被初始化,则作为弱符号,先保存在common段,等于只是声明,到链接时再放入到BSS段。(不同编译器行为可能会不同,有的编译器会把没有初始化的全局变量直接放到BSS段)一个变量多次被定义为强符号(初始化)则编译报错。在编译阶段,可以通过-fno-common选项来禁止将未初始化的全局变量放入到common段。

① 同名的强符号只能有一个,否则编译器报"重复定义"错误。

② 允许一个强符号和多个弱符号,但定义会选择强符号的。

③ 当有多个弱符号相同时,链接器选择占用内存空间最大的那个。

最新文章

  1. 算是休息了这么长时间吧!准备学习下python文本处理了,哪位大大有好书推荐的说下!
  2. Sql 随机更新一条数据返回更新数据的ID编号
  3. 转:在Eclipse中进行C/C++开发的配置方法(20140721最新版)
  4. 【HDOJ】3033 I love sneakers!
  5. javascript加载优化
  6. HTTP的REST服务简介
  7. Java学习之旅基础知识篇:数组及引用类型内存分配
  8. iOS开发 MVVM+RAC 的使用
  9. Python文件读写 - 文件r+ a+ open读写实际表现[示例]
  10. bat自动打包压缩实现
  11. 前端系列之JavaScript基础知识概述
  12. Git团队协作之GitFlow & SoucceTree
  13. LeetCode编程训练 - 位运算(Bit Manipulation)
  14. uploadify上传图片的使用
  15. Word Embedding/RNN/LSTM
  16. Docker学习笔记之使用 Docker Hub 中的镜像
  17. Java 之 POI各Jar包作用
  18. string类型版本号比较
  19. (转)Inno Setup入门(十三)——Pascal脚本(2)
  20. vim最实用命令和快捷键

热门文章

  1. 解决php网页运行超时问题:Maximum execution time of 30 seconds exceeded
  2. XMLHttpRequest cannot load ''. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin ' ' is therefore not allowed access.
  3. lucene分词器中的Analyzer,TokenStream, Tokenizer, TokenFilter
  4. 【WPF学习笔记】[转]周银辉之WPF中的动画 && 晓风影天之wpf动画——new PropertyPath属性链
  5. Mac Security工具使用总结find-identity
  6. EF Core 日志跟踪sql语句
  7. 自定义一个处理图片的HttpHandler
  8. 用Delphi实现网络视频编程
  9. 无法远程访问 MySql Server
  10. 为什么Java中的字符串是不可变的?