linux复习5:C prog

news2024/11/21 18:46:50

编辑

缩排

为了使C源代码更加整洁易读,可以使用一些工具来自动格式化代码,例如cb(C程序美化器)、bcpp(C++美化器)和indent等。

编译

编译并链接C文件

gcc hello.c -o hello

将 hello.c 编译并链接成可执行文件 hello

指定输出文件名

gcc -o hello hello.c

与上一条命令相同,明确指定了输出文件名为 hello

预处理

gcc -E hello.c -o hello.i

只进行预处理阶段,生成预处理后的文件 hello.i

生成汇编代码

gcc -S hello.i -o hello.s

将预处理后的文件 hello.i 编译成汇编代码文件 hello.s

生成目标文件

gcc -c hello.s -o hello.o

将汇编代码文件 hello.s 汇编成目标文件 hello.o

链接目标文件

gcc hello.o -o hello

将目标文件 hello.o 链接成最终的可执行文件 hello

指定输入文件类型

gcc -xc hello.tom

强制将 hello.tom 作为C语言源文件处理。-xc 选项告诉 gcc 将输入文件视为C语言源文件,即使其扩展名不是 .c

  1. -w
    关闭所有的警告信息。这对于忽略所有警告并专注于错误信息的情况非常有用,但通常不推荐这样做,因为警告往往能帮助发现潜在的问题。

  2. -Wall
    打开许多常见的警告信息,但并不是所有的警告。这是最常用的选项之一,因为它能够捕获大多数常见的编程错误和不良实践。

  3. -Wno-
    可以后面接具体的警告名称来关闭特定的警告。例如,-Wno-unused 会关闭未使用的变量或函数的警告。

  4. -Wall -Wno-unused
    即使开启了 -Wall,也可以通过 -Wno-unused 来关闭未使用的变量或函数的警告。这样可以保持其他警告开启,同时忽略某些特定的警告。

  5. -Wall -Wno-implicit
    关闭隐式函数声明的警告。隐式函数声明是指没有显式声明就调用的函数,默认情况下 GCC 会发出警告,因为这可能导致类型不匹配的问题。

  6. -Wall -Werror
    将所有的警告当作错误处理。这意味着任何警告都会导致编译失败。这对于确保代码质量非常有用,特别是在持续集成环境中,可以强制开发者修复所有警告。

  7. -Wall -Wextra
    -Wall 的基础上增加更多的警告信息。-Wextra 会启用一些额外的警告,比如未初始化的变量等,这些警告在 -Wall 中是默认关闭的。


库文件

库文件是包含预编译代码的文件,这些代码可以被多个程序重复使用。库文件通常分为静态库和动态库两大类。

  1. 静态库

    • 静态库在编译阶段会被链接到目标代码中,成为可执行文件的一部分。这意味着每次创建可执行文件时,静态库中的代码都会被复制一份到最终的二进制文件中。
    • 静态库的扩展名通常是 .a(在Unix/Linux系统)或 .lib(在Windows系统)。
  2. 动态库

    • 动态库(也称为共享库)在程序运行时才被加载到内存中。多个使用相同动态库的程序可以共享内存中的同一份副本,这有助于节省系统资源。
    • 在Unix/Linux系统中,动态库的扩展名通常是 .so;而在Windows系统中,则是 .dll。

调试

编译源代码

gcc -g string-debug.c -o a.out
  • -g 选项告诉 gcc 为生成的可执行文件添加调试信息。

  • -o a.out 指定输出文件名为 a.out

2. 启动 GDB 并加载可执行文件

gdb a.out

这会启动 GDB 并加载 a.out 可执行文件。

3. 装入被调试的可执行文件

file a.out

虽然你在启动 GDB 时已经指定了 a.out,但这个命令可以确保当前调试的是正确的文件。

4. 列出源代码

list

这会显示当前文件的前 10 行源代码。你可以使用 list n 来显示从第 n 行开始的代码。

5. 运行程序

run

这会启动程序并运行直到遇到断点或异常。

6. 查看调用栈

where

这会显示当前的调用栈,帮助你了解程序的执行路径。

7. 打印变量值

print string

这会显示 string 变量的当前值。

8. 设置断点

break string-debug.c:7

这会在 string-debug.c 文件的第 7 行设置一个断点。

9. 再次运行程序

run

这会重新启动程序,并在设置的断点处暂停。

10. 修改变量值

set variable string=(char*)malloc(100)

这会将 string 变量的值设置为通过 malloc 分配的 100 字节的内存地址。

11. 单步执行

next

这会执行下一行代码,但不会进入函数内部。如果你希望进入函数内部,可以使用 step 命令。

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

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

相关文章

uni-app快速入门(十)--常用内置组件(下)

本文介绍uni-app的textarea多行文本框组件、web-view组件、image图片组件、switch开关组件、audio音频组件、video视频组件。 一、textarea多行文本框组件 textarea组件在HTML 中相信大家非常熟悉,组件的官方介绍见: textarea | uni-app官网uni-app,un…

世界坐标系、相机坐标系、图像物理坐标系、像素平面坐标系

坐标系及其转换在计算机视觉领域占据核心地位。理解如何从一个坐标系转换到另一个坐标系,不仅是理论上的需要,也是实际应用中不可或缺的技能。 一、世界坐标系的定义 世界坐标系是一个全局的坐标系统,用于定义场景中物体的位置。在这个坐标…

机器学习笔记——聚类算法(Kmeans、GMM-使用EM优化)

本笔记介绍机器学习中常见的聚类算法(Kmeans、GMM-使用EM优化)。 文章目录 聚类K-Means工作原理特点 K-Medoids工作原理特点 Mini-Batch K-Means工作原理特点 K-Means(重要)工作原理特点 总结K的选值1. 肘部法则(Elbow…

浅议Flink中的通讯工具: Akka

在Flink中,各个组件之间需要频繁交换数据和控制信息。Flink选择了基于Actor模型的Akka框架作为通信基础。 Akka是什么 Actor模型 Actor模型是用于单个进程中并发的场景。 在Actor模型中: ActorSystem负责管理actor生命周期 将每个实体视为独立的 Ac…

如何在react中使用react-monaco-editor渲染出一个编辑器

一、效果展示 二、基于vite配置 1.首先安装react-monaco-editor和monaco-editor包 npm add react-monaco-editor npm i monaco-editor 2.其次创建一个单独的文件(此处是tsx、直接用app或者jsx也行) import { useState, useEffect } from react impo…

孙玲:从流水线工人到谷歌程序员

这是《开发者说》的第24期,本期我们邀请的开发者是孙玲,她出生于湖南娄底一个贫穷的农村家庭,2009年高考落榜,她去了深圳一家电子厂,在流水线上给电池喷码,每天12个小时轮班,月薪2300&#xff0…

kali搭建pikachu靶场

前言: 总所周知搭个网站需要有apachemysqlphp,Apache是一个开源的Web服务器软件, MySQL是一种关系型数据库管理系统(数据库),PHP是一种在服务器上执行的脚本语言 文章内容来自:【黑帽编程与攻…

android 使用MediaPlayer实现音乐播放--获取音乐数据

前面已经添加了权限&#xff0c;有权限后可以去数据库读取音乐文件&#xff0c;一般可以获取全部音乐、专辑、歌手、流派等。 1. 获取全部音乐数据 class MusicHelper {companion object {SuppressLint("Range")fun getMusic(context: Context): MutableList<Mu…

VMware Workstation 17.6.1

概述 目前 VMware Workstation Pro 发布了最新版 v17.6.1&#xff1a; 本月11号官宣&#xff1a;针对所有人免费提供&#xff0c;包括商业、教育和个人用户。 使用说明 软件安装 获取安装包后&#xff0c;双击默认安装即可&#xff1a; 一路单击下一步按钮&#xff1a; 等待…

Methode Electronics EDI 需求分析

Methode Electronics 是一家总部位于美国的全球性技术公司&#xff0c;专注于设计和制造用于多个行业的电子和电气组件&#xff0c;产品涵盖汽车、工业、电信、医疗设备以及消费电子等多个领域&#xff0c;提供创新的解决方案。 填写Methode_EDI_Parameters_Template Methode_…

uniapp自动注册机制:easycom

传统 Vue 项目中&#xff0c;我们需要注册、导入组件之后才能使用组件。 uniapp 框架提供了一种组件自动注册机制&#xff0c;只要你在 components 文件夹下新建的组件满足 /components/组件名/组件名.vue 的命名规范&#xff0c;就能直接使用。 注意&#xff1a;组件的文件夹…

【Vue】Vue3.0(二十六)Vue3.0中的作用域插槽

上篇文章 【Vue】Vue3.0&#xff08;二十五&#xff09;Vue3.0中的具名插槽 的概念和使用场景 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Vue专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年11月20日17点30分 文章目录 概念使用场景示…

C语言第14节:字符函数和字符串函数

1. 字符分类函数 C语言中有一系列的函数是专门做字符分类的&#xff0c;也就是一个字符是属于什么类型的字符的。这些函数的使用都需要包含一个头文件是<ctype.h> <ctype.h>头文件中的字符分类函数提供了一组用于检查单个字符特性的函数。这些函数接收一个字符&a…

IDEA怎么定位java类所用maven依赖版本及引用位置

在实际开发中&#xff0c;我们可能会遇到需要搞清楚代码所用依赖版本号及引用位置的场景&#xff0c;便于排查问题&#xff0c;怎么通过IDEA实现呢&#xff1f; 可以在IDEA中打开项目&#xff0c;右键点击maven的pom.xml文件&#xff0c;或者在maven窗口下选中项目&#xff0c;…

使用vscode+expo+Android夜神模拟器运行react-native项目

1.进入夜神模拟器安装路径下的bin目录 2.输入命令&#xff0c;连接Android Studio 启动夜神模拟器后&#xff0c; 打开安装目录的bin文件夹执行下面的命令&#xff0c;只需执行一次&#xff09; nox_adb.exe connect 127.0.0.1:62001adb connect 127.0.0.1:62001 3.运行项目…

IPv6 NDP 记录

NDP&#xff08;Neighbor Discovery Protocol&#xff0c;邻居发现协议&#xff09; 是 IPv6 的一个关键协议&#xff0c;它组合了 IPv4 中的 ARP、ICMP 路由器发现和 ICMP 重定向等协议&#xff0c;并对它们作出了改进。该协议使用 ICMPv6 协议实现&#xff0c;作为 IPv6 的基…

个人全栈开发微信小程序上线了(记日记)

个人开发的全栈项目&#xff0c;《每日记鸭》微信小程序上线了&#xff01; 主要是技术栈&#xff1a;uniapp,koa2,mongodb,langchian&#xff1b; 感兴趣的小伙伴可以来捧捧场&#xff01;

用源码编译虚幻引擎,并打包到安卓平台

用源码编译虚幻引擎&#xff0c;并打包到安卓平台 前往我的博客,获取更优的阅读体验 作业内容: 源码编译UE5.4构建C项目&#xff0c;简单设置打包到安卓平台 编译虚幻 5 前置内容 这里需要将 Epic 账号和 Github 账号绑定&#xff0c;然后加入 Epic 邀请的组织&#xff0c…

如何更改手机GPS定位

你是否曾想过更改手机GPS位置以保护隐私、玩游戏或访问受地理限制的内容&#xff1f;接下来我将向你展示如何使用 MagFone Location Changer 更改手机GPS 位置&#xff01;无论是在玩Pokmon GO游戏、发布社媒贴子&#xff0c;这种方法都快速、简单且有效。 第一步&#xff1a;下…

如何在 Ubuntu 上使用 Docker 部署 LibreOffice Online

简介 LibreOffice Online&#xff08;也称为Collabora Online&#xff09;是一个开源的在线办公套件&#xff0c;它提供了与LibreOffice桌面版相似的功能&#xff0c;但完全在云端运行。这意味着用户可以通过浏览器访问和编辑文档&#xff0c;而无需在本地计算机上安装任何软件…