那为什么编译时没有发现有文件被编译呢,原因是这个头文件没有被任何CPP或C文件使用,所以编译时没有发现有文件需要重新编译。
Bug的原理明白了,解决方案就是在VS项目中删除那个头文件。
一种笨方法就是在VS里一个个头文件点击打开,找到不能打开的。
一种聪明的方法是写脚本解析工程文件,然后验证文件是否存在。
还有一种方法是通过DebugView来查看。
下面介绍一个这种方案。
1. 打开devenv.exe.config文件(此文件在%ProgramFiles%\Microsoft Visual Studio 10.0\Common7\IDE\ 或者 %ProgramFiles(x86)%\Microsoft Visual Studio 10.0\Common7\IDE\里)
2. 在</configuration>这行前面添加
<system.diagnostics>
<switches>
<add name=”CPS” value=”4″ />
</switches>
</system.diagnostics>
3. 重新启动Visual Studio
4. 打开DbgView(下载地址:http://technet.microsoft.com/en-us/sysinternals/bb896647), 勾选:菜单-》Capture-》Capture Win32 和 菜单-》Capture-》Capture Events
5. 点击F5开始调试,出现提示“此项目已经过期”时停止
6. 在DbgView按ctrl+F窗口查找“not up to date”,查找到如:
[120] Project ‘D:\cache\test1\test1.vcxproj’ not up to date because build input ‘D:\CACHE\TEST1\FUN1.H’ is missing.
7. 此时就找到了关键文件FUN1.H,只要在工程中移除这个文件再编译一次就可以了。
摘自:http://blog.csdn.net/jiaxiaokai/article/details/50923344 博主:举头红日白云低
摘自:http://blog.csdn.net/jiaxiaokai/article/details/50923344 博主:举头红日白云低
摘自:http://blog.csdn.net/jiaxiaokai/article/details/50923344 博主:举头红日白云低
不影响编译1、一种显而易见的方案就是找到这个不存在的文件,直接从工程的文件列表里面删除即可,如果工程小,倒是可以这么干,如果工程很大,那就是体力活了
2、还有一个方法是开发一个工具,解析下VS2010的vcxproj工程文件,这是个XML文件,解析并不困难,把里面的文件都校验一下,把不存在的文件直接找出来
3、还是一个方法是通过DbgView工具[点我下载]来输出不存在的文件(此方法需要了解VS的devenv的配置的含义,以及一些脚本的配置方法,我不懂,因此依葫芦画瓢尝试了下,发现很简单!)这种方法需要改下VS2013的IDE的配置文件:devenv.exe.config这个文件的位置%ProgramFiles%\MicrosoftVisualStudio10.0\Common7\IDE\或者%ProgramFiles(x86)%\MicrosoftVisualStudio10.0\Common7\IDE\(1)用一个文本编辑工具打开devenv.exe.config文件
(2)然后在这行的下面添加如下配置(注:如果是VS2010或者之前的版本第三行请使用)(3)重启下VS
(4)打开DbgView[下载地址https://docs.microsoft.com/zh-cn/sysinternals/downloads/debugview],注意把Capture菜单里面的CaptureWin32和CaptureEvents勾选上
(5)在VS里面F5开始调试,等"此项目已经过期"的框d出来之后,去DbgView的输出里面找类似下面的输出(如果内容很多可以直接查找ismissing或者notuptodate这些关键字直接就定位到不存在的文件了
(6)通过这个方法可以把所有不存在的文件都找到并在VS资源管理器中找到并移除,全部移除后发现问题解决!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)