如何从 coredump 文件中获取被优化掉的局部变量真实值

在 GCC -O3 优化级别下,很多局部变量是会被优化掉的,此时只能通过人工分析反汇编代码来获取所需信息,而这么做的前提是保存下来的寄存器中的值是准确的。绝大部分情况下 coredump 是由于 segment fault 或 assert 触发的,segment fault 情况下 Kernel 保存下来的 registers 信息是准确的,GDB 中直接用 info registers 就可以看到。然而若是由 assert 触发,由于 assert 会进行多层函数调用后最终执行 raise(),错误现场的寄存器信息是不准确的,这时候就需要一些其他手段来解决此问题。下面用一个具体例子来说明此问题。

使用 perf 进行性能分析时如何获取准确的调用栈

perf 是 Linux 下重要的性能分析工具,perf 可以通过采样获取很多性能指标,其中最常用的是获取 CPU Cycles,即程序各部分代码运行所需的时间,进而确定性能瓶颈在哪。不过在实际使用过程中发现,简单的使用perf record -g 获取到的调用栈是有问题的,存在大量 [Unknown] 函数,从 perf report 的结果来看这些部分对应地址大部分都是非法地址,且生成的火焰图中存在很多明显与代码矛盾的调用关系。

用于嵌入式车载安全预警的交通标志检测若干关键技术研究与验证

转眼间毕业已经要一年了,今天在整理电脑文件的时候翻出了当初写的硕士毕业论文,在知网上搜搜也找得到了。想想硕士期间做过的东西也太杂了,电机控制、Android 开发、嵌入式。。。最后确定了这个毕业论文的题目后只有1年不到的时间可以做了,这期间还要复习准备找工作,不过最后做出来的东西还算是自己基本满意的,这估计也是我在学术上的顶峰了……

多歧路,今安在?

好久没写博客了,翻看自己的博客,上次更新已是半年多前了,这大半年来忙于找工作,毕业设计,毕业答辩、入职……入职前两个月也是各种忙碌,现在对手头的工作也熟悉一些了,于是乎在低头做事的空暇时也需要抬起头来看看路了。

SSH反向穿透访问内网主机

学校的网络位于无数重NAT内网中,而且还有各种VPN,所以想要从外网访问十分困难,之前试过各种方法都没成功。今天偶然看到了SSH反向穿透的方法,因为我访问内网服务器主要也是需要SSH连接功能,故此方法可以很好的满足我的需求。此处记录下配置方法。