我的博客:www.while0.com

GDB调试:

-g 生成的可执行文件才可以用gdb调试 (建议在发行版中用strip filename 来把这些调试信息去除)

  开始调试。

  以下是基础调试命令

  help (class) 来获取帮助

  list 或者l 来获取源代码

  list n来获取某一行的代码

  list fucname 来获取某个函数的代码

  start (重新)开始执行程序

  next(s) 逐行执行

  step(s) 单步进入

  bt(backtrace) 查看函数调用的栈阵和实参

  f(frame) num 可以在函数间切换,num是栈帧号,由bt命令可以查看。

  i(info) locals 查看当站栈帧函数的局部变量。

  p(print) 打印一个变量的值

  finish 结束当前函数运行并返回

  set var x=y 设置x的值为y,y的值可以为变量或者数字

  q(quiet) 退出调试

  以下是断点调试命令

  display 每一步都显示一个变量的值

  undisplay n 取消显示一个变量的值。n是那个显示值的编号。

  b(break) n (表达式) 在第n行设置一个断点,如果表达式不为空,则只有满足表达式时断点才会停住

  b(break) funcname 在函数funcname的第一行设置断点

  c(continue) 运行到下一个断点。

  i(info) breakpoints 显示所有断点

  delete breakpoints n 删除编号为n的断点,不指定n的话则是全部删除

  disable breakpoints n 暂时禁用编号为n的断点

  enable n 恢复禁用的编号为n的断点

  run 从头开始连续运行程序,只有遇到断点才会停止执行。

  以下是观察点命令

  watch varname  观察一个变量名为varname的变量,如果该变量发生变化,就给出旧值和新值,如果不变化,则

  i(info) watchpoints 查看已经设置的观察点

  如果调试汇编语言,只能通过加断点,查看寄存器值的方法如下:

  

  info registers的用法:

  i(info) r(registers)       #显示通用寄存器和段寄存器的值
  i(info) r(registers)                     # 查看所有寄存器(包括浮点、多媒体)
  i(info) r(registers) esp      #显示指定寄存器的值

  print的用法:

  

  x的用法:

  

  更详细的用法可以在gdb中输入 gdb x来查看。

注意:GDB可以执行shell命令,如要执行清屏命令 可以用 (gdb) shell clean即可。。

  

  

  

预处理

  gcc -E hello.c -o hello.i  此处如果不用-o指定输出文件,则只会在屏幕显示输出结果

编译

gcc –S hello.i –o hello.s 必须指定输出文件。生成汇编代码

汇编

gcc -c hello.s -o hello.o 把汇编代码编译成机器码,但系统函数等还需要重新定位

连接

gcc hello.o –o hello.exe  不需要加选项

编译时给文件定义宏

-D

编译时取消宏

-U

如果要缩小文件体积,可以用strip来去掉符号表等调试信息。可以用file来查看是否stripped。

gcc编译常用选项的更多相关文章

  1. gcc 编译控制选项

    gcc 编译控制选项前面已经讲过, gcc 的基本用法是:$ gcc [选项] [文件名]gcc 有很多编译控制选项,使得 gcc 可以根据不同的参数进行不同的编译处理,可供 gcc调用的参数大约有 ...

  2. gcc编译器常用选项的含义

    -w: 关闭编译时的警告, 也就是编译后不显示任何warning,因此有时编译中会出现一些诸如数据转换之类的可忽略警告, -Wall: 显示编译后所有警告 -W: 显示警告,但是只是显示编译器认为的会 ...

  3. GCC编译警告选项总结

    一 前言 GCC有很多的编译选项,警告选项:指定头文件.库路径:优化选项.本文针整理一下GCC的警告选项,主要依据http://gcc.gnu.org/onlinedocs/gcc/Warning-O ...

  4. gcc编译 汇编 选项

    gcc生成main.out的步骤分解:<blockquote>main.c-----(-S 编译)-------->main.s-------(-c 汇编)------->ma ...

  5. GCC编译命令常用选项

    GCC是GUN Compiler Collection的简称,除编译程序外,还包含其他相关工具.GCC可将高级语言编写的源代码构建成计算机直接执行的二进制代码.GCC是Linux平台下最常用的编译程序 ...

  6. gcc 编译 + 选项【转】

    转自:http://blog.csdn.net/princess9/article/details/6567678 一般来说要现有项目中的编译选项,设置新的project的编译选项 编译器 就是将“高 ...

  7. gcc/g++ 命令的常用选项

    gcc/g++ 命令的常用选项使用g++编译CPP文件如果用gcc编译C++源文件时,加以下选项:-lstdc++,否则使用了C++操作的文件编译会出错.假如在程序中用到new delete操作,而不 ...

  8. 第七篇:gcc和arm-linux-gcc常用选项

    目录 一.gcc和arm-linux-gcc的常用选项 二.从.c文件到可执行文件过程 一.gcc和arm-linux-gcc的常用选项 常用选型 -v 查看gcc编译器的版本,显示gcc执行时的详细 ...

  9. GCC编译流程及常用编辑命令

    GCC 编译器在编译一个C语言程序时需要经过以下 4 步: 将C语言源程序预处理,生成.i文件. 预处理后的.i文件编译成为汇编语言,生成.s文件. 将汇编语言文件经过汇编,生成目标文件.o文件. 将 ...

随机推荐

  1. KKCapture 高清录像软

    KKCapture是一款免费的高清录像软件.支持各种游戏录制,桌面录制,播放视频录制,操作非常简单.   软件特点 [1]1. 支持所有游戏录制,包括网络游戏.网页游戏.单机游戏,以及所有3D游戏.2 ...

  2. HDU 4764 Stone(博弈)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4764 题目大意:Tang和Jiang玩石子游戏,给定n个石子,每次取[1,k]个石子,最先取完的人失败 ...

  3. [openMP] OpenMP在visual studio和mac上的配置

    今天弄了半天才弄好mac上的openmp,一方面智商下限,另一方面竟然发现网上也没有什么详细过程,特意把我的配置过程贴上来 多核编程可以认为是对多线程编程做了一定程度的抽象,提供一些简单的API,使得 ...

  4. 转载:【高并发简单解决方案 | 靠谱崔小拽 】redis队列缓存 + mysql 批量入库 + php离线整合

    需求背景:有个调用统计日志存储和统计需求,要求存储到mysql中:存储数据高峰能达到日均千万,瓶颈在于直接入库并发太高,可能会把mysql干垮. 问题分析 思考:应用网站架构的衍化过程中,应用最新的框 ...

  5. php QQ登录

    基本原理: 就是获取唯一的openid,此值只要与自己数据库表中的值对应,就说明是此用户, 没有,则说明是新用户,其实就是找对应关系,因为openid与QQ号是唯一对应关系 放置按钮: 如在首页 in ...

  6. Visual Assist安装、破解方法

    1.从各种渠道下载Visual Assist安装程序及破解补丁. 2.在路径(Win7):C:\Users\UserName\AppData\Local\Microsoft\VisualStudio\ ...

  7. CANVAS运用-对图片的压缩上传(仅针对移动浏览器)

    最近在移动端设计头像上传功能时,原本是以<input type="file">直接通过formData上传,然而实际使用情况是:对于过大的图片(高像素手机所拍摄的照片等 ...

  8. JSFunction-Javascript常用函数库

    最近正在整理书写常用的Javascript函数库,此函数库近期会持续更新 JSFunction 这里可以找到你经常想要使用的js函数,我正在努力完善它 希望它对你有所帮助 相信代码是优雅的舞者.--北 ...

  9. Yii通过控制台命令创建定时任务

    假设Yii项目路径为 /home/apps/ 1. 创建文件 /home/apps/protected/commands/crons.php <?php $yii = '/home/apps/f ...

  10. Python设计模式——装饰模式(Decorator)

    假如我们需要开发一个程序来展示一个人穿衣服的过程. #encoding=utf-8 __author__ = 'kevinlu1010@qq.com' class Person(): def __in ...