返回顶部
首页 > 资讯 > 精选 >如何全面分析Fedora GCC程序
  • 773
分享到

如何全面分析Fedora GCC程序

2023-06-17 00:06:56 773人浏览 泡泡鱼
摘要

本篇文章给大家分享的是有关如何全面分析Fedora GCC程序,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在向大家详细介绍Fedora GCC之前,首先让大家了解下linux

本篇文章给大家分享的是有关如何全面分析Fedora GCC程序,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

在向大家详细介绍Fedora GCC之前,首先让大家了解下linux,然后全面介绍Fedora GCC。

命令:[root@localhost ~]# gcc -g Http2.c -o http2
得到调试信息:
[root@localhost ~]# gcc -g http2.c -o http2
http2.c: 在函数 ‘main’ 中:
http2.c:51: 警告:隐式声明与内建函数 ‘bzero’ 不兼容
http2.c:61: 警告:传递参数 2 (属于 ‘bind’)时在不兼容的指针类型间转换
http2.c:81: 警告:传递参数 2 (属于 ‘accept’)时在不兼容的指针类型间转换
http2.c: 在函数 ‘ParseHttpRequest’ 中:
http2.c:153: 警告:隐式声明与内建函数 ‘strstr’ 不兼容
http2.c:153: 警告:隐式声明与内建函数 ‘strlen’ 不兼容
http2.c:158: 警告:隐式声明与内建函数 ‘memset’ 不兼容
http2.c:159: 警告:隐式声明与内建函数 ‘memcpy’ 不兼容
http2.c: 在函数 ‘do_proxy’ 中:
http2.c:315: 警告:隐式声明与内建函数 ‘strcat’ 不兼容
http2.c:316: 警告:隐式声明与内建函数 ‘strlen’ 不兼容
[root@localhost ~]# ./http2正在监听[root@localhost ~]#

为了更快速地发现错误所在,可以使用GDB进行跟踪调试,方法如下:
[root@localhost ~]# gdb http2
GNU gdb Red Hat Linux (6.5-15.fc6rh)
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1".

当GDB提示符出现的时候,表明GDB已经做好准备进行调试了,现在可以通过run命令让程序开始在GDB的监控下运行:Starting program: /root/http2正在监听Program exited nORMally.

下面为搜到的信息,尚未实验当GDB提示符出现的时候,表明GDB已经做好准备进行调试了,现在可以通过run命令让程序开始在GDB的监控下运行:
Starting program: /home/xiaowp/thesis/gcc/code/crash
Input an integer:10
Program received signal SIGSEGV, Segmentation fault.
0x4008576b in _IO_vfscanf_internal () from /lib/libc.so.6

仔细分析一下GDB给出的输出结果不难看出,程序是由于段错误而导致异常中止的,说明内存操作出了问题,具体发生问题的地方是在调用
_IO_vfscanf_internal ( )的时候。为了得到更加有价值的信息,可以使用GDB提供的回溯跟踪命令backtrace,执行结果
如下:
#0 0x4008576b in _IO_vfscanf_internal () from /lib/libc.so.6
#1 0xbffff0c0 in ?? ()
#2 0x4008e0ba in scanf () from /lib/libc.so.6
#3 0x08048393 in main () at crash.c:11
#4 0x40042917 in __libc_start_main () from /lib/libc.so.6

跳过输出结果中的前面三行,从输出结果的第四行中不难看出,GDB已经将错误定位到crash.c中的第11行了。现在仔细检查一下:
frame 3 #3 0x08048393 in main () at crash.c:11 11 scanf("%d", input);

使用GDB提供的frame命令可以定位到发生错误的代码段,该命令后面跟着的数值可以在backtrace命令输出结果中的行首找到。现在已经发现错
误所在了,应该将scanf("%d", input);改为scanf("%d", &input);完成后就可以退出GDB了,命令如下:

GDB的功能远远不止如此,它还可以单步跟踪程序、检查内存变量和设置断点等。调试时可能会需要用到编译器产生的中间结果,这时可以使用-save-temps选项,让Fedora GCC将预处理代码、汇编代码和目标代码都作为文件保存起来。如果想检查生成的代码是否能够通过手工调整的办法来提高执行性能,在编译过程中生成的中间文件将会很有帮助,具体情况如下:

# Fedora GCC -save-temps foo.c -o foo
# ls foo*
foo foo.c foo.i foo.s

Fedora GCC 支持的其它调试选项还包括-p和-pg,它们会将剖析(Profiling)信息加入到最终生成的二进制代码中。剖析信息对于找出程序的性能瓶颈很有帮助,是协助Linux Fedora GCC程序员开发出高性能程序的有力工具。在编译时加入-p选项会在生成的代码中加入通用剖析工具(Prof)能够识别的统计信息,而- pg选项则生成只有GNU剖析工具(Gprof)才能识别的统计信息。

提醒一点,虽然Fedora GCC允许在优化的同时加入调试符号信息,但优化后的代码对于调试本身而言将是一个很大的挑战。代码在经过优化之后,在源程序中声明和使用的变量很可能不再使用,控制流也可能会突然跳转到意外的地方,循环语句有可能因为循环展开而变得到处都有,所有这些对调试来讲都将是一场噩梦。建议在调试的时候***不使用任何优化选项,只有当程序在最终发行的时候才考虑对其进行优化。

以上就是如何全面分析Fedora GCC程序,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: 如何全面分析Fedora GCC程序

本文链接: https://lsjlt.com/news/286292.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何全面分析Fedora GCC程序
    本篇文章给大家分享的是有关如何全面分析Fedora GCC程序,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在向大家详细介绍Fedora GCC之前,首先让大家了解下Linux...
    99+
    2023-06-17
  • 如何解析Fedora Core 6 GCC系统
    如何解析Fedora Core 6 GCC系统,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。这里将介绍Fedora Core 6 GCC问题的解决方法,把Linux系统管理...
    99+
    2023-06-16
  • shared_ptr线程安全性全面分析
    正如《STL源码剖析》所讲,“源码之前,了无秘密”。本文基于shared_ptr的源代码,提取了shared_ptr的类图和对象图,然后分析了shared_ptr如何保证文档所宣称的...
    99+
    2022-11-15
    shared_ptr 线程安全性
  • 如何进行Fedora 16的原理分析
    如何进行Fedora 16的原理分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、Fedora 16 主要特色Fedora 16,代号“Verne”,正式版本将于201...
    99+
    2023-06-16
  • Python协程原理全面分析
    目录序章生成器如何进化为协程用作协程的生成器的基本行为协程的四个状态示例-使用协程计算平均值预激协程的装饰器终止协程和异常处理获取协程返回值使用yield fromyield fro...
    99+
    2023-02-08
    Python协程 Python协程原理
  • 如何分享小程序页面
    微信小程序不支持分享到朋友圈,但可以分享给朋友或者群,步骤如下:首先,打开微信APP,选择进入一个小程序;在小程序页面中,点击右上角的三个点的按钮;最后,在弹出的对话框中,点击“发送给朋友”,选择需要分享的朋友或群聊即可。...
    99+
    2024-04-02
  • 如何分析VS2003程序问题
    本篇文章为大家展示了如何分析VS2003程序问题,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。希望我对VS 2003程序的一点经验能给大家带来帮助,导致WebDeployment出错的原因也许还有很...
    99+
    2023-06-17
  • 如何分析VS2005程序特点
    如何分析VS2005程序特点,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。昨天到今天搞了一整天的VS2005程序,我都快崩溃了! ,以后再也不能随便的关机了,因...
    99+
    2023-06-17
  • 如何进行python中类的全面分析
    本篇文章为大家展示了如何进行python中类的全面分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。面向对象重要的概念就是类(Class)和实例(Instance)...
    99+
    2024-04-02
  • 如何全面分析PHP的糟糕设计
    如何全面分析PHP的糟糕设计,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。PHP不仅使用起来尴尬, 还有要嘛我想要的不适合, 要嘛不是最令人满意, 要嘛违背我的...
    99+
    2023-06-17
  • Spring框架AOP面向切面编程原理全面分析
    目录1.什么是AOPAOP面向切面的优势AOP需要添加的依赖2.简述AOP工作运行原理动态创建的总结:3.使用Spring创建AOP测试类Spring.xml1.什么是AOP AOP...
    99+
    2024-04-02
  • 如何分析Java应用程序和Hibernate
    本篇文章为大家展示了如何分析Java应用程序和Hibernate,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Hibernate有很多值得学习的地方,这里我们主要介绍Java应用程序和Hiberna...
    99+
    2023-06-17
  • 如何分析小程序开发成本
    这篇文章的内容主要围绕如何分析小程序开发成本进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!  随着微信小程序掀起一阵阵小程序营销的热浪,吸引着各行业...
    99+
    2023-06-26
  • 如何在Fedora中安装和使用图形化用户界面应用程序
    在Fedora中安装和使用图形化用户界面应用程序非常简单。以下是一些步骤: 打开终端,使用以下命令更新系统软件包: sudo d...
    99+
    2024-04-02
  • 如何全面解析VB.NET语言
    这篇文章将为大家详细讲解有关如何全面解析VB.NET语言,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。VB.NET语言是微软公司推出的开发环境。是目前***的 Windows 平台应用程序开...
    99+
    2023-06-17
  • GoLang函数与面向接口编程全面分析讲解
    目录一、函数1. 函数的基本形式2. 递归函数3. 匿名函数4. 闭包5. 延迟调用defer6. 异常处理二、面向接口编程1. 接口的基本概念2. 接口的使用3. 接口的赋值4. ...
    99+
    2023-01-28
    Go函数 Go面向接口
  • 全面分析php开发做商城的流程
    随着互联网时代的到来,越来越多的商家选择网上开设自己的商城,以便更好地满足消费者的需求。而PHP语言,则是众多开发人员用来开发商城网站的首选语言。本文将为大家介绍PHP开发商城的流程,希望能够帮助初学PHP语言或者想要开发商城网站的开发人员...
    99+
    2023-05-14
  • Fedora驱动程序如何设置缺省的用户名
    这篇文章主要介绍Fedora驱动程序如何设置缺省的用户名,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!特别值得一提的是Fedora驱动程序有很多值得学习的地方,这里我们主要介绍Fedora驱动程序,包括介绍Fedor...
    99+
    2023-06-16
  • 小程序页面如何分享到微信群
    小程序页面分享到微信群的步骤:打开需要分享小程序。点击右上角的“···”。会弹出一些功能信息,选择“分享给朋友”。(注意:部分小程序不支持分享功能)选择群分享即可。...
    99+
    2024-04-02
  • 如何设置小程序页面可以分享
    设置小程序页面可以分享的方法:在页面的js文件中加入分享方法,如:“onShareAppMessage: function () {}”,这样即可实现分享功能,在onShareAppMessage方法中定义一个path属性可以转发指定的页面...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作