首先来介绍一下gcc的选项:

其他选项都为常用编译选项,在这里介绍一下优化功能:

  优化编译时使用选项:

    -O:可以告诉gcc同时减小代码的长度和执行时间,其效果等价于-O1,在这一级别上能够进行的优化类型虽然取决于目标处理器,但一般都会包括线程跳转和延迟退栈两种优化。

    -O2:可以告诉gcc除了完成所有-O1级别的优化之外,同时还要进行一些额外的调整工作,如处理器指令调度等。

    -O3:可以告诉gcc除了完成-O2所有级别优化外,话包括循环展开和其他一些与处理器特性相关的优化工作。

    通常来说:数字优化的等级越高,同时也就意味着程序的运行速度越快,-O2一般是一个比较理想的选项,它在优化长度,编译时间和代码大小之间,取得了一个比较理想的平衡点。

    注意:使用优化的时候一定注意程序中防止编译器过度优化代码,过度的优化代码时,和会出现一些逻辑上的问题。

gcc的调试——gdb:

  gcc在编译时不会将调试符号插入到生成的二进制代码中,因为这样会增加可执行文件的大小。

  gdb的常用命令:

      回车键:执行上一次命令。

       info break:查看断点信息。

       finish:退出函数

  为什么调试的时候需要编译选项中添加 -g ?

    -g:

    该选项可以利用操作系统的“原生格式(native format)”生成调试信息。GDB 可以直接利用这个信息,其它调试器也可以使用这个调试信息,

    如果没有-g,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址

    -ggdb

    使 GCC 为 GDB 生成专用的更为丰富的调试信息,但是,此时就不能用其他的调试器来进行调试了 (如 ddx)

  使用gdb调试的时候需要在编译的时候加入命令符:-g

    • gcc  -g main.c -o main
    • 这样才能生成一个可以调试的可执行文件main
    • 接下来输入调试命令:
    • gdb mian
    • 进入gdb调试中,输入命令:run 运行起来
    • 之后就会提示你相应的错误。
    • (还可以使用其他命令,如:break,给程序打断点;print,查看具体的变量值等等)

  gdb主要提供的功能:

    设置断点(断点可以是条件表达),使程序在指定的代码行上暂停执行,便于调试;

    单步执行程序,便于观察;

    查看程序中变量值的变化;

    动态改变程序的执行环境;

    分析崩溃程序产生的core文件;

 

  

gcc的调试调研——gdb的更多相关文章

  1. [转] linux下的c/c++调试器gdb

    PS:1. 断点C++类函数,用b 命名空间::类名::方法名 2. 编译参数一定要加-g,才可断点调试 http://www.cnblogs.com/xd502djj/archive/2012/08 ...

  2. linux-c/c++调试利器gdb、ddd小试

    linux-c/c++调试利器gdb.ddd小试 原文链接: http://deepfuture.iteye.com/blog/749148 博客分类: C++/C/lisp CC++C#LinuxU ...

  3. linux下的c/c++调试器gdb

    Reference:  http://www.cnblogs.com/xd502djj/archive/2012/08/30/2663960.html linux下的c/c++调试器gdb gdbLi ...

  4. 应用调试(二)GDB

    title: 应用调试(二)GDBdate: 2019/1/17 21:00:10 toc: true 应用调试(二)GDB gdb下载工具安装交叉工具链设置GDB介绍编译GDBtarget/host ...

  5. CentOS 6.4中升级编译安装GCC 4.8.1 + GDB 7.6.1 + Eclipse 以及Kdump配置

    在CentOS 6.4中编译安装GCC 4.8.1 + GDB 7.6.1 + Eclipse 今天在isocpp上看到"GCC 4.8.1 released, C++11 feature ...

  6. Linux下C/C++程序调试基础(GCC,G++,GDB,CGDB,DDD)

    在写程序的时候,经常会遇到一些问题,比如某些变量计算结果不是我们预期的那样,这时我们需要对程序进行调试.本文主要介绍调试C/C++在Linux操作系统下主要的调试工具. 在Linux下写程序,C/C+ ...

  7. 使用gcc -g编译,gdb调试时仍然存在“no debug symbols found”的错误

    今天为调试一段代码,使用gcc将程序用-g选项重新编译.但是使用gdb进行debug时,仍然出现“no debug symbols found”的错误.仔细检查了一下Makefile,原来后面定义的连 ...

  8. GCC编译UDF和gdb调试UDF

    Fluent版本:19.0 前面我们介绍过使用VS来编译和调试UDF,其实我们也可以用GCC来编译UDF.gdb调试UDF.本次介绍的方法更具有通用性,也适用于Linux下Fluent的UDF编译和调 ...

  9. <转载>linux gcc编译器中使用gdb单步调试程序,程序不是顺序执行的。

    原文地址http://blog.csdn.net/abc78400123/article/details/6779108 在用gdb调试,使用s 或n单步执行程序时,发现程序不是按顺序运行的,有时莫名 ...

随机推荐

  1. linux创建新用户,可以使用sudo无密码操作

    useradd -d /home/aiuap -m aiuappasswd aiuapXXXXXXXgroupadd aiuapchown -R aiuap:aiuap /home/aiuap chm ...

  2. Android 问题列表

    25. Touch 事件传递机制 26. 点击事件设置监听的几种方式 27. Hander 的原理 28. Thread 和HandThread 的区别 29. AsyncTask 简介 30. As ...

  3. Visual C++没事别启用/Za编译选项

    Visual C++对于C++标准的支持不是很完善好像是钦定了的.MS还特意在这里说了些非标准行为[1]以及扩展行为[2].这就不可避免地会让处女座程序猿感到难受(我不是处女座).所以,经过一番goo ...

  4. FBV和CBV装饰器

    FBV装饰器: def cook(request): err_msg="" if request.method == "GET": return render( ...

  5. netstat和net命令粗谈

    网络连接查看命令netstat netstat -a 查看开启了哪些端口,常用netstat -an netstat -n 查看端口的网络连接情况,常用netstat -an netstat -v 查 ...

  6. 未能加载文件或程序集“BLL”或它的某一个依赖项。生成此程序集的运行时比当前加载的运行时新,无法加载此程序集。

    今天使用VS2012创建项目的时候,考虑到项目中代码的重用性以及清晰简洁性,搭建了一个三层架构,但是在项目运行的时候,总是报错: “未能加载文件或程序集“BLL”或它的某一个依赖项.生成此程序集的运行 ...

  7. TCP长连接与短连接、心跳机制

    1. TCP连接 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接,当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接,连接的建立是需要三次 ...

  8. git特殊命令

    1.git追踪远程分支,该命令使用Tab不会自动补全 git branch --set-upstream-to=远程分支名(origin/xxx) 2.从远程分支创建本地新分支 git checkou ...

  9. 【软件安装与环境配置】TX2安装配置caffe过程

    Tx2刷机 sudo sh ./caffe_dependency.sh 注意python的版本问题. 问题 LD -o .build_release/lib/libcaffe.so. /usr/bin ...

  10. sublime快捷键使用

    sublime常用快捷键 自己觉得比较实用的sublime快捷键有: Ctrl+/..................注释 Ctrl+滚动..................字体变大.缩小 Ctrl+ ...