公司用的VS2005,调试项目时一直都可以使用编辑并继续(Edit and continue),这个功能为我节省了大量的调试时间。然后自己电脑安装的VS2010,在断点调试时,该功能却不可用,调试(Debug)项目下的应用代码更改(Apply code changes)是灰色的,Alt + F10 也没有用,这让我很纠结。但是由于当时自己写的是一个小项目,修改代码再重启的消耗可以忍受,也就略微查了一下原因,貌似说这是VS2010在64位机上的一个bug(后来证明是错的),故就放弃了。
如今研究cocos2dx 3.0时安装了VS2012,由于项目编译起来较为费时,所以又要使用编辑并继续功能了,但是发现2012还是不行,断点后完全无视了我的代码更改,继续它自己的下一步,这可就没法忍受了,故耐心地查找了一下原因,花了1个多小时后终于解决了。同时也回过头去解决了当时VS2010 无法使用的问题。解决方法如下:
1、检查是否打开了编辑并继续功能:工具-选项-调试-编辑并继续-启用“编辑并继续”,这里要注意,VS2012和VS2013是默认关闭的,需要我们自己打开:启用本机“编辑并继续”;
2、这时如果还是没法使用该功能时,需要打开增量链接:项目属性-配置属性-链接器-常规-启用增量链接:是(/INCREMENTAL);
3、接着,需要修改调试信息格式:项目属性-配置属性-C/C++-常规-调试信息格式:用于“编辑并继续”的程序数据库(/ZI);
4、重新生成项目,首先查看有没有警告 warning LNK4075,如果有的话,查看下是哪种警告,我遇到的两种:
a、 忽略“/INCREMENTAL”(由于“xxxx”规范)
b、忽略“/EDITANDCONTINUE”(由于“xxxx”规范)
对于这两种警告,MSDN给出了解释(Linker Options>http://msdn.microsoft.com/en-us/library/962ct2hz.aspx),但是这里提到的并不全,我遇到的情况就不止这些,现在把导致警告的配置列在下面,大家可以根据自己的项目配置以及警告类型来修改:
/OPT:REF |
/OPT:ICF |
/OPT:LBR |
/ORDER |
/PROFILE |
/FORCE |
/RELEASE |
对于前面4种配置,除了(/OPT:LBR)没有遇到,暂且不知道外,其他3种都是在这里修改:项目属性-配置属性-链接器-优化-引用:否(/OPT:NOREF);启用COMDAT折叠:否(/OPT:NOICF);函数顺序(/ORDER):保持为空。可以参考(/INCREMENTAL(增量链接) http://msdn.microsoft.com/zh-cn/Library/4khtbfyf.aspx)
对于/PROFILE:项目属性-配置属性-链接器-高级-配置文件:否
对于/FORCE:项目属性-配置属性-链接器-常规-强制文件输出:保持为空
对于/RELEASE:这里就不用多说了吧,编辑并继续无法在release模式下使用。
好了,现在重新生成项目,然后试试看,是不是可以使用“应用代码更改”了呢?