自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 VC2022 + protobuf 3.35--不建议用protobuf新版本,如下的尝试仍然存在链接问题,推荐 protobuf-cpp-3.21.1(Protocol Buffers v21.1)

笔者用比较直接的方法,初步搞定VC2022上集成protobuf 新版本, 最艰难的是搞定Abseil部分,希望能够帮助到大家。

2024-04-27 20:30:02 1625

原创 VC2022 + google test

VC2022 + google test/google mock 完整流程,从这里开始您的TDD之旅

2024-04-27 19:31:29 1259

原创 灌水,瞎聊

通信系统的pronto,只有你想不到的,特别是多个国家的site开发一块内容,还涉及多个相关系统,OAM、CPlane/L2-Hi/L2Lo/L1 Phy 上下行/CSS,猜疑,缺乏信任,不熟悉,推诿,甚至有比推诿还恶心的不承认不负责,见得多了,心累,你永远都有冥想的好时机,千方百计的在脑海中畅享系统正常运行的各种条件,问题可能出在哪里。绝大多数时间和精力,要么在搞pronto,要么投入到cnp优化上,很累了,觉得陷入了无休止的循环,人柱力式的天天游荡者,除了获得了年岁的增长,没钱也没有获得能力。

2024-04-27 17:19:48 415

原创 也来混rt_thread了,碰到一个内存释放问题,顺便聊聊思路

刚入行rt-thread开发,就碰到内存使用不当问题,仍然有迷雾,暂时用字节对齐方式规避

2024-03-28 17:19:59 522

原创 一个UT case引入的栈非法访问

::testing::SaveArg 要注意变量生存期

2024-01-29 16:55:01 259

原创 嵌入式里time 那点事

规避GCC老版本标准库中time处理方面的问题

2024-01-29 08:41:36 262

原创 经验分享: command执行示例

【代码】经验分享: command执行示例。

2023-08-27 17:39:19 91

原创 经验分享: 针对一组zmq api的mock, 系列之 6

上面这种mock完成后,则用户调用zmq的各种api接口,都会类似如下。

2023-08-27 16:25:05 95

原创 经验分享: invoke 的UT示例, 系列之 5

【代码】经验分享: invoke 的UT示例, 系列之 5。

2023-08-27 16:10:13 93

原创 经验分享: 和throw exception有关的UT示例, 系列之 4

先来简单的,期望一个调用不会抛出异常。主动设置内部调用抛出异常。期望函数调用会抛出异常。

2023-08-27 12:53:02 90

原创 经验分享: 和构造函数delete/noexcept有关的UT示例, 系列之 3

class里面构造函数显式的设置为delete状态,也有构造函数显式的设置为 noexcept。则UT如何测试到呢?

2023-08-27 12:37:17 59

原创 生产者消费者示例

【背景介绍】当前项目,需要设计一套架构,支持微服务的集群应用,其基础架构可以参考文章。

2023-08-27 10:55:07 37

原创 最大不重复子串示例

前提: 可能有多个不重复的最长子串,返回任意一个即可(不然要整一个std::vector<std::string>变量 来维护所有可能的最长子串了)最近被面试,面试官出了一个小题,找出给定的字符串中最大的不重复子串,后来网查发现其实有很多作者给了实现样例。面试的时候,时间有限,折腾了20多分钟,磕巴的写了下面的函数,纯C风格。

2023-08-26 23:16:28 18

原创 经验分享: 基础的gmock示例,系列之 1

经常出现的问题是,您想要为某些代码 A 编写单元测试,但该代码调用了其他一些代码 B,并且您不想在单元测试中测试 B。A 的单元测试应该只测试 A 是否执行了您期望的操作,前提是它调用的代码执行了预期的操作。如果调用任何不期望的函数或者使用错误的参数调用任何期望的函数,则严格模拟将使测试失败。Googlemock 提供了大量的帮助器和适配器,因此您通常不需要编写太多代码即可让模拟执行您想要的操作。在 A 的单元测试中,您使用 B 的模拟实现。的经验,但是通过阅读网上有关其他模拟库的信息,我得到的印象是。

2023-08-02 11:04:38 556

原创 经验分享: 一个被否的方案中的UT示例, 系列之 2

当前方案是解决container部署下,非root用户下添加user/group功能,比较极端,后来大专家给出了另外的方案,当前极端方案被否,UT方面比较有代表性,可以作为样例,说不定以后用得上。跳过方案本身的讨论,在实现层面,调用了不少系统函数,如何做好UT呢?更具体的说,如何更容易mock 系统函数, 其实上面已经体现了方案。makefile(是嵌入到一个大一些的subsystem里面,权当示例)上面的mock 方式,大专家一开始开了也喊了一下: nice mock。

2023-07-30 17:34:12 43

原创 经验分享: automake下的简单工程

部门里面有专职负责帮忙申请新subsystem的专家,邮件告知subsystem名称以及存在的意义,并且告知存放的repo(gitlab / gerrit)权当给自己做一个笔记,autotool 下新申请subsystem以及make file框架。proxy子目录的makefile。外层的makefile。

2023-07-30 17:28:06 55

原创 经验分享:函数返回用std::string_view替代std::string

函数如果想返回一个字符串,不妨将std::string 替换为std::string_view(注意前提是原始字符串生存期比该view要长)使用的时候,getDataStoreString(DATASTORE_TYPE::DATASTORE_STARTUP).data()注意点就是std::string_view本身就是一个具体字符串的view,一般不要有std::string_view& 这种用法。string_view的众多优点参见cpp reference。知乎上看到有一篇也讲的不错。

2023-07-30 17:02:59 279

原创 经验分享: 项目中随处可见的std::runtime_error

但是解决具体问题的时候,除了抽象一点的思考,很大部分时间都费在了这些很具体又很有用的小实现上,想要做一位稍稍高效的码农,这些已经证明符合商业规范的小组件要日积月累,拿起来就可用。最近有些懈怠,很碎的内容网上到处可见,这里权当做个纪念,后续的开发碰到要封装std::runtime_error场景,这些拿起来就可用。个人思考问题总是断根弦,那就是特别不喜欢在已经很确定随时随地可以拷贝自由使用的组件上费心费力。

2023-07-29 22:34:26 170

原创 经验分享:比较有意思的启动进程实例

比较有意思的地方在于这里用到了boost::process 之前没有看到过这么有意思的用法,可以单独传入环境变量。用户可以在主线程中调用ServerManager来启动某个command触发的进程。某些特殊场景可能用该方式比较合适。

2023-07-27 19:23:35 34

原创 经验分享: 共享内存映射

样例代码,权当做一个记录。

2023-07-27 19:05:27 31

原创 经验分享: plugin 以及符号查找

假使当前 libyourownpoxyplugin.so里面有一个符号用于创建proxy的instance。plugin加载以及符号查找。

2023-07-26 17:12:03 24

原创 项目中碰到的比较有意思的systemd Unit File

个人在这些方面完全是一个很老的小白,和container里面进程启动的方式不一样,当前项目需要支持在非container环境下启动独立进程。Unit file学习上比较喜欢的网址当前项目比较有意思的是 your_ownd.service.in文件由于是初学,有意思的点觉得有31 Environment 可以指定多个2 sh命令的执行3 当前为service.in文件,@bindir@ 最终提供给集成方时需要替换为定制后的路径。

2023-07-26 15:41:42 53

原创 消息链中父节点边缘触发,子节点水平触发

flag立一下,后续更新。

2023-07-25 16:50:48 40

原创 经验分享:保护范围过大,给互锁开了窗口

咨询了平台层同事,之所以当前栈触发coredump,是因为所在进程为核心进程,有一个检测该进程是否keep alive的机制,即类似周期性的消息握手,如果连续3次握手超时,则认为该核心进程在异常状态,比如死循环,比如pending/block住,于是主动触发signal,抓取调用栈。函数callEventHandler会被上文提到的非关键线程调用,lock_保护的范围不仅仅用于保护subscribers_,也将对应的call back调用囊括进来,保护范围过大,给互锁留下了窗口。

2023-07-25 14:51:11 193

原创 Linux下常用的消息引擎框架,用户线程以外的新线程篇

flag设立,后续补充。

2023-07-24 23:16:07 43

原创 Linux下常用的消息引擎框架,单线程篇

先立个flag,后续补充。

2023-07-24 23:15:22 91

原创 C++ 实战: 好用的std::variant

通过存储的类型不同,来确定该调用哪种回调函数,上述样例只是其中最简单的应用,我们在refine老代码的时候,可以快炫酷的用用,看看效果。早期我们用union来存变量,但是预先不知道存储的是那种类型.C++新特性中,提供std::variant来满足新场景。

2023-07-24 19:16:20 266

原创 C++ 实战: std::error_code 特例化样例

直接干货,相当于一套可用模板,后续类似开发中可以直接拷贝使用。gmock下 UT也贴心准备好。

2023-07-24 18:50:33 283

原创 std::jthread 样例

参考上一篇后,这里也直接干货,主要protected里面的成员函数时为了便于做UT。

2023-07-24 18:40:40 160

原创 std::jthread 您常用么?看完这篇就可以实战

对于我这种代码的小白来说,google在平时的工作中,真的不可或缺,通过google,只要具备合适的搜索技巧,可以说90%以上的具体一点的编码问题,你都可以找到参考,而且是那种成熟度很高的参考。具有异常安全的线程终止流程,并且可以在大多数情况下替换它,只需很少或无需更改代码。例如,等待条件变量的线程无法检查停止条件,除非收到信号通知。随着时代的发展,你所碰到过的代码问题,不钻牛角尖的扯前沿算法之类,可以说99%以上,总有人碰到过。的线程中执行,但如果在注册之前已请求停止,则会立即在注册线程中调用该回调。

2023-07-24 17:14:58 163

原创 身边的超级大拿和普通开发的区别小体会

9 知识库搜集无系统,甚至个人自认为没有知识库(唉,个人的知识库都在公司内部的onenote以及公司pc上,信息安全原因,不能够拷贝出来,这么多年,的确没有系统的搭建,错过了太多自我提炼,提升机会)。对于一般的项目,只要不是架构特别奇葩,往往都能够从已经的知识库里面稍作提炼,很快的搞出一个适用的架构,很快的将基本代码框架搭出来,一个人顶的上10个人。10 对工作仍然有比较低层次的激情,作为老油条,的确在绝大多数情况下能够搞定自己的任务,也仅限于搞定任务,要说出彩的地方,少!默默无闻,最好是隐形。

2023-07-24 16:57:30 29

原创 印象很深刻的一次封装: 不定参数函数模板

则需要强转方式 static_cast(&ProxyA::do_something)之所以东施效颦,原因在于使用场景,在第一种情况下可能有点复杂, 需要告知Func 具体类型,以便于模板解析。比如调用 int ProxyA::do_something(int a, int b, int c)而个人认为加上强转太复杂,Func以及Func的参数列表,可以自己内部消化。如下代码为部门首屈一指的高手所写。

2023-07-24 16:32:58 58

原创 Protobuf 和Json的互转功能在项目中的应用

工具可以读json脚本,从json文件中提取需要测试的API以及精心设计的不同参数,这样工具可以模拟下游,来从各个维度调用API,并得到预期中的结果。整个工具思路的一个重要的实现核心,是围绕着 protobuf 和json之间互转完成的, protobuf实在是比较好用,在未来的工具相关开发中,还会大量的用到。比较大型的项目中,通常会依照总体软件架构,将交付件切分到不同的交付链中,处在中间层的交付件,往往有着自己的上游和下游。接上上面描述,自然的会出现下面的流程,可以方面的达成TA。

2023-07-24 15:33:18 2277

原创 维测记录 系列 1: DSP 上如何查询crash挂在哪一行

然后,执行 make xxx ARCH=dspnyq MODE=release -j22 > ci_dspnyq.log 2>&1。行如下,最终查询到时mUeData有其中一个条件分支中可能为NULL,fatal为内存非法访问。snapshot 里面的dump信息解析出来后,Fatal 调用栈的顶端如下。找到crash对应版本相同的version,更新到本地工程后,编译选项中,只要加上一个DSP_CFLAGS += -AL,示例: xxx\\yyy\Make\dsp_flags.mk。

2023-07-24 10:36:49 47

原创 inter position带来的crash问题,大家有碰到过么?

avahi 编译出来的大概率是c库,而不是c++库,然后当前subsystem最终在链接的时候找到的是core的库函数,导致出问题(记得以前《C专家编程》一书中有过interposition描述),抛开先前看过的全局变量不小心在不同组件中有相同的导致串用,对于串用同名不同参的函数,职业生涯里来算是首次碰到。这里注意是挂在libavahi-core.so当中,之所以错过这个线索,在于不了解avahi的背景,实际上。倒推回来,该函数接收到的两个参数都不是预期中的,只要走到该流程,必然出问题。

2023-07-22 13:50:57 169

原创 工具常用系列 6: Server端实现样例

【代码】工具常用系列 6: Server端实现样例。

2023-07-21 18:40:47 28

原创 工具常用系列 5: Client端实现样例

命令行解析工具源码样例(未经编译,不少地方数据转换未展示,仅供参考)

2023-07-21 18:28:15 29

原创 工具常用系列 3:消息创建和解析

前文的your_tool_cli_msg.proto 文件生成 your_tool_cli_msg.pb.h/your_tool_cli_msg.pb.cc。

2023-07-21 17:38:09 32

原创 工具常用系列 4 : UDS socket + ZMQ

熟悉以上两种的伙伴,肯定知晓是怎么回事,是否用UDS socket取决于网络环境,客户端服务端如果处在同一个可访问共享内存的环境中,比如同一个OS,或者同一个container,那么UDS用起来还是比较方便的。ZMQ则封装了socket的很多操作,用户使用起来也方便。本文主要是记录一下开发过的工具里面用到的场景。

2023-07-21 16:37:21 154

原创 工具常用系列 2: 运用protobuf支持可扩展消息

protobuf 的一大好处就是参数默认为optional,可扩展性极强,在工具开发中,适用于client/server之间交互的消息的格式定义,轻易不动序号的话,是比较容易达到成向兼容的。protobuf工具业内用的比较广泛,到处都可以找到,这里记录一下自己在日常开发中用到的消息大致定义范式。

2023-07-21 16:12:21 118

空空如也

空空如也

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

TA关注的人

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