当前位置: 首页 > news >正文

【Linux】环境基础开发工具使用

一. 关于rzsz

       这个工具是用于 windows 机器和远端的 Linux 机器通过 XShell 传输文件的,安装完毕之后可以通过拖拽的方式将我呢见上传过去,但是我一般是用 xfit 来进行传输文件。

二. Linux编译器-gcc/g++使用

2.1 快速认识一下

gcc code.c -o mybin

三、gdb调试工具的使用

       说起调试,我们就需要了解一下发布软件一般有两种方式:debug(可以被调试)和release(不可以被调试)。

       最近,小编刚好也在实习。一般来说,一个企业在开发一个项目的时候,一般有以下几个步骤:立项,搭建团队&&排期计划,环境预准备&&流程说明。小编现在所做的任务就是写代码,自测,然后发布版本,给用户的版本是release版本的。

debug和release的区别:

  • debug形成的可执行程序会给我们添加了调试信息,内存大
  • release形成的可执行程序会给我们去掉调试信息,内存小

gcc/g++编译时是什么模式呢??

  • gcc/g++是release模式。
  • gcc的默认行为:
    • 默认是动态链接
    • 默认是release发布

如何让gcc/g++以debug发布??

mytest:test.c:gcc -o $@ $^ -g

可执行程序也是有自己的格式:ELF

readelf -S mytest-d | grep -i debug

3.1 windows基本的调试功能

  • 运行起来才能调试
  • 我们也要看到代码
  • 打断点
  • 局部调试
  • 看到局部变量的内容和地址
  • 看到调用栈
  • 单步
  • 进入函数
  • 逐语句/逐过程

3.2 gdb调试

3.2.1 背景

  • Linux gcc/g++出来的二进制程序,默认是release模式
  • 要使用gdb调试,必须在源代码生成二进制程序的时候加上 -g 选项 

3.2.2 开始使用

gdb binFile 退出:ctrl + d 或者 quit 调试命令

  • list/l 行号:显示 binFile 源代码,接着上次的位置往下显示,每次显示10行
  • list/l 函数名:列出某个函数的源代码
  • r/run:运行程序
  • n/next:单条执行(逐过程)
  • s/step:进入函数调用(逐语句)
  • break(b)行号:在某一行设置断点
  • break 函数名:在某一个函数开头设置断点
  • info break:查看断点信息
  • finish:执行到当前函数返回,然后停下来等待命令
  • print(p):打印表达式的值,通过表达式可以修改变量的值或者调用函数
  • p 变量名:打印变量的值
  • display 变量名:跟踪查看一个变量,每次停下来都显示他的值
  • undisplay 变量名:取消对先前设置的那些变量的跟踪
  • set var 变量名:修改变量的值
  • continue(或c):从当前位置开始连续而非单步执行程序
  • delete breakpoints:删除所有断点
  • delete breakpoints n:删除序号为n的断点
  • disable breakpoints:禁用断点
  • enable breakpoints:启用断点
  • breaktrace(或bt):查看各级函数的调用即参数

3.3 调试究竟在干什么

如果我们拿到一份代码,不懂代码的逻辑,调试是比较困难的!!!下面是调试的两个步骤:

  • 找到问题(查找,范围查找,局部逐行查找)
  • 解决问题(上下文代码)

四、自动化构建工具——make/Makefile

http://www.xdnf.cn/news/247879.html

相关文章:

  • 26.电流信号的强抗干扰能力运用
  • 深圳第三方软件测试机构如何填补企业空缺并助力市场发展?
  • LintCode第652题-递归版
  • Linux基础指令【下】
  • Leetcode刷题报告2——双指针法
  • 基于DrissionPage的高效爬虫开发:以小说网站数据抓取为例
  • vue自定义表头内容excel表格导出
  • LangChain4j +DeepSeek大模型应用开发——7 项目实战 创建硅谷小鹿
  • SpringAI使用OpenAI API格式调用DeepSeek服务
  • 《AIStarter安装部署全攻略:AI绘画/数字人项目快速上手指南(含Windows环境配置要点)》
  • *(解引用运算符)与 ++(自增运算符)的优先级
  • 开始一个vue项目
  • 《排序算法总结》
  • 60常用控件_QSpinBox的使用
  • [FPGA Video IP] Frame Buffer Read and Write
  • 一文读懂EMC VNX存储的Fast Cache(第二部分:对比)
  • 【RocketMQ】- 源码系列目录
  • 实习入职的总结
  • 前端八股 CSS 1
  • Chromium 134 编译指南 - Android 篇:从Linux版切换到Android版(六)
  • 2025智能体的发展趋势
  • 深⼊理解指针(8)
  • 简单的Qwen3的本地部署、分析与常见报错
  • Cribl 数据脱敏 更多方法 MASK (三)
  • 第十六届 -- 蓝桥杯Web开发大学组省赛个人复盘
  • ESP-ADF esp_dispatcher组件之audio_service子模块资源管理函数详解
  • RAGFlow上传3M是excel表格到知识库,提示上传的文件总大小过大
  • 基于Redis实现-附近商铺查询
  • UE实用地编插件Physical Layout Tool
  • MySQL | DQL语句-连接查询