Linux--学习记录(3)

news2024/9/30 9:37:49
  • 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.coloradmin.cn/o/1322782.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于springboot+vue 的智能物流管理系统

简介 基于springbootvue 的智能物流管理系统 适用于 设计,课程设计参考与学习用途。仅供学习参考。 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料 **项目编号:springboot074 ** **…

C++刷题 -- KMP算法

C刷题 – KMP算法 文章目录 C刷题 -- KMP算法1.算法讲解2.算法实现 https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string/description/ 1.算法讲解 KMP算法是一种字符串匹配算法,当出现字符串不匹配时,可以记录一部分之…

数据可视化---箱线图

类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统计学检验箱…

【MySQL】Sql优化之索引的使用方式(145)

索引分类 1.单值索引 单的意思就是单列的值,比如说有一张数据库表,表内有三个字段,分别是 id name numberNo,我给name 这个字段加一个索引,这就是单值索引,因为只有name 这一列是索引; 一个表…

k8s-ingress特性 9

TLS加密 创建证书 测试访问 auth认证 创建认证文件 rewrite重定向 进入域名时,会自动重定向到hostname.html 示例: 测试 版本的升级迭代,之前利用控制器进行滚动更新,在升级过程中无法做到快速回滚 更加平滑的升级&#xff1…

猫头虎带您探索StringUtils3之StringUtils.isEmpty()和StringUtils.isBlank()的区别 ‍

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

低代码汹涌澎湃,真的是风口?

“中国的下一个风口是什么?低代码?你赞同吗?” 可以肯定的是,企业想站上未来产业的风口,”数字化“是必经之路。而低代码是企业向制高点突进的手段。产业的风口,就是产业发展的趋势,只有尽力站上…

SQL面试题挑战01:打折日期交叉问题

目录 问题:SQL解答:第一种方式:第二种方式: 问题: 如下为某平台的商品促销数据,字段含义分别为品牌名称、打折开始日期、打折结束日期,现在要计算每个品牌的打折销售天数(注意其中的…

JNI 注册

一、 JNI 静态注册 ① 在 Android 的 Java 层定义方法 : 在 MainActivity 类中定义 如下 Native 方法 ; public native String stringFromJNI();② Native 方法实现 : 下面是一个 Native 方法实现的示例 ; extern "C" JNIEXPORT jstring JNICALL Java_kim_hsl_jni_…

VuePress安装及使用——使用 Markdown 创建你自己的博客网站和电子书

目录 前言一、依赖环境二、vuepress 安装和使用1.初始化2.将 VuePress 安装为本地依赖3. package.json 中添加脚本4. 新建 docs 文件夹5.启动6. 效果 三、进阶使用1.新增配置文件2.安装搜索插件3.config.js 中增加配置4.效果展示5.注意 四、使用主题1.安装2. 目录结构说明&…

fastjson反序列化 CVE-2017-18349

fastjson fastjson 是阿里巴巴开发的 java语言编写的高性能 JSON 库,用于将数据在 Json 和 Java Object之间相互转换。它没有用java的序列化机制,而是自定义了一套序列化机制。 提供两个主要接口: JSON.toJSONString 和 JSON.parseObject/JSON.parse 分别实现序列化…

双指针——找到字符串中的所有字母异位词

https://leetcode.cn/problems/find-all-anagrams-in-a-string/description/?envTypestudy-plan-v2&envIdtop-100-liked 双指针,每次都统计出来p长度的滑动窗口里的数字,拿Arrays.equals进行对比,然后滑动一小格,减1加1继续比对即可。 class Solut…

AngularJS

理解实现代码的逻辑为主要,代码怎么写为次要。 参考资料: 《AngularJS入门与进阶》,江荣波著 前端开发常用框架 React:由Facebook开发,用于构建用户界面的JavaScript库,以组件化和虚拟DOM著称。 Angular&…

Github项目推荐-30天Python教程

项目地址 GitHub - Asabeneh/30-Days-Of-Python 项目简述 这是一个非常棒的python入门教程,图文并茂,讲解清晰,十分值得推荐。 项目截图

在 Kubernetes 上部署 Python 3.7、Chrome 和 Chromedriver(版本 114.0.5735.90)的完整指南

一、构建基础镜像 docker build -f /u01/isi/DockerFile . -t thinking_code.com/xhh/crawler_base_image:v1.0.2docker push thinking_code.com/xhh/crawler_base_image:v1.0.2 二、K8s运行Pod 三、DockerFile文件 # 基于镜像基础 FROM python:3.7# 设置代码文件夹工作目录…

删除win10服务

之前工作需要在我电脑上安装了一个天气的服务,我想删掉但是在任务管理器里删不掉,请教了大佬 删除方法是,在开始菜单里找到命令提示符 右键-以管理员方式打开命令提示符 输入sc 按enter键,可以查看一些操作命令 删除服务的话&a…

利用虚继承解决菱形继承(钻石继承)的问题 学习笔记

菱形继承概念: 两个派生类继承同一个基类 又有某个类同时继承两个派生类 这种继承又被称为菱形继承,或者钻石继承 定义一个基类Animal,两个派生类Sheep、Camal,SheepCame继承于两个派生类 class Animal { public:int m_Age; }…

java-sec-code中命令注入

java-sec-code中命令注入 不安全的写法(由于我这里使用的是idea搭建的环境,原本命令执行的sh -c 无法运行,后续的输出也会产生乱码,修改部分代码,以便能更好的显示出效果,linux下使用docker木有问题) //需要导入的库文…

物流项目话术(1.5w字精选)

物流项目的分类 技术架构图(面试时面试官会要求你画出技术架构图) 功能结构图 业务功能流程 流程说明: 用户在【用户端】下单后,生成订单 系统会根据订单生成【取件任务】,快递员上门取件后成功后生成【运单】 用户对…

【leetcode203】移除链表元素【Java代码讲解】

12.18 移除链表元素 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出:[1,2,3,4,5]示例 2&#xff…