【学习笔记】Linux文件编译调试相关(问题未解决)

//-I意为include 指定头文件搜索路径 -l:告诉编译器链接时需要的库
gcc *.c -I /usr/include/fastdfs/ -I /usr/include/fastcommon/ -l fdfsclient//调试gcc -g -rdynamic main.c

如何解决 “ 段错误(吐核) ” ???
【线上排错】记一次Linux的“段错误(吐核)”排查步骤
Centos 开始Core调试
[Linux] 什么是 段错误(吐核)?
Linux环境下段错误的产生原因及调试方法小结

跟着视频操作,运行代码出现

[fish@localhost mytest]$ ./a.out
段错误(吐核)

参考了上述连接不断调试,并且反复校对代码和视频以及资料中的差别,无果
最后得到的调试信息是

(gdb) run
Starting program: /home/fish/mytest/./a.out 
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7874a4a in __GI__IO_str_overflow (fp=0x7fffffffd2c0, c=91) at strops.c:133
133         *fp->_IO_write_ptr++ = (unsigned char) c;

个人感觉是哪个地方的读写出了问题,导致内存访问溢出了之类的,但是没找到具体是哪个语句的调用出了问题。先记一下,后续有时间再调。要是有知道哪儿出问题的大佬,请不吝赐教!
对应调用出错位置代码:

(gdb) l
128               fp->_IO_write_end = fp->_IO_buf_end;
129             }
130         }
131     
132       if (!flush_only)
133         *fp->_IO_write_ptr++ = (unsigned char) c;
134       if (fp->_IO_write_ptr > fp->_IO_read_end)
135         fp->_IO_read_end = fp->_IO_write_ptr;
136       return c;
137     }
(gdb) l
138     libc_hidden_def (_IO_str_overflow)
139     
140     int
141     _IO_str_underflow (_IO_FILE *fp)
142     {
143       if (fp->_IO_write_ptr > fp->_IO_read_end)
144         fp->_IO_read_end = fp->_IO_write_ptr;
145       if ((fp->_flags & _IO_TIED_PUT_GET) && (fp->_flags & _IO_CURRENTLY_PUTTING))
146         {
147           fp->_flags &= ~_IO_CURRENTLY_PUTTING;

贴下源码:
main.c

#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include "fdfs_upload_file.h"int main(int argc,const char* argv[]){char fileID[1024] = {0};upload_file1("/etc/fdfs/client.conf","main.c",fileID);printf("fileID:%s\n",fileID);printf("==================\n");upload_file2("/etc/fdfs/client.conf","main.c",fileID,sizeof(fileID));printf("fileID:%s\n",fileID);return 0;
}

fdfs_upload_file.h

#ifndef _FDFS_UPLOAD_FILE_H
#define _FDFS_UPLOAD_FILE_Hint upload_file1(const char* confFile, const char* localFile, char* fileID);
int upload_file2(const char* confFile, const char* localFile, char* fileID, int bufLen);#endif

fdfs_upload_file.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/wait.h>
#include "fdfs_client.h"
#include "fdfs_upload_file.h"int upload_file1(const char* confFile,const char* localFile,char* fileID)
{char group_name[FDFS_GROUP_NAME_MAX_LEN + 1];ConnectionInfo *pTrackerServer;int result;int store_path_index;ConnectionInfo storageServer;if ((result=fdfs_client_init(confFile)) != 0){return result;}pTrackerServer = tracker_get_connection();if (pTrackerServer == NULL){fdfs_client_destroy();return errno != 0 ? errno : ECONNREFUSED;}*group_name = '\0';if ((result=tracker_query_storage_store(pTrackerServer, \&storageServer, group_name, &store_path_index)) != 0){fdfs_client_destroy();fprintf(stderr, "tracker_query_storage fail, " \"error no: %d, error info: %s\n", \result, STRERROR(result));return result;}result = storage_upload_by_filename1(pTrackerServer, \&storageServer, store_path_index, \localFile, NULL, \NULL, 0, group_name, fileID);if (result == 0){printf("%s\n", fileID);}else{fprintf(stderr, "upload file fail, " \"error no: %d, error info: %s\n", \result, STRERROR(result));}tracker_disconnect_server_ex(pTrackerServer, true);fdfs_client_destroy();return result;
}//多进程实现
int upload_file2(const char* confFile,const char* localFile,char* fileID,int bufLen){//创建管道int fd[2];int ret=pipe(fd);if(ret==-1){perror("pipe reeor");exit(0);}//创建子进程pid_t pid = fork();//如果是子进程if(pid==0){//3.标准输出重定向 -》管道的写端dup2(fd[1],STDOUT_FILENO);//4.关闭读端close(fd[0]);//5。执行execlp命令execlp("fdfs_upload_file","xxx",confFile, localFile, NULL);perror("execlp error");}else{//父进程,读管道//关闭写端close(fd[1]);read(fd[0],fileID,bufLen);//回收pcb-》子进程wait(NULL);}
}

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

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

相关文章

c语言基础篇A

A1.程序和程序设计语言 程序 程序算法数据结构程序设计方法语言工具和环境数据结构:数据的类型和数据的组织形式算法&#xff1a;对数据操作的方法和步骤 程序设计语言的种类 第一代语言&#xff1a;机器语言第二代语言&#xff1a;汇编语言第三代语言&#xff1a;高级语言…

coap:使用californium建立coap server和client的简单示例

【pom.xml】 <dependency><groupId>org.eclipse.californium</groupId><artifactId>californium-core</artifactId><version>2.0.0-M7</version> </dependency> <dependency><groupId>org.eclipse.californium&l…

zabbix-agent,zabbix_agentd和zabbix-agent2,zabbix_agent2的区别

所以带横杠- 的是应用程序名&#xff0c;比如zabbix-server和zabbix-agent 带下划线_ 的是应用程序所对应的进程名&#xff0c;zabbix_server和zabbix_agentd 从zabbix5版本开始&#xff0c;应用程序zabbix-agent分为zabbix-agent和zabbix-agent2&#xff0c;zabbix-agent2是…

【第13章】SpringBoot实战篇之项目部署

文章目录 前言一、准备1. 引入插件2. 打包3. 启动4. 后台启动 二、跳过测试模块三、外置配置文件1.引入插件2.忽略配置文件3. 外置配置文件 总结 前言 项目部署需要把项目部署到Linux服务器上&#xff0c;SpringBoot项目通过Maven打包即可快速生成可运行Jar包程序。 一、准备 …

Comfyui容器化部署与简介

目前使用 Stable Diffusion 进行创作的工具主要有两个&#xff1a;Stable Diffusion WebUI 和 ComfyUI。本文重点介绍ComfyUI的部署使用。 ComfyUI 可定制性很强&#xff0c;可以让创作者搞出各种新奇的玩意&#xff0c;通过工作流的方式&#xff0c;也可以实现更高的自动化水平…

Kimichat使用案例010:快速识别出图片中的表格保存到Excel

文章目录 一、介绍二、图片信息三、输入内容四、输出内容五、markdown提示词六、markdown输出一、介绍 如果有一张图片格式的表格,想要快速复制到Excel表格中,那么一般要借助于OCR工具。之前试过不少在线OCR工具,识别效果差强人意。其实,kimichat就可以非常好的完成这个任务…

文件怎么去重?5个技巧,教你删除重复文件!

一般来说&#xff0c;在处理大量文件时&#xff0c;你可能会遇到重复的类似文件。这些文件占据了电脑上不必要的磁盘空间&#xff0c;导致系统性能下降。而这些文件可以是不同类型的&#xff0c;如照片、视频、音频、存档、文档等。正因如此&#xff0c;您需要通过文件去重来删…

C语言----寻找100~999范围内的质数--素数

//寻找100~999之间的素数//#include <stdio.h> //#include <math.h> int isprime(int num) {if (num % 2 0)//排除偶数{return 0;}for (int j 3; j < sqrt(num); j 2)//从3开始,因为已经排除2了。2是最小的素数/*使用一个for循环来检查奇数因子&#xff0c;因…

iOS不改变frame,能写出一个位移动画

在iOS开发中&#xff0c;如果不想通过直接修改视图的frame属性来实现位移动画&#xff0c;有十多种方法&#xff0c;总结如下&#xff1a; 方法一&#xff1a;使用CABasicAnimation 可以使用Core Animation的CABasicAnimation类或UIView动画块来实现。下面分别展示这两种方法…

质量小议38 -- 60岁退休的由来

总是要有个标准&#xff0c;质量更是如些。 标准不是固定不变的&#xff0c;与时俱进。 关键词&#xff1a;当时的人均寿命&#xff1b;渐进式 60岁退休。 22大学毕业开始工作&#xff08;当然可能会更早&#xff09;&#xff0c;到60岁退休&#xff0c;要工作38年。 …

C++ 史上首次超越 C,跃至榜二

TIOBE 公布了 2024 年 6 月的编程语言排行榜。 C在本月的TIOBE指数中成功超越了C&#xff0c;成为新的第二名。它是一种被广泛应用于嵌入式系统、游戏开发和金融交易软件等领域的编程语言。这次的排名是C在TIOBE指数中的历史最高位&#xff0c;同时也是C语言的历史最低位。 T…

深入解析JVM内部结构及GC机制的实战应用

一、JVM内部结构概述 JVM&#xff08;jdk1.8&#xff09;的内部结构主要包括以下几个部分&#xff1a; 类加载子系统&#xff08;Class Loader Subsystem&#xff09;运行时数据区&#xff08;Runtime Data Area&#xff09;执行引擎&#xff08;Execution Engine&#xff09…

React+TS前台项目实战(二)-- 路由配置 + 组件懒加载 + Error Boundary使用

文章目录 前言一、路由配置和懒加载lazy的使用二、TS版本Error Boundary组件封装三、在layout组件中使用Suspense组件和错误边界组件总结 前言 本文将详细介绍项目中的页面路由配置和异步组件懒加载处理&#xff0c;以提高用户体验&#xff0c;实现过渡效果。 一、路由配置和懒…

(2024,自监督 ViT,全监督 ViT,损失可视化,MAE,RC-MAE,自蒸馏,EMA)可视化自监督 ViT 的损失景观

Visualizing the loss landscape of Self-supervised Vision Transformer 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0 摘要 2 基础&#xff1a;MAE 和 RC-MAE 3 损失景观 3.1 分…

QT C++(QT控件 QPushButton,QRadioButton,QCheckBox)

文章目录 1. QPushButton 普通按钮2. QRadioButton 单选按钮3. QCheckBox 复选按钮 1. QPushButton 普通按钮 QPushButton中的重要属性 text&#xff1a;按钮中的文本icon&#xff1a;按钮的图标iconSize&#xff1a;按钮中图标的尺寸shortCut&#xff1a;按钮对应的快捷键&a…

Unity3d使用3D WebView for Windows and macOS打开全景网页(720云)操作问题记录

问题描述 使用Unity3d内嵌网页的形式打开720云中的全景图这个功能&#xff0c;使用的是3D WebView for Windows and macOS插件&#xff0c;720云的全景图在浏览器上的操作是滑动鼠标滚轮推远/拉近全景图&#xff0c;鼠标左键拖拽网页可以旋转全景图内容。网页的打开过程是正常…

RK3588 Android13自定义一个按键实现长按短按

一、kernel修改 diff --git a/arch/arm64/boot/dts/rockchip/rk3588-nvr-demo.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-nvr-demo.dtsi index 5aae5c613825..4cc1223f9cbf 100755 --- a/arch/arm64/boot/dts/rockchip/rk3588-nvr-demo.dtsib/arch/arm64/boot/dts/rockchip…

IDEA创建Mybatis项目

IDEA创建Mybatis项目 第一步&#xff1a;创建库表 -- 创建数据库 create database mybatis_db;-- 使用数据库 use mybatis_db;-- 创建user表 CREATE TABLE user (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,password VARCHAR(50) NOT NULL,email VARC…

transformer中对于QKV的个人理解

目录 1、向量点乘 2、相似度计算举例 3、QKV分析 4、整体流程 (1) 首先从词向量到Q、K、V (2) 计算Q*&#xff08;K的转置&#xff09;&#xff0c;并归一化之后进行softmax (3) 使用刚得到的权重矩阵&#xff0c;与V相乘&#xff0c;计算加权求和。 5、多头注意力 上面…

记一次postgresql拼接函数string_agg() 和row_number() 使用

PG两个函数使用需求和简单介绍 需求背景介绍第一个需求背景是这样的需求升级一下接下来讲讲STRING_AGG()基本语法排序 然后我们再说说ROW_NUMBER()基本语法使用 row_number() over (partition by) 进行分组统计使用 row_num限定每组数量 需求背景介绍 第一个需求背景是这样的 …