淘先锋技术网

首页 1 2 3 4 5 6 7

编译性的语言,编译过程中的错误只是简单的语法错误排除,对于C语言的卡位显得更加的疏松,很多即使有很多警告一样能够编译通过,相对来讲c++编译的语法显得更加严密但也阻止不了在执行的时候出问题,有些错误是压根在编译的时候发现不了的。从事嵌入式开发十几年用的最多的编程语言属于C/C++,如何避免出现执行错误,不仅仅是表面上的语法细节问题,更加深层次的是代码逻辑问题。

现在根据嵌入式的一些开发经验总结下编译么有错误,但是执行起来却导致系统崩溃的几点原因

1.内存泄漏

这种问题在编译的时候根本是无法追查出来的,做过一个项目,有个同事增加了一个新的功能,自从加上这个新功能之后,运行48个小时基本上就会死机,发现到这个时间点之后内存就会消耗光了,因为早期的嵌入式设备的内存非常有限,非常容易被耗光。最后发现是C语言写的一行代码不停的申请内存,由于每次申请的内存字节数不是很多,但时间长了内存也会慢慢耗光,最后还是通过钩子函数追踪找到问题所在。

在平常的开发过程中大块的内存泄漏问题一般比较容易查找,小块的内存泄漏查找的难度要多上好几倍,解决这种问题就是抓场景,特别是软件场景解决问题就是找到复现的关键点,一旦问题能够复现出来,基本上意味着问题已经解决了一半。

2.语法错误

语法细节上的错误,在编译的时候是无法直接看到的,举个简单的例子,直接分子为零,只有在运行的时候能发现,这一切就归属于语法错误,如果基本功扎实出现这种问题的概率会少很多,所以很多程序员容易忽略基本功的学习,觉得反正能够写代码,大不了直接在网上找代码,还不是一样能够完成任务。

这点C++编译的时候卡位会更加严格,初学C++的都会觉得比C语言编译起来费劲多了,这是C++吸取了C语言里面语法随意简单的一面,争取把问题发现在前面,所以C++运行的时候一些奇形怪状的错误相对少一些,C语言语法比较灵活,往往在追查问题的时候不太容易。

3.程序性能

一般经验丰富的程序员对这方面关注会多一点,有些程序运行一段时间就会变得非常缓慢,甚至卡死,这些原因就是深层次的代码逻辑以及架构的问题了,但再高深的架构也离不开基本的语法,编程语言基本功越扎实,技术自信度也就越强,也就越容易出创造性东西。

做一名程序员早晚都得在这个层面去思考,让自己逐渐在项目中成长,从项目中找到差距,是编程基本功问题还是编程思想出了问题,所以语法上的错误仅仅是表面的现象,出现过的错误怎么能不再下次出现了,审视每个在项目中遇到的问题。

一个程序员的成长过程就是先关注基本的语法错误,到提炼项目中的编程经验,到提升框架思想的过程,不要忽略编程过程中发现的每一个细节,每一次错误都是自己成长的机会。

希望能够帮到你。