大二下大三上,写完了一个6000行代码左右的很小的物理引擎+OpenGL显示的小项目。调试遇到很多问题,主要是BVH出现了死循环,BVH没有更新。碰撞出现了异常情况,导致crash。还有OpenGL相机漫游也遇到了一些问题。
在那之后,查一些常见bug就没问题了。
大四的时候,写了个Android播放器,硬解+软解。当时Android 还是Android.mk那套,ffmepg还没官方的Android编译工具链。主要就是移植了ffmpeg, 编写了JNI的接口,搞了个Android Native Window,搞了个多线程软解。
最崩溃的问题是,调试Android的C++了,当时的工具链很蛋疼,那时候还没有Android Studio。我Eclipse CDT无论怎么配置,总是识别C代码一堆红色。
另外,最终写完调试完大部分简单的bug后,遇到了奇怪的bug,播放视频大概30-40s之后,就会出现segment fault,bus error的错误。调试极其困难,因为解码循环已经过去了快一万次了,也没有什么特征,没法打断点。由于我太菜,当时还不会用stackoverflow。后来,思来想去各种尝试好几天,我发现是内存对齐的问题。
我自己感觉,做完这2个几千行C++代码级别的项目后,自己对内存&指针的理解,跨语言调用,工具链的使用,调试直觉都有了很大的提升了。
后来研究生,自己写了2个游戏外挂后,对计算机体系结构和汇编的理解感觉更好了一点。但是还是一只菜鸡吧。