自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 收藏
  • 关注

原创 打印编译版本

1、shell脚本获取编译时间#get_build_version.sh#!/bin/bashREV=`git rev-list --all|wc -l`DATE=`date "+%Y-%m-%d_%H:%M:%S"`VERSION=${REV}_${DATE}echo ${VERSION}2、在cmake中将编译时间设置成宏execute_process(COMMAND sh ${PROJECT_SOURCE_DIR}/get_build_version.sh WORKING_DIR

2021-07-23 09:57:46 134

原创 wireshark添加h264解析插件

1、下载h264解析插件rtp_h264_extractor.luahttps://github.com/volvet/h264extractor2、将插件rtp_h264_extractor.lua放到wireshark的安装根目录3、将wireshark根目录中的init.lua文件,确保disable_lua = false,并且在最后添加dofile(DATA_DIR.."rtp_h264_extractor.lua")4、重启wireshark,在Tools栏下可以看到.

2021-07-14 15:29:39 2619

原创 rapidjson坑

base64进行编码时,超过76字符会自动加换行符;而rapidjson没有处理这种情况,会直接crash

2021-04-21 16:30:12 386

原创 使用tcmalloc dump内存

启动加上,会自动生成内存dump文件# HEAPPROFILE 指定perf路径# ./bin/server 需要执行的程序LD_PRELOAD="/usr/lib64/libtcmalloc.so.4" HEAPCHECK=normal HEAPPROFILE=./myprof ./bin/server生成pdfpprof --pdf a.out test.0001.heap > test.pdf对比生成pprof --pdf --base=check.008.

2020-11-10 18:06:55 318

原创 火焰图生成

火焰图生成脚本https://github.com/brendangregg/FlameGraph#!/bin/bashFLAMEGRAPH=/root/test/FlameGraphecho "perf record ... gen perf.data"perf record -F 99 -p $1 -g -- sleep 30echo "gen out.perf"perf ...

2020-05-04 13:48:59 659

原创 问题记录

事项动态库头文件不能有虚函数替换C++库,将编译的可执行文件也一起替换,否则可能导致coredump堆栈不是真实地址

2020-02-27 14:41:55 124

原创 打印容器和枚举

参考代码#include <iostream>#include <map>#include <vector>#include <sstream>using namespace std;/* * 打印map */template<typename _Key, typename _Value>std::ostrea...

2019-11-08 18:34:29 127

原创 linux下添加库的加载路径

1.修改环境变量export LD_LIBRARY_PATH=path_name2.修改配置文件修改/etc/ld.so.conf的内容在最后添加库加载的新的路径,然后执行:ldconfig 使配置生效。

2019-08-09 12:43:29 7523 1

原创 编译muduo

下载muduo代码release-2.0wget https://github.com/cugxchen/muduo/archive/v2.0.0.tar.gz安装依赖库,boost下载源码另装apt-get install libcurl4-openssl-dev libc-ares-dev protobuf-compiler libprotobuf-dev编译cd muduo/...

2019-08-04 22:41:24 435

原创 vim简单配置

vim /etc/vim/vimrc末尾添加set nuset tabstopset nobackupset cursorlineset rulerset autoindent

2019-08-04 22:05:04 128

原创 ubuntu安装gcc/g++

apt-get install gcc-8 g++-8update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 50 --slave /usr/bin/g++ g++ /usr/bin/g++-8其中50为优先级删除某个版本的编译器update-alternatives --remove gcc /usr/bin/*(*...

2019-08-04 21:19:30 3612

原创 linux程序性能分析

分析程序耗时time ./test.out结果real 0m5.699s #总共运行时间5.699suser 0m0.016s #用户态耗时0.016s,说明大量的时间程序是挂起状态,如sleepsys 0m0.000s #系统调用耗时0...

2019-08-04 16:19:12 215

原创 boost::asio学习记录

使用asio捕获信号,处理程序退出Boost.Asio支持信号量,比如SIGTERM(软件终止)、SIGINT(中断信号)、SIGSEGV(段错误)等等。 可以创建一个signal_set实例,指定异步等待的信号量,然后当这些信号量产生时,就会调用你的异步处理程序:#include <iostream>#include <boost/asio.hpp>using ...

2019-08-03 18:31:56 170

原创 编译boost

mingw编译下载boost源码 https://www.boost.org/users/download/gingw加入windows环境变量,cmd中输入gcc -v可以看到版本号则安装正确cmd进入boost_unix的解压目录,输入bootstrap.bat生成编译环境输入./b2.exe install --prefix=D:\boost\boost_1.65.1_mingw ...

2019-08-03 16:18:48 177

转载 ubuntu16.04系统gcc下降和升级

参考:https://blog.csdn.net/betty13006159467/article/details/78394974

2019-07-28 22:21:29 902

原创 pstack无法使用的问题

使用pstack需要在链接符号中添加-g,且不能有-s;但是pstack $pid还是出现(No symbols found in ),查了许久,开始以为是gdb版本与g++不匹配的问题,但是gdb可以单独工作。后续发现是系统自带pstack脚本的问题,附可用的pstack脚本代码#!/bin/shif test $# -ne 1; then echo "Usage: `basena...

2019-07-09 20:31:51 4567

原创 文件夹遍历与创建

linux下遍历文件夹,并打印文件名称#include <iostream>#include <dirent.h>#include <cstdlib>#include <fstream>#include <string>#include <cstring>using namespace std;bool...

2019-07-01 17:21:29 241

原创 log4cxx用法

需要自己先包裹一下,用起来方便点。头文件#include <log4cxx/logger.h>#include <log4cxx/stream.h>#include <log4cxx/level.h>#include <log4cxx/basicconfigurator.h>#include <log4cxx/propertycon...

2019-07-01 16:30:11 2562 1

原创 curl发送post请求

curl发送post请求并统计耗时curl -o /dev/null -s -w "time_connect: %{time_connect}\ntime_starttransfer: %{time_starttransfer}\ntime_total: %{time_total}\n" -H "Content-Type:application/json" -X POST --data "{转义...

2019-06-25 14:42:38 586

原创 C++11单例模板完全解决方案

class SingletonClass{private: SingletonClass() = default; ~SingletonClass() = default; SingletonClass(const SingletonClass& singletonClass) = delete; SingletonClass&operator...

2019-06-25 14:29:48 527

转载 rapidjson库的基本使用(生成/解析json)

转载自 https://www.cnblogs.com/fnlingnzb-learner/p/10334988.html

2019-06-19 15:42:36 479

原创 C++11 std::chrono时间库

主要时间类型std::ratio<num, den> 定义分式例如 std::ratio<60, 1> minutes;//<分子,分母>一分钟60秒 std::ratio<60 * 60> hource;//1小时3600秒 std::ratio<1, 1000> milliseconds; //1ms...

2019-06-18 14:45:05 26303

原创 删除^M

linux下vim编辑文件出现^M是因为不同平台对于回车符的定义差异造成的:windows:0D0A ‘/r/n’unix\linux: 0A ‘/n’MAC: 0D ‘/r’当linux的文件在windows下编辑过,就容易出现^M符号,就是因为多了'/r'解决办法:1、dos2unix fileName 这个最简...

2019-05-31 14:42:32 1192

原创 shell脚本查找字符串,不存在则添加

#!/bin/shaddText="cd /home/test"AddCmd(){#判断 file.sh 文件中是否存在该字符串if ! grep "$addText" file.sh >/dev/nullthen#不存在,添加字符串 echo "input file" sed '$a/'"$addText"'' file.sh > newfile mv...

2019-05-29 11:38:29 6598

原创 记一次内核升级导致的问题

最近嵌入式平台的内核进行升级,项目依赖的SDK重新编译提供给我们。但是在使用过程中,出现开O2编译运行抛异常,而开O1则正常的现象。刚开始以为是代码问题,各种加打印测试跟踪,就是没找出原因。最终找SDK的同事提供他们的DEMO和依赖的系统头文件,发现系统头文件跟我们使用的不一样。更新头文件之后,重新编译,没再抛异常。平台或者库升级,不仅仅是换库,还要看库的头文件是否有变动,以及查看库所依赖的...

2019-05-20 14:54:34 302

原创 记录一次压测问题

压测出的问题同一套程序,之前放在服务器上使用,公司内部压测和发布给客户使用,均未出现问题。后由于客户业务需求,将其移植到嵌入式平台。公司内部压测过程中,出现三种异常。问题1:大并发压测,服务进程被killed掉。问题2:大并发压测,服务挂掉,最后的打印为底层的错误日志。问题3:大并发压测,服务挂掉,打印另外的底层错误日志。分析:对于问题1,开始怀疑是内存泄漏,编译选项中添加-o0...

2019-05-15 20:26:45 228

原创 修改文件描述符限制数

一、代码修改进程的文件描述符限制数,仅当前进程生效#include <sys/resource.h>/* * 修改进程文件描述符限制数 */bool reset_fd_limit(int32_t fdNum){ bool bRet = false; do { struct rlimit rl; if (getrlimit(RLI...

2019-05-10 19:14:39 634

原创 CMakeList.txt模板

CMakeList.txt模板cmake_minimum_required(VERSION 2.6)project(Test)#设置编译选项set(CMAKE_CXX_FLAGS "-g3 -lpthread -lmysqlclient -lrt -Wl,-rpath,lib -std=c++11")set(CMAKE_CXX_FLAGS_DEBUG "-g3")set(CMAKE_C...

2019-04-24 16:03:35 748

原创 C++调试小技巧

AddressFsanitize检测内存越界和内存泄漏在CMAKE_CXX_FLAGS中添加-o0 -fsanitize=address -fno-omit-frame-pointer -fsanitize=leak 关闭编译优化,使用AddressFsanitize检测内存越界,调试用,正式使用勿开启gprof性能调试工具在CMAKE_CXX_FLAGS中添加-pg选项,可使用gprof性...

2019-04-24 15:49:32 563

原创 按行读取文件

C++按行读取文件const string strUrlFileName = "testUrl.txt"; ifstream fin(strUrlFileName.c_str(), fstream::binary); if (!fin || fin.eof()) { ERROR_LOG("Con't getline, file = " << strUr...

2019-04-24 15:36:10 747

原创 工具函数

判断端口是否被占用Bool PublicTools::IsPortUsed(UInt16 uPort){ Bool bRet = False; struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(uPort); inet_pton(AF_INET, &quot;0.0...

2019-02-12 11:36:44 318

原创 SDP协议总结

一、基本要求1、SDP的表示SDP(Session Description Portocol)会话描述协议,通常通过内容类型为&quot;application/sdp&quot;的MIME来表示。2、媒体和传送信息SDP可包括以下媒体信息:媒体类型(音频、视频等);传送协议(RTP/UDP/IP, H.320等);媒体格式(H264视频,AAC音频等);传输地址和端口;二、语法内容1、SDP...

2018-12-06 21:04:31 4234

转载 视频相关十大开源项目

视频相关十大开源项目1、 OpenH323项目 (★★★★★)上榜理由:最著名的H.323开源协议栈,视频会议开发必备协议栈,强烈推荐最著名的H.323开源协议栈,包含了全部的H.323协议功能,并有大量视频会议实现的参考例子,如终端、MCU服务器、gk等H.323协议的核心组成部件,Openh323是H.323协议首选协议栈,同时也是我们视频会议开发最值得作为参考的开源项目之...

2018-12-03 11:06:27 2650

原创 音视频开发常用工具

1、VLC播放器VLC支持多种常见音视频格式,支持多种流媒体传输协议,也可当做本地流媒体服务器使用,功能十分强大。下载地址:https://www.videolan.org/2、Elecard Stream Analyzer码流分析工具Elecard Stream Analyzer是很给力的码率分析工具,可直接查看码流中协议规范定义的字段值。例如:分析H264分析,查看SPS、PPS中各...

2018-11-28 11:59:02 1642

原创 RTP解析音视频帧

RTP解析音视频帧RTP解析H264、AAC负载解析H264解析AAC封装AAC的ADTS头部CADTS.hCADTS.cpp采坑心得附录:音频抓包分析RTP解析H264、AAC负载RTSP中音视频是通过RTP传输的,本文记录从RTP解析出H264、AAC的过程。协议介绍可参考 https://blog.csdn.net/lostyears/article/details/51374997...

2018-11-27 20:51:15 5875 6

原创 Thread类相关问题

Thread类相关问题,介绍了start()方法与run()方法的联系与区别,synchronized关键字的用法与实现原理,实例锁与全局锁的区别,线程等待wait()与线程唤醒notify(),Thread与Runnable的关系等内容

2017-11-25 12:02:23 202

原创 Android开发中常见内存泄漏问题

内存泄漏主要分为以下几种类型:1.静态变量(包括但不限于单例)引起的内存泄漏。注意静态变量持有对象的生命周期。2.非静态内部类引起的内存泄漏。静态内部类,弱引用访问。3.匿名内部类引起的内存泄漏。静态内部类,弱引用访问。4.资源未关闭引起的内存泄漏。退出前关闭资源。

2017-09-20 17:36:47 310

原创 Java虚拟机类加载机制

Java虚拟机类加载机制的介绍,特别是双亲委派模型的理解,最后分析了自定义类加载器和其使用场景。

2017-09-20 17:01:24 229

原创 Java内存管理

Java内存回收主要关注Java堆,为了内存管理的方便,一般将Java堆分为新生代、老年代。新生代的特点是大部分对象“朝生夕死”存活率低,适合使用复制算法。老年代中的对象存活率高,选用标记整理算法。Java堆也不是越大越好,Java堆越大,GC的频繁降低,但是单次GC的耗时大大增加,影响用户体验。

2017-09-20 14:11:24 207

原创 String中的字符串拼接问题

String的+操作是一种语法糖,其本质是创建了临时的StringBuild对象进行append操作,然后toString()赋给原来的String引用,因此大量字符串拼接不要直接用String,应该使用StringBuild或StringBuffer,其中StringBuild不考虑线程同步,效率更高,StringBuffer考虑线程安全,效率略低于StringBuild。

2017-09-20 10:51:55 6802 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除