部分 Crash 分析记录

想着记录一下平时分析过的 crash dump,作为一个总结和参考。不过因为涉及到公司代码,所以一些细节没法描述太明白,crash 堆栈和对应的源代码也不方便贴出来了。这里先整理了几个比较有代表性的,其他一眼就能看出问题的就不写到这里了。

2023.Q3 ui 代码没有清理 framework api 指针

当用户开启计算机锁屏时自动切断 channel 的策略并触发了锁屏行为后,UI 会调用 api 切断所有 channel,并且立即清理上层保存的数据,但问题就在这个清理上。
原本调用触发切断的 api 后会有一个回调通知,上层是在回调里做清理动作的。但是现在代码中主动调用了一个 channel_mgr.Clear();,这个 Clear() 函数里清理的不完全,相比之下另一个成员函数 Delete(channel_id) 才是做到了彻底清理。同时回调函数里还做了许多额外的清理操作,这里一个 Clear() 把其他操作也都忽略掉了。
其实究其原因就是外部保存了 ChannelItem 的裸指针,但是又存在这样一个 corner case 没有将它清理掉,等 ChannelItem 实例析构后这个指针就野了。关键在于怎么发现这个代码路径。
因为 framework 层在释放前总是会通过回调函数通知 UI 清理,费好大劲排除 framework 没有漏掉的地方后把目标放到了 UI 上。来来回回翻代码后才发现这个地方。


C++ 异步编程框架

之前公司项目中一直没有方便好用的异步编程框架,在开发过程中会遇到一些问题。比如多线程编码时开发需要自己管理线程,并在两侧同步数据。一些操作也会被直接放在主线程中,就算单个操作的耗时并不明显,长此以往也会积少成多,最终拖慢了 UI 的速度。

但好在公司的代码库已经支持 C++11,我们基于 C++11 开发了一个仅使用标准库的框架。这样既能简化业务开发时的代码工作量,也可以提高代码的可读性,而且使用 std 组件实现也方便支持所有平台。更进一步的话还可以给框架加入其他支持,如:

  • task 优先级
  • task 延迟调用、重复调用,并可自定义调用间隔等属性
  • 指定多个 task 在同一个线程中运行

《白夜行》读书笔记

  1. 桐原洋介被杀害,警官笹垣润三和古贺开始调查。桐原家开着当铺,雇了松浦在当掌柜,警方对松浦,桐原妻子弥生子和孩子桐原亮司问话。调查洋介行踪发现他和西本文代有接触,警察便开始走访西本和她女儿西本雪穗。同时松浦和桐原太太还有亮司的不在场证明被接受,他们逐渐排除了嫌疑。寺崎忠夫进入警方视野,他以批发日用品为业,被怀疑为西本太太的同谋。一天雪穗称忘带钥匙,与房东一起进门,目睹西本文代死亡。
  2. 秋吉雄一接单偷怕雪穗,以此来赚外快。雪穗已经上初三,亲妈死后她被姑姑唐泽礼子收养,改名唐泽雪穗。秋吉以前意外拍到一张桐原弥生子和松浦的外遇照片,被同学菊池文彦借走。菊池本意应该是想帮桐原调查他爸的悬案,但却遭到亮司拒绝。雪穗的同学藤村都子跟她关系不好,但有一天她却突然被诱拐并被拍下裸照,雪穗和川岛江利子发现了现场,随后的照顾使藤村和雪穗关系变得极其亲密。警方在调查藤村的案件过程中找到了秋吉,秋吉认出了不知何故落在现场的菊池的钥匙扣,导致菊池被重点怀疑,但亮司出面替他做了不在场证明,菊池因此感激涕零。
  3. 转眼到了高中。亮司约园村友彦和同年级的村下在咖啡馆见面,表面上给两人提供女性陪聊的打工,实则是在拉皮条。除此之外友彦也会自己开发电脑游戏。亮司开始了倒卖盗版游戏的路子,寻春三人组中的西口奈美江后面被亮司拉拢作为他公司的会计。友彦不顾亮司的警告,偷偷跟三人组中的花冈夕子私下交欢,结果夕子在床上人被干没了。友彦向亮司求助,亮司本想弃之不顾,但偶然发现友彦会写程序,于是决定帮他。亮司找人假扮了夕子混淆死亡时间,并把自己的精液装到了夕子体内。渡过一劫后亮司的公司正式运行,靠着偷来的程序开始赚钱,友彦也对他死心塌地。

《被讨厌的勇气》读书笔记

阿德勒心理学中提出了几个反直觉的观点,通过它们也许可以缓解我们的思维定势,帮助解决内心的矛盾。

勇气

  1. 原因论和目的论。明确否定“心理创伤”,认为决定我们自己的不是“经验本身”而是“赋予经验的意义”,也就是我们现在的“目的”,“原因”是为了实现“目的”而被使用的伪装。不是说没有影响,而是产生了什么结果取决于自己。 书中提到一个例子,青年在咖啡店里被服务员洒到咖啡而发怒,他认为这是原因导致的行为。那这个时候如果手里有刀就会一怒之下捅人吗,当然不会。那么这时候选择“发怒”是一种手段,为了能快速地震慑服务员,让他听自己的话。虽然讲道理也可以,但是还是选择了这种更加快捷的方式,于是挑选了“愤怒”。而且怒愤并不是无法控制的,当你对一个人发火的中途要对另外的人交谈,那通常都会把怒气收起来,等结束之后继续发火。
  2. 想变得像其他人一样外向开朗 → 为什么想变 → 因为这样更优秀/更能获得幸福 → 你觉得现在的自己不够优秀/不够幸福,或者说你不喜欢现在的自己 → 你要有所改变,但并不是要变成别人 → 想变成别人是因为你在关注“被给予了什么”,其实应该把注意力放在“如何利用被给予的东西”上 → 一味关注“被给予了什么”对改变现状并没有帮助 → 你觉得痛苦觉得不幸,甚至想要变成别人,而这正是你自己选择的结果,你觉得痛苦/不幸对你自己而言“有好处”(好处或许就是人生有什么不顺利的就可以归咎到性格上)→ 缺乏改变的勇气,所以捏造了一个做不到的借口,然后心安理得的保持着不幸
  3. 阿德勒心理学用“生活方式”来描述人的性格和秉性,思考或行为的倾向。性格一词或许会带有“不可改变”这一感觉,但如果是生活方式的话,那就有改变的可能

用虚拟机搭建 OpenWrt 透明代理

因为有些软件不支持主动设置代理,所以有时候还得开个透明代理,在实际买设备前先用虚拟机安装 OpenWrt 实验一把。
一开始想着去找那些有一键设置的工具或脚本,结果来回折腾花了不少时间,最后还是参考这里的教程搞定了。

准备镜像

  1. 下载目前最新的 OpenWrt 镜像
  2. 解压得到 *.img,记为 op.img
  3. (可选)用这个镜像安装后的默认可用空间只有 100M,比较捉鸡。为了方便后续安装各种软件先做个扩容:到 Linux 系统下或用 wsl,运行 dd if=/dev/zero bs=1M count=2048 >> op.img,将镜像扩容到 2G

使用 Cmake 生成项目的工程文件

构建系统描述了如何使用构建工具从项目的源代码构建项目的可执行文件和库,从而自动执行该过程。例如,构建系统可以是用于命令行 make 工具的 Makefile 或用于集成开发环境的项目文件。为了避免维护多个这样的构建系统,项目可以使用以 CMake 语言编写的文件抽象地指定其构建系统。从这些文件中,CMake 通过称为生成器的后端为每个使用者在本地生成一个首选的构建系统。

另外,在 c++ 代码的跨平台使用中,包括增减文件在内,任何其他涉及项目工程的改动都要各个平台的开发同步处理各自平台的工程。而一旦某个平台没有及时更新项目文件就可能会导致 CI/CD 自动化流程失败,非常影响工作效率。

为避免费时费力地维护多个这样的构建系统,可以选择用 CMake 对其进行抽象。这样我们只需要维护一个 CMakeLists.txt,它就可以为你生成指定的 vcxproj 文件或者 makefile 文件。然后调用 MSBuild 或者 make 进行编译就可以。


Pixel 7 到了

之前纠结了一段时间,最终还是决定入手 pixel 尝尝鲜。随后赶着黑五下单了 pixel 7。其实在这之前我就一直用小米刷着 Pixel Experience 做主力机在用,所以 Android 13 倒没什么新鲜感,主要还是想体验 google 的 ai 相机。
另外正式迁移数据前还要先 root 处理下 VoLTE。


Charles 破解

Charles 是常用的抓包软件,可以用于分析 http(s) 流量,使用 Java 编写。目前最新版是 4.6.2,来试下它的破解。

工具

Java Decompiler 反编译 Java 字节码 https://github.com/java-decompiler/jd-gui/releases
Recaf 编辑 Java 字节码 https://github.com/Col-E/Recaf/releases

月影のシミュラクル-解放の羽- 感想

非常短小精悍的剧本,没有什么注水剧情反而比较讨喜。大概花 10 小时就能走完全部剧情。

整体上是由 BE 铺出的 TE 之路,通过不断解锁 BE 后最终达到真路线。实际在玩的过程中路线是以单一方式解锁的,另外系统自带了剧本的流程图,所处的分支也一目了然。一开始我以为剧本和选项里会带有推理情节,剧本前段还提到了男主有特殊能力。但后面发现基本没有推理要素。


《闪之轨迹》通关心得

剧情概要

第一部

七耀历 1204 年春,托尔茲军官学院诞生了一个全新的班级特科班《七班》,其成员是和最先进的战术导力器 ARCUS 有着高契合度的 9 个学生。刚入学他们就碰上了一场实战考验。在协力通过考验后,全员怀着自己的抱负表示留下。
黎恩·舒华泽    地方贵族之子
亚莉莎·莱恩福尔特 帝国最大重工企业的大小姐
艾略特·克雷格   想成为音乐家的正太
劳拉·S·亚尔赛德  武术名门之女
马奇亚斯·雷格尼兹 帝都首长儿子
艾玛·米尔斯汀   入学成绩位居榜首的七班班长
尤西斯·艾尔巴雷亚 名门贵族《四大名门》的次子
菲·克劳赛尔    猫系少女
盖乌斯·沃泽尔   高大的留学生
莎拉·巴雷斯坦   级任教官

学院生活由好几个模式组成。

  • 平时上课部分跳过,但是有时会有放学后的要素收集
  • 实习前有一个“自由活动日”,也就是一个星期天。三好学生黎爷会在这一天里帮学生会跑腿解决委托,刷同学好感和探索旧校舍。
  • 重头戏就是每月都会安排的名叫《特别实习》 的企划,将七班成员分为 A、B 两组分别前往帝国各地进行实习。玩家只能操作黎爷所在的 A 组。
  • 三月第一次到凯尔迪克,那里有个远近闻名的大市集。实习过程中大市集发生了不明盗窃事件,七班为了解决它开始调查,并最终在露纳利亚自然公园里找到了失窃的物资。然而这时他们却被赶来的当地领邦军包围。随后克蕾雅上尉带领铁路宪兵队(简称 TMP)前来救场,最后结束实习返回。