linux自用小手册

一、GDB常用命令

        想用gdb调试C或C++程序,编译时需要加-g选项,编译出的文件为debug状态(如果不加则是release状态),且不可以加-O选项进行优化。

命令简写解释
set args

设置程序传递的参数

例:./demo -v value -o a.out 传递了四个参数

breakb

设置断点

例:b 20  在20行打断点

runr开始运行程序(遇到断点停止)
nextn执行当前行语句(如果当前为函数调用,则不会进入函数内部)
 steps

进入函数内部执行一行语句

(如果为第三方库,进不去

printp

打印某个变量的值

例:p i    打印当前变量i的值

continuec

继续执行到下一个断点

set var

设置变量的值(针对已有变量)

假设程序中存在变量i

set var i=100   将变量i设置为100,然后继续调试

quitq退出gdb
backtracebt

查看函数调用栈

二、GDB调试core文件

        当执行一个程序时,可能会因为内存越界而崩溃。但此时没有错误信息,我们无法调试。通过生成的core文件,可以看到导致崩溃的具体代码。

        默认系统是不生成core文件的,可以通过以下命令打开

ulimit -c unlimited

        再运行后,即使崩溃,也会在当前目录生成core.XXX的文件。调试方式如下:

gdb core.XXX ./demo

        此时在gdb中会显示崩溃行的具体代码。

三、GDB调试正在运行的程序

        想调试正在运行的程序,需要通过以下命令找到程序的PID。

ps -ef | grep 运行程序名

         假设运行程序名为demo,PID为8854,那么通过以下命令可以调试(程序也会暂停):

gdb -p 8854 demo

四、静态库与动态库

        (注意:[ ]表示可选项,{ }表示必选项)

目的选项命令
链接.h文件-Ig++ main.cpp [ -I .h所在目录 ]
编译静态-c

g++ -c myKu.cpp -o libmyKu.a

(注意:动态库一般以.a作为尾缀,lib作为前缀)

编译动态-fPIC -shared

g++ -fPIC -shared myDKu.cpp -o libmyDKu.so

(注意:动态库一般以.so作为尾缀,lib作为前缀)

链接静态

-L

-l

g++ main.cpp [ -L 库所在路径 -l 库名称 ]

(注意:不是完整的库名,而是去掉前缀lib和尾缀.so或.a的库名)

链接动态

-L

-l

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库所在目录

(注意:以上语句是将动态库所在目录包含到库路径中)

g++ main.cpp [ -L 库所在路径 -l 库名称 ]

(注意:不是完整的库名,而是去掉前缀lib和尾缀.so或.a的库名)

 五、tmux开启多个窗口

首先使用tmux命令打开多行窗口,然后在以下选项中选择:

        1.按住Ctrl+B,再按 " 表示垂直开启另一个窗口

        2.按住Ctrl+B,再按 % 表示水平开启另一个窗口

(切换窗口Ctrl+B,再按方向键)(退出则输入exit)

六、时间

函数声明头文件解释
time_t time(0)#include<time.h>返回从1970年到现在的秒数
tm* localtime(time_t *)#include<time.h>

将一个time_t类型变量转换为tm结构体类型变量

(线程不安全)

localtime_r(time_t *, tm*)#include<time.h>

将一个time_t类型变量转换为tm结构体类型变量

(线程安全)

time_t mktime(tm *)#include<time.h>将一个tm结构体类型变量转换为time_t类型变量
int gettimeofday(timeval *, 0)#include<sys/time.h>

一般用于计算时间间隔

:timeval为一个结构体

有tv_sec和tv_usec两个成员

tv_sec表示秒

tv_usec表示微秒 (10^-6)

sleep(int n)#include<unistd.h>程序暂停n
usleep(int n)#include<unistd.h>程序暂停n微秒

 七、进程通信方式

7.1 管道

管道方式可以实现:通过一个读文件描述符来读取数据

                                通过一个写文件描述符写输入数据

int pipefd[2];// 0表示读,1表示写
int pipe(pipefd);

释放方式举例如下:

int pipefd[2];
pipe(pipefd);//读
char buf;
read(pipefd[0], &buf, 1);
close(pipefd[0]);//写
int val[10] = 666;
write(pipefd[1], val, 10);
close(pipefd[1]);

7.2 共享内存

        创建共享内存,让两个进程同时操作其中数据。(需自己保证线程安全)

(ipcs 命令:查询共享内存)

7.2.1 shmget函数

shmget()函数用于获取/创建共享内存(如不存在,则创建)

int shmget(key_t key, size_t size, int shumflg);
//例:int shmid = shmget(0x5678, sizeof(共享内存类型), 0777 | IPC_CREAT);

返回值int:成功返回共享区的id,不成功返回-1

key:共享内存唯一标识,一般为十六进制,比如:0x5678

size:共享内存的大小,单位为字节

shmflg:共享内存的权限,八进制数,比如:0777 | IPC_CREAT

                IPC_CREAT 表示 如果不存在,则创建共享内存。

                (当获取时,shmflg会被忽略

7.2.2 shmat函数

shmat()函数用于连接共享内存

共享区数据类型指针 shmat(int shmid, 0, 0);
//例:Person* p = (Person *)shmat(int shmid, 0, 0);

返回值:共享内存的指针

shmid:共享内存的id

(第二个、第三个参数一般为0)

7.2.3 shmdt函数

shmdt()函数用于分离共享内存

int shmdt(共享内存指针);
//例:shmdt(p);

返回值:0表示分离成功,-1表示分离失败

7.2.4 shmctl函数

shmctl()函数用于删除共享内存

int shmctl(共享内存地址, IPC_RMID, 0);
//例:shmctl(0x5678, IPC_RMID, 0);

 返回值:0表示删除成功,-1表示删除失败

7.3 循环队列

        进程间基于循环队列的通信方式,就是将多个共享内存区域放入循环队列进行管理。

7.4 信号量

        包含头文件#include<semaphore.h>,在编译时,加上-pthread选项

函数解释
创建

(sem_t t)

sem_init(sem_t* tp, int pshared, int value)

tp为信号量指针

pshared为0表示线程共享

             为1表示进程共享

value是信号量初始值

P操作sem_wait(sem_t* tp)

信号量减1

当信号量等于0时,阻塞,直到信号量大于0

V操作sem_post(sem_t* tp)

信号量加1

任何时候都不阻塞

销毁sem_destroy(sem_t* tp)使用完毕,及时销毁

八、同步与互斥

8.1 同步

        同步是多个线程或进程按照预期顺序来依次执行。(生产者-消费者)

8.2 互斥

        互斥是同一时刻,多个线程或进程只能有一个访问共享区域。(写问题)

8.3 区别

        他们关注的重点不同。

同步关注的是:多个线程或进程的执行顺序

互斥关注的是:多个线程或进程的操作彼此独立,互不影响。

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

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

相关文章

PCL 计算点云OBB包围盒(PCA)

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 计算协方差矩阵和质心 2.1.2 计算特征值和特征向量 2.1.3 构建包围盒并可视化 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与…

Renesas R7FA8D1BH (Cortex®-M85)的PWM控制小车

目录 概述 1 软硬件 1.1 软硬件环境信息 1.2 开发板信息 1.3 调试器信息 2 硬件架构 2.1 硬件框架结构 2.2 小车控制原理 3 软件功能实现 3.1 FSP配置参数 3.2 代码实现 3.3 源代码文件 源代码下载地址&#xff1a; https://www.firebbs.cn/forum.php?modviewthre…

社工字典生成工具 —— CeWL 使用手册

GitHub - digininja/CeWL: CeWL is a Custom Word List GeneratorCeWL is a Custom Word List Generator. Contribute to digininja/CeWL development by creating an account on GitHub.https://github.com/digininja/CeWL/ 0x01&#xff1a;CeWL 简介 CeWL&#xff08;Cust…

MySQL 联合索引底层存储结构及索引查找过程解读

前言 大家好&#xff0c;我是 Lorin &#xff0c;联合索引&#xff08;Composite Index&#xff09;又称复合索引&#xff0c;它包括两个或更多列。与单列索引不同&#xff0c;联合索引可以覆盖多个列&#xff0c;这有助于加速复杂查询和过滤条件的检索。联合索引的列顺序非常…

从零开始学cv-17:图像绘制基本图形

文章目录 前言一、绘制直线与箭头二、绘制矩形三、绘制圆形椭圆形 前言 随着计算机视觉技术的不断发展&#xff0c;OpenCV作为一款强大的开源图像处理库&#xff0c;受到了越来越多开发者的喜爱。本文将带领读者走进OpenCV的世界&#xff0c;从基础入手&#xff0c;详细介绍如…

冷热数据分离

优质博文&#xff1a;IT-BLOG-CN 一、背景 随着机票业务的快速发展&#xff0c;订单量持续增长对业务性能带来影响&#xff0c;需要进行冷热数据分离。目前机票订单模块主要使用Mysql(InnoDB)作为数据库存储&#xff0c;历史订单信息状态修改频率低并占用大量数据库存储空间&…

腾讯IM SDK:TUIKit发送多张图片

一、问题描述 在使用腾讯IM DEMO&#xff08;https://github.com/TencentCloud/chat-uikit-vue.git&#xff09;时发现其只支持发送一张图片&#xff1a; 二、解决方案 // src\TUIKit\components\TUIChat\message-input-toolbar\image-upload\index.vue<inputref"inp…

AcWing 802. 区间和(离散化算法,python)

本篇博客详细讲解一下离散化知识点&#xff0c;通过讲解和详细列题带大家掌握离散化。 题目&#xff1a; 原题链接&#xff1a;https://www.acwing.com/problem/content/description/804/ 假定有一个无限长的数轴&#xff0c;数轴上每个坐标上的数都是 0。 现在&#xff0c;…

记一次pyc逆向

.py文件   源代码文件。   这是开发者编写的 Python 源代码文件&#xff0c;包含了可执行的 Python 代码。 .pyc文件   字节码文件。   Python 源文件&#xff08;.py&#xff09;在执行时会被编译为字节码&#xff0c;并存储在 __pycache__ 目录下&#xff0c;文件名通…

PHP变量(第④篇)

本栏目教学是php零基础到精通&#xff0c;如果你还没有安装php开发工具请查看下方链接&#xff1a; Vscode、小皮面板安装-CSDN博客 今天来讲一讲php中的变量&#xff0c;变量是用于存储信息的"容器"&#xff0c;这些数据可以在程序执行期间被修改&#xff08;即其…

解决Nginx出现“Too many open files”的问题

解决Nginx出现“Too many open files”的问题 在那个不经意的瞬间&#xff0c;我感到一阵莫名的恍惚。同事突然提出要看我的手机&#xff0c;她的目光落在了我那泛黄的手机壳上。出乎意料地&#xff0c;她开始细心地擦拭&#xff0c;从内到外&#xff0c;动作轻柔而专注。那一刻…

Linux——磁盘分区、挂载

Linux 分区 原理介绍 原理图如下 当我们在/home目录下新建一个文件a.txt时&#xff0c;该文件实际上是存放在硬盘B的分区1中的&#xff0c;这就是图里说的&#xff0c;当进入某个目录&#xff0c;可以进入到该目录下挂载的分区里的意思 硬盘说明 应用实例&#xff1a;挂载一个…

【Flask】Flask数据库

【Flask】Flask数据库 1.概述2.使用Flask-SQLAlchemy管理数据库3.定义模型4.关系5.数据库操作创建表插入行修改行删除行查询行 1.概述 大多数的数据库引擎都有对应的 Python 包&#xff0c;包括开源包和商业包。Flask 并不限制你使用何种类型的数据库包&#xff0c;因此可以根…

PhotoMaker部署文档

一、介绍 PhotoMaker&#xff1a;一种高效的、个性化的文本转图像生成方法&#xff0c;能通过堆叠 ID 嵌入自定义逼真的人类照片。相当于把一张人的照片特征提取出来&#xff0c;然后可以生成你想要的不同风格照片&#xff0c;如写真等等。 主要特点&#xff1a; 在几秒钟内…

前端登录页面验证码

首先&#xff0c;在el-form-item里有两个div&#xff0c;各占一半&#xff0c;左边填验证码&#xff0c;右边生成验证码 <el-form-item prop"code"><div style"display: flex " prop"code"><el-input placeholder"请输入验证…

小赢卡贷公益行:乡村振兴与多元公益并进

在金融科技的浪潮中&#xff0c;小赢卡贷不仅以其创新的金融产品和服务赢得了市场的广泛认可&#xff0c;更以其背后的公益之心&#xff0c;积极履行社会责任&#xff0c;传递着温暖与希望。小赢公益基金会&#xff0c;作为小赢卡贷社会责任的延伸&#xff0c;主要聚焦于乡村振…

Hi3061M开发板——系统时钟频率

这里写目录标题 前言MCU时钟介绍PLLCRG_ConfigPLL时钟配置另附完整系统时钟结构图 前言 Hi3061M使用过程中&#xff0c;AD和APT输出&#xff0c;都需要考虑到时钟频率&#xff0c;特别是APT&#xff0c;关系到PWM的输出频率。于是就研究了下相关的时钟。 MCU时钟介绍 MCU共有…

unix中如何申请进程调度的优先级

一、前言 unix系统中&#xff0c;进程的调度是由内核决定的。在一个系统中&#xff0c;进程的优先级越高&#xff0c;表示其在一定时间中占用cpu的时间越久。本文将介绍unix系统如何修改以及获取进程的优先级。 二、nice值 nice值是unix系统中用于表征进程优先级的一个参数。…

ssh -T git@github.com 出现异常

上传代码到github 私有仓库 步骤 1. 生成 SSH Key&#xff08;如果没有&#xff09; 打开终端并运行&#xff1a; bash 复制 ssh-keygen -t ed25519 -C "your_emailexample.com"按提示保存密钥文件和设置密码短语&#xff08;可选&#xff09;。默认位置是 ~/.…

recyclerView(kotlin)

recyclerView的优点 使用viewHolderRecycledViewPool的方式复用资源&#xff0c;提高性能利用LayoutManager&#xff0c;可根据不同需求使用不同的布局&#xff0c;且可以方便使用对应布局提供的方法&#xff0c;如快速定位item等。RecyclerView 提供了一个 ItemAnimator 接口…