![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux
文章平均质量分 84
Linux 编程
悟OO道
这个作者很懒,什么都没留下…
展开
-
2万字系统总结,帮你实现 Linux 命令自由
bshall linux转载 2023-03-10 15:22:52 · 127 阅读 · 0 评论 -
Makefile中的$@, $^, $< , $?, $%, $+, $*
makefile 依赖关系转载 2023-03-10 14:50:19 · 4558 阅读 · 0 评论 -
Makefile的静态模式%.o : %.c
makefile转载 2023-03-10 14:45:18 · 692 阅读 · 0 评论 -
makefile 参数和基本使用
makefile wildcard 模式匹配原创 2023-03-10 14:32:49 · 1552 阅读 · 0 评论 -
图解TCP、UDP,流量控制,拥塞控制。
TCP、UDP,流量控制,拥塞控制转载 2022-10-25 10:11:12 · 489 阅读 · 0 评论 -
u-boot使用实验(烧录和命令)
u-boot转载 2022-10-22 17:23:22 · 2281 阅读 · 0 评论 -
objdump命令的使用
linux objdump转载 2022-06-09 10:04:08 · 6720 阅读 · 1 评论 -
Linux c++ 性能分析工具gprof
程序分析工具不同于调试器,它只产生程序运行时某些函数的调用次数、执行时间等等宏观信息,而不是每条语句执行时的详细信息。Gprof是Linux下一个强有力的程序分析工具。对于C、Pascal或者Fortran77语言的程序,它能够以“日志”的形式记录程序运行时的统计信息:程序运行中各个函数消耗的时间和函数调用关系,以及每个函数被调用的次数等等。从而可以帮助程序员找出众多函数中耗时最多的函数,也可以帮助程序员分析程序的运行流程。相信这些功能对于分析开源代码的程序员来说,有着相当大的诱惑力。用gprof分..转载 2022-05-20 17:56:08 · 658 阅读 · 0 评论 -
不要在linux上启用net.ipv4.tcp_tw_recycle参数
tcp转载 2022-05-16 13:41:03 · 716 阅读 · 0 评论 -
RDTSC 获取时间
时间戳rdts转载 2022-05-16 10:39:18 · 761 阅读 · 0 评论 -
使用blktrace统计磁盘块I/O访问频率
如果我们想知道,在一段时间内,那一个磁盘块被读写的频率最高,怎么办? 我问这个问题是看到taobao kernel wiki上面有这么一段话,看了我十分心痒:通过对blktrace的输出结果进行分析,我们可以对特定时间段内发生的读、写操作的磁盘块进行I/O频次统计。结合通过将磁盘块I/O频度统计和page cache命中率统计相结合,就可以比较有效的判断服务器节点的cache使用效率。通过这套工具,CDN系统修正了一个固态硬盘上cache管理的缺陷,显著提高了I/O性能(详细信息) ...转载 2022-05-15 10:00:34 · 341 阅读 · 0 评论 -
实现动态库捕获异常信号并保存函数堆栈信息
signaltraceback转载 2022-05-14 10:27:11 · 718 阅读 · 0 评论 -
__attribute__((constructor))用法解析
__attribute__转载 2022-05-14 13:07:32 · 825 阅读 · 0 评论 -
linux下强大的ELF文件分析工具 -- readelf
From:ELF格式文件符号表全解析及readelf命令使用方法_yasi_xi的博客-CSDN博客readelf命令:http://man.linuxde.net/readelfELF文件格式解析:ELF文件格式解析 - 综合编程类其他综合 - 红黑联盟ELF文件格式解析:ELF文件格式解析_yunshouhu的博客-CSDN博客可执行文件(ELF)格式的理解------系列文章:可执行文件(ELF)格式的理解 - 深海的小鱼儿 - 博客园Linux内核分析——ELF文件格式分析:Li转载 2022-05-08 17:42:53 · 2205 阅读 · 0 评论 -
ELF文件格式
ELF文件格式前言 ELF文件的结构 ELF文件中各个字段的用途 ELF头(ELF Header) 段表(Section Header table) 符号表(Symbol Table)ELF文件类型 说明 实例 Relocatable File 可重定位文件 未链接之前的ELF文件,可用于链接可执行文件或静态链接库 Linux下的".o"文件,Windows下".obj"文件 Executable File 可执行文件 最终的可执行程序 如Li转载 2022-05-08 17:15:17 · 417 阅读 · 0 评论 -
linux下强大的ELF文件分析工具 -- nm
什么是nmnm命令是linux下自带的特定文件分析工具,一般用来检查分析二进制文件、库文件、可执行文件中的符号表,返回二进制文件中各段的信息。目标文件、库文件、可执行文件首先,提到这三种文件,我们不得不提的就是gcc的编译流程:预编译,编译,汇编,链接。 目标文件:常说的目标文件是我们的程序文件(.c/.cpp,.h)经过预编译,编译,汇编过程生成的二进制文件,不经过链接过程,编译生成指令为: gcc(g++) -c file.c(file.cpp) 将生成对应的file.o文件,.转载 2022-05-08 17:06:57 · 711 阅读 · 0 评论 -
linux下Segmentation Fault生成coredump文件进行gdb调试
1、在linux下运行程序出现段错误,如果程序不是很大还比较好找,但是如果程序很大,会比较难以定位;在linux下可以支持生成coredump文件,使用gdb来解析Segmentation Fault时发生了什么,可以比较方便的查看程序崩溃的位置;2、一般linux系统都是默认关闭coredump文件生成,需要执行命令打开;实际上就是配置生成coredump的文件大小,系统默认为0,即不产生coredump文件;ulimit -c unlimited3、编译源代码时makefile编译选项添..原创 2022-05-08 14:39:33 · 648 阅读 · 1 评论 -
linux下定位崩溃,backtrace + addr2line + maps
一、导读Backtrace中,一般都只有一些地址。但是利用addr2line这个工具,就可以找到对应的代码行。前提条件是可执行程序或者动态链接库编译的时候带-g选项。具体来说,分两种情况: 如果关注的一行backtrace位于一个可执行文件中,那么直接addr2line -e <executable> <address> 如果关注的backtrace位于一个动态链接库中,那么麻烦一些,因为动态链接库的基地址不是固定的。这个时候,首先要把进程的memory ma转载 2022-05-07 15:34:54 · 1997 阅读 · 0 评论 -
linux SIGSEGV 信号捕捉,保证发生段错误后程序不崩溃
在linux中编程的时候 有时候 try catch 可能满足不了我们的需求。因为碰到类似数组越界 ,非法内存访问之类的 ,这样的错误无法捕获。下面我们介绍一种使用捕获信号实现的异常 用来保证诸如段错误之类的错误发生时程序不会崩溃,而是跳过代码继续执行。首先我们来看看发生段错误之后系统的处理。发生段错误后系统会抛出 SIGSEGV 信号 ,之后 调用默认的信号处理函数 ,产生core文件 ,然后关闭程序 。那有没有一种办法可以保证程序不会死掉呢,当然是有的 。首先我们想到的是 截获改信号,调用自己的转载 2022-05-06 16:02:08 · 739 阅读 · 0 评论 -
segmentation fault 定位
我们在Linux下进行程序开发,如果程序代码不严谨,会经常遇到segmentation fault1报错,这种报错的结果就是程序会直接挂掉,很难在程序里一下子定位到问题代码。原因segmentation fault 就是经常说的内存泄露/溢出: 当一个进程执行一个无效的内存引用,或发生断错误时,会触发 SIGSEGV信号,内核默认的动作就是 终止该进程。这个最常见的就是,比如我们使用了 非法指针:1 #include <stdio.h>2 #include <s..转载 2022-05-06 15:49:15 · 1625 阅读 · 0 评论 -
Linux手册翻译——sigaction(2)
sigaction, rt_sigaction - 检查和修改信号的Action(这里的Action语义同signal(7)中的disposition)#include <signal.h> int sigaction(int signum, const struct sigaction *restrict act, struct sigaction *restrict oldact);sigaction() 系统调用转载 2022-05-06 14:13:01 · 953 阅读 · 0 评论 -
linux手册翻译——ucontext(3)
2021.06.22 13:42:47字数 213阅读 240ucontext—— 用户线程上下文Standard C Library (libc, -lc)#include <ucontext.h> /* Userlevel context. */typedef struct ucontext_t { unsigned long int __ctx(uc_flags); struct ucontext_t *uc_link; sta...原创 2022-05-06 14:08:06 · 185 阅读 · 0 评论 -
linux ucontext族函数的原理及使用
ucontext函数族这里的context族是偏向底层的,其实底层就是通过汇编来实现的,但是我们使用的时候就和平常使用变量和函数一样使用就行,因为大佬们已经将它们封装成C库里了的我们先来看看寄存器寄存器:寄存器是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果我们常用的寄存器是X86-64中的其中16个64位的寄存器,它们分别是%rax, %rbx, %rcx, %rdx, %esi, %edi, %rbp, %rsp%r8, %r9, %r10, %r11, %转载 2022-05-06 11:31:34 · 1305 阅读 · 0 评论 -
linux SIGSEGV 信号捕捉,保证发生段错误后程序不崩溃
在linux中编程的时候 有时候 try catch 可能满足不了我们的需求。因为碰到类似数组越界 ,非法内存访问之类的 ,这样的错误无法捕获。下面我们介绍一种使用捕获信号实现的异常 用来保证诸如段错误之类的错误发生时程序不会崩溃,而是跳过代码继续执行。首先我们来看看发生段错误之后系统的处理。发生段错误后系统会抛出 SIGSEGV 信号 ,之后 调用默认的信号处理函数 ,产生core文件 ,然后关闭程序 。那有没有一种办法可以保证程序不会死掉呢,当然是...转载 2022-05-05 10:17:46 · 2003 阅读 · 0 评论 -
通过coredump - 用backtrace和addr2line 查找异常函数栈
为什么不想要coredump?也许你会说,coredump很好啊,程序异常崩溃时候,coredump会提供程序的内存、堆栈、寄存器、函数栈等各种信息,是定位BUG的利器啊。的确,我也同意,coredump有诸多好处。但是有一种场景让我不得不放弃它 -如果程序运行时占用大量内存,异常崩溃时生成的coredump文件可能会非常非常大。比如,某个程序运行时占用20GB内存,当它异常时可能会生成40GB大小的core文件,而生成文件的写盘过程非常缓慢,这会严重影响系统的整体运行情况。可以假想,这个程序如果.转载 2022-05-06 13:41:25 · 850 阅读 · 0 评论 -
关于Segmentation fault (core dumped)几个简单问题
有的程序可以通过编译,但在运行时会出现Segment fault(段错误)。这通常都是指针错误引起的。但这不像编译错误一样会提示到文件一行,而是没有任何信息。一种办法是用gdb的step, 一步一步寻找。但要step一个上万行的代码让人难以想象。 我们还有更好的办法,这就是core file。如果想让系统在信号中断造成的错误时产生core文件, 我们需要在shell中按如下设置:#设置core大小为无限ulimit -c unlimited#设置文件大小为无限ulimi...转载 2022-05-05 10:49:10 · 890 阅读 · 0 评论 -
linux中sigaction函数详解
一、函数原型:sigaction函数的功能是检查或修改与指定信号相关联的处理动作(可同时两种操作)int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);signum参数指出要捕获的信号类型,act参数指定新的信号处理方式,oldact参数输出先前信号的处理方式(如果不为NULL的话)。二、 struct sigaction结构体介绍struct ...转载 2022-05-05 10:49:26 · 336 阅读 · 0 评论 -
Linux debug : addr2line追踪出错地址
调试zSeries上的Linux应用程序类似于调试其他体系结构上的Linux应用程序。对于有经验的Linux开发人员,最大的挑战是理解新的系统体系结构。对于刚接触Linux的大型机开发人员,掌握新的调试工具似乎是一项令人畏惧的任务。不要害怕。本文将提供一些有用的提示来帮助您入门。 学问来自实践,但是对于调试工具,在没有出现问题而迫使您去修复它们之前,“实践”是不会发生的。考虑到这点,下面将提供让您入门的“速成”指南。 User Debug 日志记录 调试一个崩溃的程序的第一步...转载 2022-05-04 14:47:56 · 2588 阅读 · 0 评论 -
Linux系统下程序异常如何优雅的退出
signal原创 2022-05-04 14:44:07 · 2234 阅读 · 0 评论 -
Linux下调试段错误的方法[Segmentation Fault]--GDB
1、段错误是什么? 段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址、访问了系统保护的内存地址、访问了只读的内存地址等等情况。A segmentation fault (often shortened to segfault) is a particular error condition that can occur during the operation of computer software. In short, a segmentat...转载 2022-05-04 14:22:24 · 602 阅读 · 0 评论 -
Linux下程序产生“段错误”的原因及其解决办法
Linux下程序产生“段错误”的原因及其解决办法产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址。一般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,它是一个48位的寄存器,其中的32位是保 存由它指向的gdt表,后13位保存相应于gdt的下标,最后3位包括了程序是否在内存中以及程序在cpu中的运行级别,指向的gdt是以64位为一个单 位的表,在这张表中就保存...转载 2022-05-04 14:14:03 · 6094 阅读 · 0 评论 -
Linux下程序产生“段错误”的原因及其解决办法
Linux下程序产生“段错误”的原因及其解决办法参考原文:Linux下运行C++程序产生“段错误”的原因及其解决办法_lxjames833539的博客-CSDN博客_c++ 段错误 产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址。 一 般来说,段错误就是指访问的内存超出了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,它是一个48位的寄存器,其中的32位是保 存由它指向的gdt表,后13位...转载 2022-05-04 14:28:00 · 2377 阅读 · 0 评论 -
LINUX C/C++捕获段错误,打印出错的具体位置(精确到哪一行)
segment fail转载 2022-05-04 14:29:35 · 1050 阅读 · 0 评论 -
C/C++中的段错误(Segmentation fault)[转]
C/C++中的段错误(Segmentation fault)[转]Segment fault 之所以能够流行于世,是与Glibc库中基本所有的函数都默认型参指针为非空有着密切关系的。来自:http://oss.lzu.edu.cn/blog/article.php?uid_7/tid_700.html#comment背景最近一段时间在linux下用C做一些学习和开发,但是由于经验不足,问题多多。而段错误就是让我非常头痛的一个问题。不过,目前写一个一千行左右的代码,也很少出现段错...转载 2022-05-04 13:43:00 · 5453 阅读 · 0 评论 -
Linux如何重复执行命令每隔几秒或者每隔几分钟
Linux如何重复执行命令每隔几秒或者每隔几分钟作为Linux系统管理员通常需要在特定时间段内重复运行某些命令。就类似一个定时任务在定时执行某一个操作,下面就来看一下如何在一定周期之内执行相应的命令或者脚本,啥意思呢?举个例子就比如每隔10秒执行一个命令,这该如何做呢?下面就来看一下如何实现吧。1,使用crontab命令crontab 命令用于维护 crontab 文件或 cron 表。cron 表包含要在系统上定期运行的命令列表。每个用户都可以有一个 crontab,我们可以在其中创建和修改任转载 2022-05-04 13:42:08 · 3890 阅读 · 0 评论 -
linux 局域网 TCP优化
tcplinux拥塞控制算法net.ipv4.tcp原创 2022-02-14 14:21:32 · 1624 阅读 · 0 评论 -
linux 编程获取内存和cpu使用信息
top -n1 内存使用率cpu使用率原创 2018-10-31 10:34:35 · 1621 阅读 · 0 评论