gcc的调试调研——gdb

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

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

  优化编译时使用选项:

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

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

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

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

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

gcc的调试——gdb:

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

  gdb的常用命令:

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

    -g:

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

    -ggdb

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

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

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

  gdb主要提供的功能:

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

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

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

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

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

 

  

原文地址:https://www.cnblogs.com/cuckoo-/p/10740281.html

时间: 2024-11-03 23:44:32

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

【Linux学习笔记八】Linux编程-编译(gcc)与调试(gdb)

[注]文章中的所有截图均为centos下实验结果,亲测命令正确= ̄ω ̄= [参考资料]<Linux从入门到精通(第2版)>刘忆智 等编著 1.编译一个C程序 :以用vim写成的summary.c为例 $ gcc summary.c            ##编译文件,生成名为 a.out 的可执行文件      $ ./a.out            ##执行文件      $ gcc -o sum summary.c            ##为编译生成的可执行文件命名为sum      

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

在写程序的时候,经常会遇到一些问题,比如某些变量计算结果不是我们预期的那样,这时我们需要对程序进行调试.本文主要介绍调试C/C++在Linux操作系统下主要的调试工具. 在Linux下写程序,C/C++主要的编译器有GCC/G++,ICC等,像我等穷码农,最喜欢GCC了,很大原因是他免费!所以,我们以GCC/G++为例介绍主要的调试工具. 分以下几个内容介绍: 1.调试之前的工作 2.选择调试工具 3.调试步骤 点我,请帮我投一票! 调试之前的工作 编译器在编译阶段需要产生可供调试的代码,才能被

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

linux-c/c++调试利器gdb.ddd小试 原文链接: http://deepfuture.iteye.com/blog/749148 博客分类: C++/C/lisp CC++C#LinuxUbuntu 一.gdb,在shell窗口调试 main.c内容: main.c #include <stdio.h> int main() { int y=0; for (int i=0;i<10;i++){ y+=i; } return 0; } 深未来技术原创文章,如转载,请注明来源ht

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

http://www.cnblogs.com/xd502djj/archive/2012/08/30/2663960.html linux下的c/c++调试器gdb gdbLinux 包含了一个叫 gdb 的 GNU 调试程序. gdb 是一个用来调试 C 和 C++ 程序的强力调试器. 它使你能在程序运行时观察程序的内部结构和内存的使用情况. 以下是 gdb 所提供的一些功能: * 设置断点:* 监视程序变量的值:* 程序的单步执行:* 修改变量的值.       gdb支持下列语言C, C+

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 complete"这个消息,非常兴奋.终于有一个全面支持C++11语言特性的编译器了! 当然了,gcc仅仅是语言特性上全面支持C++11,libstdc++貌似还没有完全跟上,不过我已经挺满足了,至少可以去尝试各种特性了.另外,之前也有消息说Clang功能上也100%支持C++11了,但是内部还在做

调试利器GDB(上)

调试利器GDB(上) 1.1 GDB初识 1.1.1什么是GDB? GDB是GNU项目中的调试器(gnu debuger),能够跟尊程序的执行,也能恢复程序崩溃前的状态 1.1.2为什么需要GDB? 软件产品的研发过程必然伴随bug,调试时软件开发中不可或缺的技术(调试工具很重要) 1.1.3 DBG与binutils 1.2 GDB的常规使用 1.自定义程序得到启动方式(指定影响程序运行的参数)2.设置条件断点(在满足条件时程序暂停执行)3.回溯检查导致程序异常结束的原因(core dump)

调试利器GDB(下)

调试利器GDB(下) 2.1数据断点 GDB中支持数据断点的设置,watch命令用于监视变量是否被改变(本质为硬件断点)用法:watch var_name 2.2 GDB中的内存查看 GDB中可以查看任意内存区域中的数据,命令格式:x /Nuf expressionN -需要打印的单元数u -每个单元的大小f -打印数据的格式其数据格式如下: 2.3 GDB中的打印格式 实例:判断系统大小端 2.4函数调用栈查看 backtrace,查看函数调用的顺序(函数调用栈的信息)frame N 切换到栈

应用调试(二)GDB

title: 应用调试(二)GDBdate: 2019/1/17 21:00:10 toc: true 应用调试(二)GDB gdb下载工具安装交叉工具链设置GDB介绍编译GDBtarget/host/build编译主机GDB编译单板GDBserver调试程序CoreDumpGDB命令杂项附录源码 gdb下载 官网 这里我下载了gdb-7.6.tar.gz编译成功,下载了8.x的需要c++11,后来没有试了 里面的".sig"为文件名的分离签名文件,用来校验下载资源的完整性,.xz为另

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

今天为调试一段代码,使用gcc将程序用-g选项重新编译.但是使用gdb进行debug时,仍然出现“no debug symbols found”的错误.仔细检查了一下Makefile,原来后面定义的连接选项中指定了-s.gcc的文档中说明如下: -sRemove all symbol table and relocation information from the executable. 去掉-s后,可以用gdb进行调试了