出错总有原因 之 关于重新编译

来源:互联网 发布:芬琳漆怎么样 知乎 编辑:程序博客网 时间:2024/05/16 23:57

       在开发过程中,偶尔遇到这样的问题,程序运行不正常或者改动没有生效,Clean掉,重新编译,然后重新运行就好了;但有几次,程序工作得好好的,重新编译过后,就无法正确运行起来了,这是编译器的魔法吗?

       显然不是。程序工作不工作,都是有原因的,肯定不是什么魔法。

       我在实际工作中遇到的重新编译后程序就可以正常运行,往往是这么几种情况,第一种情况,最初的编译过程只编译了改动的静态库,但是对于可执行文件并没有强制的重新编译,所以仍然会调用原来代码,改动自然不会生效啦;在这种情况下,只要弄清楚了自己工程的依赖关系,重新编译指定的工程,自然就可以解决问题了;第二种情况就不常见了,有的时候调试进去发现代码和Symbols根本不对应,根本就没有跳转到指定的代码中去,甚至无法加断点,这种情况下,往往是加载的dll与代码不匹配或者相应的Symbol信息未加载到调试器,这个时候就需要全部Clean掉,然后重新编译,保证生成正确的dll组件啦。

        而在我们工作中出现的重新编译过后无法正确运行的问题是什么呢,原因是因为我们会用到公司提供的一些公共组件,如果强制全部重新编译,会去根据配置文件获取指定版本的公共组件,如果永远是指定使用最新的版本,但是会去重新获取最新版本的公共组件,但是如果自己的代码没有相应的调整或者说公共组件存在某些问题的话,自然就无法运行起来啦。

       感悟:重新编译是解决某些问题的利器,但要想无往而不利,最好的办法是弄清楚编译过程中究竟做了哪些事情,编译前有没有执行哪些脚本来生成一些公共的头文件,编译后又有没有执行某些脚本来拷贝公共组件或者是注册某些公共组件呢?所以,所有工作的核心都是深入了解其工作原理,代码如是,编译过程亦如是。

0 0
原创粉丝点击