Linux--学习记录(3)

  • G++重要编译参数

    • -g(GDB调试)
      • -g选项告诉gcc产生能被GNU调试器GDB使用的调试信息,以调试程序
      • 编译带调试信息的可执行文件
      • g++ -g hello.c -o hello
    • 编译过程:
      • -E(预处理)
        • g++ -E hello.c -o hello.i
      • -S(编译)
        • g++ -S hello.i -o hello.s
      • -c(汇编)
        • g++ -c hello.s -o hello.o
      • 链接
        • g++ hello.o -o hello
    • -O[n]
      • 优化源代码
      • -O0:表示不做优化
      • -O1:为默认优化
      • -O2:除了完成-O1的优化之外,还进行一些额外的优化工作,如指令调整等(一般使用这个即可满足要求)
      • g++ -O2 hello.c -o hello
    • time
      • time ./hello 
        • 可以带引该可执行文件的执行时间
    • -l(指定库文件、-L(指定库文件路径)
      • 在/lib、/usr/lib及/usr/local/lib里的库直接-l参数就能链接
        • 例:链接glog库
          • g++ -lglog hello.c -o hello
      • 如果库文件没放在以上三个目录里,需要使用-L参数指定库文件所在目录
          • g++ -L/home/wangxianyue/hellolibfolder -lhello hello.c -o hello
    • -I(指定头文件搜索目录)
      • /usr/include一般是不用指定的,gcc知道去;但如果头文件不在这里,就需要使用-I参数进行指定了。
        • 例:头文件放在当前目录中
          • g++ -ImyInclude hello.c -o hello
    • -Wall(打印警告信息)
      • g++ -Wall hello.c -o hello
    • -w(关闭打印信息)
      • g++ -w hello.c -o hello
    • -std=c++11(设置编译标准)
      • g++ -std=c++11 hello.cpp -o hello
    • -o(指定输出文件名)
      • g++ hello.c -o  hello
    • -D(定义宏)
      • g++ -DDEBUG hello.c -o hello
  • g++命令行编译(命令实战)

    • -I命令(直接编译)
    • 生成库文件并编译
      • 1. 生成静态库(编译时链接)
        • 步骤1:先进入src目录下
        • 步骤2:先生成.o的汇编文件
        • 步骤3:生成静态库libSwap.a
        • 步骤4:回到上级目录
        • 步骤5:链接,生成可执行文件static_main(-l会自动省略lib及.a,故直接输入-lSwap即可)
        • 步骤6:运行static_main即可(./static_main)
      • 生成动态库(运行时链接)
        • 步骤1:进入src目录下
        • 步骤2:生成动态库libSwap.so
        • 步骤3:回到上级目录
        • 步骤4:链接,生成可执行文件dynamic_main
        • 步骤5:运行
      • 常用调试命令参数

        • GDB调试器:
          • 用来调试C/C++程序的功能强大的调试器,是linxu系统开发C/C++最常用的调试工具
          • 程序员可以使用GDB来跟踪程序中的错误,从而减少程序员的工作量
          • linxu开发C/C++一定要熟悉GDB
          • VScode是通过调用GDB调试器来实现C/C++的调试工作的
          • Windows系统中,常用的集成开发环境(IDE),如VS,VC等,他们内部已经嵌套了相应的调试器
        • GDB主要功能:
          • 设置断点(断点可以使条件表达式)
          • 使程序在指定的代码上暂停执行,便于观察
          • 单步执行程序,便于调试
          • 查看程序中变量值的变化
          • 动态改变程序的执行环境
          • 分析崩溃程序产生的core文件
        • 常用调试命令参数
          • 调试开始:执行gdb exefilename,进入gdb调试工具,其中exefilename为要调试的可执行文件名
          • 参数
            • help(h):查看命令帮助,具体命令查询在gdb中输入help + 命令
            • run(r):重新开始运行文件
            • start:单步执行,运行程序,停在第一行执行语句
            • list(l):查看源代码,(list n:从第n行开始查看代码;list 函数名:查看具体函数)
            • set:设置变量的值
            • next(n):单步调试(逐过程,函数直接执行)
            • step(s):单步调试(逐语句,跳入自定义函数内部执行)
            • backtrace(bt):查看函数的调用的栈帧和层级关系
            • frame(f):切换函数的栈帧
            • info(i):查看函数内部局部变量的数值
            • finish:结束当前函数,返回到函数调用点
            • continue(c):继续执行(跳到下一个断点)
            • print(p):打印值及地址
            • quit(q):退出调试
            • break+num(b):在第num行设置断点
            • info breakpoints:查看当前设置的所有断点
            • delete breakpoints num(d):删除第num个断点
            • display:追踪查看具体变量值
            • undisplay:取消追踪观察变量
            • watch:被设置观察点的变量发生修改时,打印显示
            • i watch:显示观察点
            • enable breakpoints:启用断点
            • disable breakpoints:禁用断点
            • x:查看内存
            • run argv[1]  argv[2]:调试时命令行传参
            • set follow-fork-mode child:#Makefile项目管理,选择跟踪父子进程(fork())
          • Tips:
            • 编译程序时,需要加上-g参数,之后才能进行gdb调试,gcc -g hello.c -o hello
            • 回车键,重复上一命令

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/285052.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHPStorm一站式配置

phpstorm安装好之后,先别急着编码。工欲善其事,必先利其器,配置好下面这些之后让编码事半功倍。 主题 Appearance & Behavior -> Appearance -> Theme 选中 [Light with Light Header] 亮色较为护眼 关闭更新 Appearance & …

数据分析思维导图

参考: https://zhuanlan.zhihu.com/p/567761684?utm_id0 1、数据分析步骤地图 2、数据分析基础知识地图 3、数据分析技术知识地图 4、数据分析业务流程 5、数据分析师能力体系 6、数据分析思路体系 7、电商数据分析核心主题 8、数据科学技能书知识地图 9、数据挖掘…

Postman教程总结-新建一个测试案例

1.创建一个文件夹;文件夹的名字最好用自己项目的名字命名方便使用和维护

SVN小白常见操作流程

SVN小白常见操作流程 一、什么是Subversion?二、TortoiseSVN客户端安装教程三、SVN 操作3.1 SVN Ckeckout(检出)3.2 Add(新增文件)3.3 SVN Commit(提交)3.4 SVN Update(更新操作)3.5SVN Delete(删除操作)3.6 SVN Revert to a revision(版本回溯)3.7 不同版本内容之间…

JAVA:深入探讨Java 8 Stream的强大功能与用法

1、简述 Java 8引入了Stream API,为处理集合数据提供了一种更为强大和灵活的方式。Stream是一种抽象的数据结构,它允许你以一种声明性的方式处理数据集合。与传统的集合操作不同,Stream并不是一个存储数据的数据结构,而是在源数据…

GCS轨迹优化算法:有效提升机器人在复杂环境下的行动能力

原创 | 文 BFT机器人 机器人要在迷宫中找到出路并非易事,试想我们让机器人穿越一个孩子的游戏室,散落在地板上的各种玩具和各类家具挡住了一些潜在的路径。这个混乱的”迷宫“要求机器人在不与任何障碍物相撞的情况下计算到达目的地的最优路径&#xff…

【C Primer Plus第六版 学习笔记】第十一章 字符串和字符串函数

有基础,进阶用,个人查漏补缺 puts()只显示字符串,而且自动在末尾加上换行符 字符串定义(字符串有字符串常量、char类型数组、指向char的指针) 字符串常量: 用双括号括起来,双引号中的字符和编译…

数据加密标准DES硬件实现(Modelsim)

数据加密标准DES硬件实现 本文内容摘要理论依据和设计内容仿真结果整体代码 本文内容摘要 本文设计并验证了DES的密钥扩展通路,分别采用Round Based方法和Pipeline方法两种方式设计并验证DES的明文通路 理论依据和设计内容 首先,要了解分组密码算法及DE…

react点击事件

使用事件对象传参 //按钮 <button onClick{thisClick}>点击事件</button> //方法 const thisClick (e) >{console.log(这里是点击结果,e)} 输出结果 传递自定义参数 //按钮 <button onClick{()>thisClick(参数)}>点击事件</button> //方法 c…

大数据Doris(三十八):Aggregate 和 Uniq 模型中的 ROLLUP

文章目录 Aggregate 和 Uniq 模型中的 ROLLUP 一、获得每个用户的总消费

云原生之深入解析Thanos在EKS多集群架构上存储多个集群Prometheus

一、前言 随着 HiredScore 的产品和客户群越来越大&#xff0c;已经开始向 Kubernetes 过渡并迅速采用它&#xff0c;它是我们重要的障碍之一&#xff0c;也可能是最大的监控基础设施。我们在使用 Prometheus / Grafana 堆栈进行监控方面有一些经验&#xff0c;了解到希望创建…

得帆信息创始人-张桐,受邀出席 BV百度风投AIGC主题论坛

近日&#xff0c;得帆信息创始人兼CEO张桐&#xff0c;作为百度风投被投代表企业创始人受邀出席“向未来&#xff0c;共成长” BV百度风投AIGC主题论坛。 与包括上海市徐汇区相关部门领导、百度集团相关事业部负责人及代表&#xff0c;以及来自国寿资本、中网投、麦顿投资的投资…