![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C\C++
文章平均质量分 76
无人等人
穷且益坚
展开
-
perf分析不显示符号表或者错乱的几种可能
perf 使用注意点原创 2023-11-24 10:49:27 · 823 阅读 · 0 评论 -
C++ LRU cache 实现
LRU 实现原创 2023-09-08 16:55:25 · 481 阅读 · 0 评论 -
C++ 名称查找(Name lookup)与参数依赖查找ADL(Argument-dependent lookup)
限定作用符限定名值指出现在::(限定作用符)右侧的名字,他可以是无限定作用域及,没有限定作用符在左侧的名字。原创 2023-08-15 02:58:43 · 480 阅读 · 0 评论 -
enable_shared_from_this 典型使用场景
从以上例子我们也可以得出结论:保活对象保活对象异步调用保活虽然c++在一些现代化版本(11+)已经提供了shared_ptr/unique_ptr智能指针极大的降低了C++er操作指针的心智负担。但是在一个异步调用时仍然存在问题;原创 2023-07-10 18:15:09 · 413 阅读 · 0 评论 -
c++ makefile + clangd 生成 compile_command.json
c++ clangd+makefile原创 2022-12-02 16:29:17 · 5229 阅读 · 1 评论 -
C++11 返回值优化、移动语义及函数返回值构造的重载决议
C++11 返回值优化、移动语义及函数返回值构造的重载决议原创 2022-08-30 10:29:00 · 942 阅读 · 0 评论 -
为什么不建议库导出c++接口
C++的二进制兼容问题原创 2022-08-26 20:12:12 · 720 阅读 · 0 评论 -
论 shared_ptr的线程安全
论 shared_ptr的线程安全原创 2022-08-24 00:54:32 · 2132 阅读 · 0 评论 -
C++11 Aspect自实现
aspect自实现原创 2022-04-20 10:01:56 · 1661 阅读 · 5 评论 -
分析c++内存泄露(使用VS 性能探查器)
VS 性能探测器 分析 内存泄露原创 2022-02-21 20:08:45 · 3339 阅读 · 0 评论 -
c++11 实现依赖注入
本文使用多态、闭包、模板及c++11部分特性,实现了一个轻量的DI基本结构,实现了DI的基本功能原创 2022-02-20 18:33:02 · 5591 阅读 · 0 评论 -
安卓 JNI crash 日志分析 及问题定位 方法
目录标题例子抓取crash 日志日志分析例子void crash_test_func() { int* ptr = nullptr; // 行号173 *ptr = 99; // 行号174}// net 在 jni中调用void Net::initEngine(const char* data) { crash_test_func(); // 行号179}以上程序,对一个空指针解引用做赋值操作,会抛出一个S异常。抓取crash 日志对于SIGSEGV等错原创 2021-12-02 18:33:50 · 4160 阅读 · 0 评论 -
c++跨平台软件 vscode 各个平台下的debug教程
目录标题相关概念日志调试实操windows平台相关概念一般来说我们分析BUG,大概分为两种根据软件内部已有的插桩日志,记录关键节点信息、重要函数的输入输出,根据这些信息判断bug调试(Debug),让代码一步一步执行,跟踪程序的运行过程。比如,可以让程序停在某个地方,查看当前所有变量的值,或者内存中的数据,根据这些信息分析bug。日志日志这种方式,优点在于离线,但更多基于完备的日志信息,依赖代码内部的插桩日志的详尽程度,如果现存日志未捕获bug信息的日志的话,那么bug分析的形式就变成了如下原创 2021-08-31 14:26:55 · 1240 阅读 · 0 评论 -
windows平台 cmake release版本进行debug
目录标题背景需求问题解决cmake 设置背景项目中,通过ExternalProject_Add引入的一些第三方库。需求项目debug时,不需要第三方库的debug版本,只要主source debug,而第三方库release优化拉满。问题linux 平台下允许这种方式,release和debug 混用。windows平台exe与dll 存在限制,不能release与debug混用。但是我们软件对于一些导入第三方的库没有debug需求,而统一debug导致第三方库运行速度慢,反而影响整体软件的调原创 2021-08-23 15:36:17 · 1192 阅读 · 0 评论 -
CMAKE 里PRIVATE、PUBLIC、INTERFACE属性示例详解
闲扯cmake 里面target_include_directories,target_link_libraries这两个命令里面有三种属性PRIVATE、PUBLIC、INTERFACE。cmake PRIVATE、PUBLIC、INTERFACE的讲解网络上很多,但是总觉得太过偏概念了,看完并没有让人有深入细节的了解。于是动手做个示例,就有了本杂文。这三种属性,从根本上来讲属于cmake里面传播特性的三种等级。实例既然传播特性,那么我们肯定需要多个target来演示传播。testCMake原创 2021-08-17 20:18:13 · 12996 阅读 · 6 评论 -
vscode 添加代码命名规范检查
目录前言clang三级目录前言前文简单提到clang-tidy提供命名规范检查,由于篇幅,没有详细讲解。正好最近有分了个旧项目代码规范整改的杂活,就补充描述下在vscode中如何使用clang-tidy进行静态检查。clang三级目录...原创 2021-08-04 22:13:07 · 5230 阅读 · 9 评论 -
vscode + clangd 开发 c\c++
目录标题背景发现clangd三级目录背景vscode c++开大家一般用 巨硬 自家出品的c++插件,如下网络大部分的vcscode c++ 环境搭建也都是讲这个插件的配置,用于提供悬浮提示,代码补全,错误提示,定义声明实现之间的项目跳转等等功能。我之前也是用这个插件开发,总体还好,至少比在我之前用的一些keil之类的IDE好用很多,但是和IDEA这种更现代化的IDEA有不小差距。先不说导航找实现找引用这种语义分析的基本功能有时候都没办法正确找到实现,错误和警告也只是有提示,没有quick f原创 2021-08-01 12:16:05 · 28112 阅读 · 14 评论 -
使用 VSCode 远程 图形化 GDB 调试 嵌入式linux
目录标题引言环境步骤vscode remote ssh 配置Linux编译机配置设备板端配置vscode launch设置调试引言之前说了,通过core dump找程序bug,但是有些时候排查问题的还是不够高效,命令行形式gdb还是太简陋了,在IDE debug代码打断点,查堆栈变量那些习以为常的东西,在gdb这里怎么用怎么不习惯,可视化操作不比敲命令行来的香吗?最近正好研究了下vscode remote ssh + gdbserver 调试。相对来说体验比较像IDE了,基本的单步,直接代码上打断点原创 2021-06-07 16:46:04 · 1950 阅读 · 4 评论 -
linux 程序crash 调试、原因分析及问题定位
linux 程序崩溃,如果能根据已有的插桩日志能排查出来自然好,但是往往日志未全覆盖,这时候排查起来还是比较麻烦的。一般来说有以下这几种方法获取崩溃现场数据。core dumpcore dump是linux原生自带的一个异常分析工具,当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中。注意程序编译 需要带 -g。开启core dumplinux 默认是关闭的。开启ulimit -c unlimited此时,运行程序发生sigsegv之类的异常时原创 2021-05-26 09:42:37 · 7743 阅读 · 2 评论 -
c++ 有返回值函数 ,但未返回值时的情况具体分析
具体业务代码遇到一个函数代码块无返回值导致bug的问题warning: control reaches end of non-void function [-Wreturn-type]测试代码//不存在存在内部调用int test1(int i){ if (i == 0 ) { return 0; }}int test3(int i){ return i;}//存在内部调用int test(int i){ if (i =原创 2021-05-25 11:31:52 · 3683 阅读 · 0 评论 -
vscode #ifdef编译开关关闭时不显示灰的问题
敲着敲着不知道手贱碰哪了,突然关的的编译开关不显示灰了。正常情况下开:关:现在突然,所有预编译控制块全是活动状态。网上说的,都是vscode #ifdef 区域变暗,跟我不是一个问题最后发现是手贱点了这个配置的问题。如果你不手贱不点编辑,默认是有一个值的,但是如果跟我一样纯手贱点了没细看选项就傻了,在settings.json会生成一个字段,并且默认值就被改成null,然后就没有非活动编译块暗色处理了,蛋疼。“C_Cpp.inactiveRegionOpacity”: null,原创 2021-04-25 09:30:54 · 6575 阅读 · 10 评论 -
OOP面向对象程序设计的理解
这里写目录标题软件设计六大原则基本概念如何设计高可用,高复用,易拓展的软件高可复用性一个简单的例子嵌入式软件如何实现硬件无关控制反转易用性类的易用性组件的易用性可拓展性业务可拓展性接口可拓展性不要过度设计软件设计六大原则基本概念最少依赖(迪米特)任何一个类只能使用本身的方法和属性及根据参数传递进来的值,每一个类尽量减少对其他类的依赖,减少类藕合,高内聚,利于提高代码复用。迪米特栗子单一职责一个类应只负责一个职责,各个职责变动不应影响其他职责,提高代码可读性(责任链完美诠释)接口隔离即接口原创 2021-04-20 09:44:38 · 230 阅读 · 0 评论